[TOC]
# 配置方法
Jenkinsfile方式需要將腳本內容編寫到項目中的Jenkinsfile文件中,每次構建會自動拉取項目并且獲取項目中Jenkinsfile文件對項目進行構建
- 配置pipeline
| 配置pipeline |
| :----------------------------------------------------------: |
|  |
- 準備Jenkinsfile
| 準備Jenkinsfile文件 |
| :----------------------------------------------------------: |
|  |
- 測試效果
| 測試效果 |
| :----------------------------------------------------------: |
|  |
# Jenkinsfile 的使用
上面講過流水線支持兩種語法,即聲明式和腳本式,這兩種語法都支持構建持續交付流水線。并且都可以用來在 Web UI 或 Jenkinsfile 中定義流水線,不過通常將 Jenkinsfile 放置于代碼倉庫中(當然也可以放在單獨的代碼倉庫中進行管理)。
創建一個 Jenkinsfile 并將其放置于代碼倉庫中,有以下好處
* 方便對流水線上的代碼進行復查/迭代
* 對pipeline進行版本審計跟蹤
* 流水線真正的源代碼能夠被項目的多個成員查看和編輯
## 環境變量
### 1.靜態變量
Jenkins有許多內置變量可以直接在Jenkinsfile中使用,可以通過JENKINS\_URL/pipeline/syntax/globals#env 獲取完整列表。目前比較常用的環境變量如下
* BUILD\_ID:當前構建的ID,與Jenkins版本 1.597+中的BUILD\_NUMBER完全相同
* BUILD\_NUMBER:當前構建的 ID,和BUILD\_ID一致
* BUILD\_TAG:用來標識構建的版本號,格式為:jenkins-${JOB\_NAME}-${BUILD\_NUMBER}, 可以對產物進行命名,比如生產的jar包名字、鏡像的TAG等;
* BUILD\_URL:本次構建的完整 URL,比如:[http://buildserver/jenkins/job/MyJobName/17/;](http://buildserver/jenkins/job/MyJobName/17/%EF%BC%9B)
* JOB\_NAME:本次構建的項目名稱
* NODE\_NAME:當前構建節點的名稱;
* JENKINS\_URL:Jenkins 完整的 URL,需要在SystemConfiguration設置;
* WORKSPACE:執行構建的工作目錄。
示例如果一個流水線名稱為`print_env`,第2次構建,各個變量的值。
~~~bash
BUILD_ID: 2
BUILD_NUMBER: 2
BUILD_TAG:jenkins-print_env-2
BUILD_URL:http://192.168.10.16:8080/job/print_env/2/
JOB_NAME:print_env
NODE_NAME:built-in
JENKINS_URL:http://192.168.10.16:8080/
WORKSPACE:/bitnami/jenkins/home/workspace/print_env
~~~
上述變量會保存在一個Map中,可以使用env.BUILD\_ID或env.JENKINS\_URL引用某個內置變量
~~~json
pipeline {
agent any
stages {
stage('print env') {
parallel {
stage('BUILD_ID') {
steps {
echo "$env.BUILD_ID"
}
}
stage('BUILD_NUMBER') {
steps {
echo "$env.BUILD_NUMBER"
}
}
stage('BUILD_TAG') {
steps {
echo "$env.BUILD_TAG"
}
}
}
}
}
}
~~~
### 2.動態變量
動態變量是根據某個指令的結果進行動態賦值,變量的值根據指令的執行結果而不同。如下所示
* returnStdout:將命令的執行結果賦值給變量,比如下述的命令返回的是clang,此時 CC 的值為“clang”。
* returnStatus:將命令的執行狀態賦值給變量,比如下述命令的執行狀態為 1,此時 EXIT\_STATUS 的值為 1。
~~~json
//Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
environment {
// 使用 returnStdout
CC = """${sh(
returnStdout: true,
script: 'echo -n "clang"' //如果使用shell命令的echo賦值變量最好加-n取消換行
)}"""
// 使用 returnStatus
EXIT_STATUS = """${sh(
returnStatus: true,
script: 'exit 1'
)}"""
}
stages {
stage('Example') {
environment {
DEBUG_FLAGS = '-g'
}
steps {
sh 'printenv'
}
}
}
}
~~~
- DevOps介紹
- 持續集成流程
- git工作流實踐
- 新人準備git環境
- git工作流最佳實踐
- jenkins基礎入門
- jenkins簡介
- jenkins安裝(docker)
- 源碼拉取
- maven構建
- 應用發布
- 結合gitlab版本管理
- jenkins-docker部署
- harbor鏡像發布
- jenkins集成SonarQube
- SonarQube代碼檢測
- 集成SonarQube
- jenkins-pipeline
- 構建pipeline任務
- pipeline基礎結構
- pipeline核心語法
- jenkinsfile構建
- 完整案例
- 整合釘釘發送通知
- 腳本使用憑證信息
- jenkins結合k8s使用
- k8s架構及基礎概念
- k8s操作命令
- jenkins部署k8s
- 附錄(其他未完成)
- jenkins高可用服務搭建
- gitlab-docker環境搭建
- 開發人員安裝git
- JDK與maven
- docker安裝gitlab
- docker安裝
- docker-compose安裝
- harbor安裝
- SonarQube安裝
- 2.暫時沒寫的內容
- 構建結果郵件發送
- 已有項目上傳gitlab