企業DevOps之路:Jenkins 流水線

BUG弄潮兒發表於2022-04-14

1. Pipeline 概述

Pipeline 即流水線,是 jenkins2.X 的新特性,是 jenkins 官方推薦使用的持續整合方案。與傳統的自由風格專案不同,它是通過 jenkins DSL 編寫程式碼來實現。相比於之前使用者只能通過 Web 介面進行配置的方式來定義 Jenkins 任務,現在通過使用 jenkins DSL 和 Groovy 語言編寫程式,使用者可以定義流水線並執行各種任務。

Jenkins pipeline包含兩類元素,分別是stages和steps。如圖:

  • step 代表單一的操作;告訴 Jenkins 做什麼。比如,程式碼從倉庫檢出程式碼,執行指令碼

  • stage 等於一系列 step 的組合,通常來表示 Jenkins pipeline 程式的可示化。例如,Build、Test、Deploy等

更詳細的資料請檢視官網

https://www.jenkins.io/doc/book/pipeline/

Pipeline 有兩種語法,分別是宣告式和指令碼式

宣告式語法

pipeline {
  agent any
  stages {
      stage('Build') {
          steps {
              // TODO
          }
      }
      stage('Test') {
          steps {
              // TODO
          }
      }
      stage('Deploy') {
          steps {
              // TODO
          }
      }
  }
}

agent any:表示任意一個可用代理節點上執行該Pipeline

stage('Build'):定義階段

steps {}:階段執行的步驟

指令碼式語法

node {
  stage('Build') {
      // TODO
  }
  stage('Test') {
      // TODO
  }
  stage('Deploy') {
      // TODO
  }
}

node:表示任意一個可用代理節點上執行該Pipeline

stage('Build') {}:定義階段。在指令碼式語法中 stage 程式碼塊是可選的;不過明確寫上的話可以讓每個階段的任務更清晰

3. 安裝 Jenkins Pipeline 外掛

安裝 Pipeline 和 Pipeline Maven Integration 外掛

Manage Jenkins -> Manage Plugins

安裝後,重啟 Tomcat。

3. 流水線編譯與部署

建立流水線任務

新建Item

配置流水線任務

初學者對於 Pipeline 的指令碼肯定無從入手的;但是 Pipeline 提供了一個非常有用的幫助文件。

http://127.0.0.1:8080/jenkins/job/Pipeline_maven/pipeline-syntax/

Pipeline 指令碼有兩種編寫模式

  • Pipeline 指令碼

  • Jenkinsfile 檔案

這裡選擇 Pipeline script

3.1 克隆程式碼

git credentialsId: 'c8eea0cc-24e7-4eb1-a2dd-42fc1066f35a', url: 'https://gitee.com/hjj520/ruoyi-patrol.git'

3.2 編譯

bat 'mvn clean install'

在 Windows 作業系統 Jenkins Pipeline 中要使用bat來執行 Windows 命令;而 Linux 作業系統則需要使用sh來執行 Shell 命令。

3.3 上傳 jar包

bat 'C:/jenkins/pscp.exe -r -l root -pw root %WORKSPACE%/ruoyi-admin/target/ruoyi-admin.jar 192.168.10.8:/home/huangjinjin/software/springdocker'

圖片

完整 Pipeline 指令碼

pipeline {
  agent any

  stages {
      stage('git clone') {
          steps {
              git credentialsId: 'c8eea0cc-24e7-4eb1-a2dd-42fc1066f35a', url: 'https://gitee.com/hjj520/ruoyi-patrol.git'
          }
      }
       
      stage('complie') {
          steps {
                bat 'mvn clean install'
          }
      }
       
      stage('upload') {
          steps {
                bat 'C:/jenkins/pscp.exe -r -l root -pw root %WORKSPACE%/ruoyi-admin/target/ruoyi-admin.jar 192.168.10.8:/home/huangjinjin/software/springdocker'
          }
      }
       
  }
   
}

其他步驟可以自行新增,例如,測試、部署等。

相關文章