Jenkins Pipeline五步构建法¶
Jenkins Pipeline五步构建法 是一套標準化的持續集成(CI)流程,用於將應用程式從原始碼自動轉化為 Docker 映像檔並發佈至倉庫^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。該方法通過 Jenkins Pipeline 腳本定義,涵蓋了從代碼獲取到最終映像推送的完整生命週期^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
五步流程¶
該構建法將整個 CI 過程劃分為五個關鍵階段:
-
Pull (拉取代碼): 從代碼倉庫(如 GitLab 或 Gitee)克隆項目代碼到 Jenkins 構建目錄^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
- 操作示例:
git clone ${params.git_repo} ...並切換至指定分支或版本^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
- 操作示例:
-
Build (編譯代碼): 在構建環境中執行編譯命令,通常涉及 Maven 或 Gradle 等工具^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
- 操作示例:執行
mvn clean package -Dmaven.test.skip=true來構建 Java 項目^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
- 操作示例:執行
-
Package (打包): 將編譯生成的二進制文件(如 JAR 包)移動到統一的發佈目錄(通常命名為
project_dir),為製作鏡像做準備^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。 -
Image (構建鏡像): 通過編寫 Dockerfile 並執行
docker build命令,將應用程式打包成 Docker 映像^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。- 操作示例:使用
docker build -t harbor.od.com/...構建映像^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
- 操作示例:使用
-
Push (推送鏡像): 將構建完成的 Docker 映像推送到私有映像倉庫(如 Harbor),以便後續的 Kubernetes 集群拉取部署^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
- 操作示例:執行
docker push harbor.od.com/...^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。
- 操作示例:執行
Pipeline 結構示例¶
以下是一個典型的 Jenkins Pipeline stages 區塊結構,展示了五步構建法的腳本實現^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]:
pipeline {
agent any
stages {
stage('pull') {
steps {
sh "git clone ${params.git_repo} ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.app_name}/${env.BUILD_NUMBER} && git checkout ${params.git_ver}"
}
}
stage('build') {
steps {
sh "cd ${params.app_name}/${env.BUILD_NUMBER} && /var/jenkins_home/maven-${params.maven}/bin/${params.mvn_cmd}"
}
}
stage('package') {
steps {
sh "cd ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.target_dir} && mkdir project_dir && mv *.jar ./project_dir"
}
}
stage('image') {
steps {
writeFile file: "${params.app_name}/${env.BUILD_NUMBER}/Dockerfile", text: """FROM harbor.od.com/${params.base_image}
ADD ${params.target_dir}/project_dir /opt/project_dir"""
sh "cd ${params.app_name}/${env.BUILD_NUMBER} && docker build -t harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag} . && docker push harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag}"
}
}
}
}
相關概念¶
- Jenkins
- [[Pipeline]]
- [[Docker]]
Sources¶
^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]