Jenkins发布Docker到k8s
Docker 镜像push到仓库后,算是完成了构建打包的过程。发布时,可以通过Jenkins远程操作kubernetes集群master实现容器调度。本文介绍如何通过编写groovy脚本自动获取images tag,实现Jenkins参数化构建。
Jenkins配置
安装插件
- 参数化构建插件:Active Choices Plug-in
- 远程ssh插件:SSH plugin或者Publish Over SSH
配置插件
- 进入系统设置,添加ssh site或者SSH Servers,可以使用用户名密码或者key。
- 使用Active Choices Plug-in
新建job,选择参数化构建,使用Active Choices Parameter,选择groovy script:
groovy脚本如下:
my-registry
对应私有参考ip或者域名
import groovy.json.JsonSlurper
import hudson.model.*
/**
* Created by erdaoay on 17/3/17.
*/
//get jenkins job_name
def build = Thread.currentThread().toString()
def regexp= ".+?/job/([^/]+)/.*"
def match = build =~ regexp
def job_name = match[0][1]
// call registry v2 api
def url = 'http://my-registry:5000/v2/overseas/'+ job_name + '/tags/list'
def tags = url.toURL().text
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(tags)
// return tags
return object.tags
保存后,构建,即可看到参数中列出了镜像版本。
根据使用ssh插件不同,可以在构建时选择execute shell script no remote host using ssh
或构建后操作选择send build artifacts over ssh
。然后输入需要执行的脚步或者命令,例如
# VERSION:上面参考构建的name
# update_app.sh 操作k8s或者swarm的脚本
sh -x /home/centos/update_app.sh ${JOB_NAME} ${VERSION}
截图: groovy脚本
shell脚本
效果 从图中可以看出,docker镜像有四个版本。其中对maven snapshot的版本,添加了时间戳和git提交id。