经过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 """