Skip to content

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 過程劃分為五個關鍵階段:

  1. 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]。
  2. 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]。
  3. Package (打包): 將編譯生成的二進制文件(如 JAR 包)移動到統一的發佈目錄(通常命名為 project_dir),為製作鏡像做準備^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]。

  4. 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]。
  5. 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}"
      }
    }
  }
}

相關概念

Sources

^[400-devops__06-Kubernetes__k8s-paas__05.K8S结合CI&CD持续交付和集中管理配置.md]