jenkins~pipeline~修改文件里的版本


通過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  
         """


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM