jenkins pipeline 调用远程docker宿主机进行打包镜像和推送镜像
jenkins pipeline 调用远程docker宿主机打包镜像
需要使用远程docker宿主机打包镜像的原因是有两点:1. 我的Jenkins是通过k8s集群启动的,Jenkins容器中没有安装docker环境。2. 开发提供的代码没有使用Maven 插件 docker-maven-plugin。
docker API接口放开请参考:https://www.cnblogs.com/zoujiaojiao/p/13277862.html
Jenkins安装docker工具
在系统管理-全局工具配置中安装docker工具
Jenkins是用容器启动的,挂在路径是/data/jenkins/docker:/var/jenkins_home/docker
没有进入容器中安装docker,直接将docker的bin下面内容拷贝到该路径。
pipeline中调用
前面省略了,调用docker工具,需要进行变量赋值
stages {
stage('准备'){
steps{
script{
ACTION = "${Dev_or_Test}"
def dockerPath = tool 'docker-19.03.8' //全局工具
env.PATH = "${dockerPath}:${env.PATH}" //导入环境变量
}
}
}
stage('拉代码') {
steps {
echo '开始拉取代码.....'
echo '${params.BRANCH}'
git branch: "${params.BRANCH}", credentialsId: '7367665a-9XXXX13f5ea29', url: 'http://gitlab.XXX/admin.git'
}
}
stage('编译打包镜像') {
steps {
echo '开始执行打包操作.......'
sh 'mvn -f ./pom.xml clean install -Dmaven.test.skip=true -U'
//调用远程的docker进行打包
sh 'docker -H tcp://10.10.3.72:2375 build -t docker.vonedao.com/vonedao-cs/vonedao-job-admin:1.0.0 .'
//调用远程的docker进行镜像推送。仓库docker.vonedao.com需要登录账户密码,可以拷贝配置过来。后面有说明
sh 'docker -H tcp://10.10.3.72:2375 push docker.vonedao.com/vonedao-cs/vonedao-job-admin:1.0.0'
}
}
stage('部署开发环境 ') {
steps {
echo '开始发布开发环境 .......'
sh '/var/jenkins_home/piplineshell/deploy_dev.sh'
}
}
后面其余代码省略
构建时报错:unauthorized: access to the requested resource is not authorized
,如下图:
报错原因是:jenkins容器中执行docker push 时,仓库需要登录。
解决办法
Jenkins容器是以Jenkins账户启动,Jenkins的home目录是 /var/jenkins_home,挂载在宿主机/data/jenkins,我们只需要将登录仓库的账户密码文件复制到Jenkins容器的Jenkins账户下就可以了。
操作过程
- 在宿主机上进行
docker login docker.vonedao.com
图中提示密码存在/root/.docker/config.json中。 - 复制密码文件
cp /root/.docker/config.json /data/jenkins/.docker/config.json
- 构建测试