jenkins~pipeline~修改檔案裡的版本
阿新 • • 發佈:2020-11-18
通過jenkins實現CICD是很容易的,當你使用jenkins pipeline之後可以使用你的程式碼複用性更高,它使用groovy作為指令碼語言,你可以把公用的方法寫到var資料夾裡,在其它jenkinsfiles檔案裡去引用它們即可。
對於jenkins構建的映象來說,像docker,k8s-helm都需要有版本的概念,像docker你可以直接使用jenkins-tagId,而helm由於是一組docker容器的組合,所以它的版本號是獨立的,一般會記錄在它的Chart.yaml檔案裡,我們需要通過groovy來修改每次部署之後的helm chart的版本,即讓它的版本增1。
sh執行多行命令
對於使用sh來說,通過sh """來實現多行命令的執行,程式碼如下:
sh """
echo "hello world"
echo "yes"
sh裡的變數
對於sh """裡的變數,有它特殊的寫法,即使用"$變數名"的方式
let VER="\$VER"+1
echo "version:\$VER"
sed修改檔案內容
在sh裡,我們使用sed命令來修改檔案的內容,你可以刪除字元所在的行,在某個位置位置插入字元,在檔案尾插入字元等,下面是我對修改helm chart.yaml裡的版本資訊寫的sh指令碼
// 注意:在sed裡兩個\\表示輸出它後面的空格,-i表示操作檔案,sh裡的變數需要用"\$名稱"來輸出 // 第一行 sed刪除之前的imageTag:$config.tagId這行;第二行sed是新增一個新的imageTag // 第三行 是查詢當前chart的版本 // 第四行 當前版本加1 // 第六七行是刪除原chart裡的版本資訊 // 第八九行是新增新的版本資訊 sh """ sed -i "/${config.imageName}-imageTag/{n;d}" ${WORKSPACE}/charts/${config.namespace}/values.yaml sed -i "/${config.imageName}-imageTag/a \\ imageTag: $config.tagId" ${WORKSPACE}/charts/${config.namespace}/values.yaml VER=\$(cat ${WORKSPACE}/charts/${config.namespace}/Chart.yaml | grep 'version:' | awk -F ':' '{print \$2}') let VER="\$VER"+1 echo "version:\$VER" sed -i '/appVersion/d' ${WORKSPACE}/charts/${config.namespace}/Chart.yaml sed -i '/version/d' ${WORKSPACE}/charts/${config.namespace}/Chart.yaml sed -i '\$a\\appVersion: '"\$VER" ${WORKSPACE}/charts/${config.namespace}/Chart.yaml sed -i '\$a\\version: '"\$VER" ${WORKSPACE}/charts/${config.namespace}/Chart.yaml cd .. helm package ${WORKSPACE}/charts/${config.namespace} helm upgrade ${config.namespace} ${WORKSPACE}/charts/${config.namespace} -i """