Jenkins(集群與流水線配置)
Jenkins集群
集群化構建可以提升構建效率,也可以并發在多臺機器上執行構建。
安裝前提:內存至少512MB、Java 17 以上、Maven環境、Git環境
配置集群步驟
配置節點菜單
新建節點
查看節點配置狀態
新建完節點,點擊所配置的節點,查看配置狀態
配置完,在該節點的root目錄,可以看到
# 可以在/root目錄下,看到該文件
remoting
remoting.jar
配置并發構建
默認情況,不會并發構建,只會主節點進行構建任務。
需要在該任務構建配置,勾選并發構建配置。
勾選后,進行并發構建
配置節點的并發構建的個數
在[構建執行狀態],點擊每個節點名稱,進行配置構建個數
配置任務只能在某節點進行構建
在該任務進行配置,
# 基本語法有:
節點標簽名1 || 節點標簽名1 # 只能在節點1或節點2上執行
節點標簽名1 && 節點標簽名1
Pipline流水線
流水線既能作為任務的本身,也能作為Jenkinsfile。
使用流水線可以讓我們的任務從ui手動操作,轉換為代碼化,像docker的dockerfile一樣,從shell命令到配置文件,更適合大型項目,可以讓團隊其他開發者同時參與進來,同時也可以編輯開發Jenkinswebui不能完成的更復雜的構建邏輯,作為開發者可讀性也更好。
自動化構建
主要腳本
pipeline:整條流水線
agent:指定執行器
stages:所有階段
stage:某一階段,可有多個
steps:階段內的每一步,可執行命令
流水線配置
基礎框架 -基本腳本:
pipeline {agent any # agent單獨配置,# agent {# node {# label "master" # 配置節點名稱,在上面的配置集群時,指定的新建節點。例:jenkins-02# } # }stages {stage('拉取代碼') {steps {echo '拉取代碼完成'}}stage('執行構建') {steps {echo '執行構建完成'}}}post {always {echo "完成"}failure {echo "失敗"}}
}
注意:每次更改腳本,需要手動,點擊Approve(批準)即可。
否則執行任務,會出現該異常
org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use...
點擊Approve(批準)即可。
安裝可視化界面
blue ocean可視化流水線界面
訪問,查看新的UI界面
聲明式流水線
在該任務的流水線,點擊流水線語法,
Git配置
# 生成的腳步
git credentialsId: 'gitee', url: 'https://gitee.com/yan418/jenkins.git'
配置Maven
# 可通過命令配置
# 找到所下載的代碼目錄,對應的pom.xml文件位置,進行maven打包
# 單行寫命令,sh "mvn --version"
# 多行寫命令,在 sh """ xxx """ 結尾
stage("執行構建") {steps {sh """ cd demomvn clean package"""echo '構建完成'}
}
Pre Steps(前期步驟)
# 生成的腳步
sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'sh cmm.sh demo', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
Post Steps(后續步驟)
頁面配置,與之前頁面操作配置一樣,點擊下方,生成腳本。
# 生成的腳步
sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup /usr/local/java/jdk1.8.0_202/bin/java -jar /root/cmm/demo*.jar >/root/log/demo.log 2>&1 & sleep 1', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/cmm', remoteDirectorySDF: false, removePrefix: 'demo/target', sourceFiles: '**/demo/target/demo*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
對應完整的腳步
根據上面生產的腳步,進行完整拼接,配置該任務的腳步
pipeline {agent any tools {maven "maven-3.6.1" # maven-3.6.1,是在Tools里配置的Maven名稱}stages {stage('拉取代碼') {steps {# 從git倉庫,拉取代碼git credentialsId: 'gitee', url: 'https://gitee.com/yan418/jenkins.git'echo '拉取代碼完成'}}stage('執行打包項目') {steps {# 找到所下載的代碼目錄,對應的pom.xml文件位置,進行maven打包# 單行寫命令,sh "mvn --version"# 多行寫命令,在 sh """ xxx """ 結尾sh """ cd demomvn clean package"""echo '構建完成'}}stage('執行Pre Steps') {steps {# Pre Steps(前期步驟)sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'sh cmm.sh demo', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '執行構建完成'}}stage('發送jar包到測試服務器') {steps {# Post Steps(后續步驟)sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup /usr/local/java/jdk1.8.0_202/bin/java -jar /root/cmm/demo*.jar >/root/log/demo.log 2>&1 & sleep 1', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/cmm', remoteDirectorySDF: false, removePrefix: 'demo/target', sourceFiles: '**/demo/target/demo*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '執行構建完成'}}}post {always {echo "完成"}failure {echo "失敗"}}
}
配置完,進行構建任務,查看流水線情況,也可以單獨執行某個環節的任務重啟
配置多分支Job任務
一套代碼,分為test分支和master分支,通過一個Jenkins,分別發送部署到測試服務和生產服務器。
再點擊-創建流水線,如果在操作過程失敗,點擊設置按鈕,進行手動配置
配置分支源
手動配置多分支源
配置Jenkinsfile
將不同的Jenkinsfile文件,提交不同的分支上。
查看頁面配置
分別單獨對不同的分支的代碼,進行構建。也可以在多分支JOB運行,一次構建不同分支的任務構建。