經過jenkins實現CICD是很容易的,當你使用jenkins pipeline以後能夠使用你的代碼複用性更高,它使用groovy做爲腳本語言,你能夠把公用的方法寫到var文件夾裏,在其它jenkinsfiles文件裏去引用它們便可。
對於jenkins構建的鏡像來講,像docker,k8s-helm都須要有版本的概念,像docker你能夠直接使用jenkins-tagId,而helm因爲是一組docker容器的組合,因此它的版本號是獨立的,通常會記錄在它的Chart.yaml文件裏,咱們須要經過groovy來修改每次部署以後的helm chart的版本,即讓它的版本增1。docker
對於使用sh來講,經過sh """來實現多行命令的執行,代碼以下:app
sh """ echo "hello world" echo "yes"
對於sh """裏的變量,有它特殊的寫法,即便用"$變量名"的方式spa
let VER="\$VER"+1 echo "version:\$VER"
在sh裏,咱們使用sed命令來修改文件的內容,你能夠刪除字符所在的行,在某個位置位置插入字符,在文件尾插入字符等,下面是我對修改helm chart.yaml裏的版本信息寫的sh腳本code
// 注意:在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 """