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账户下就可以了。

操作过程

  1. 在宿主机上进行docker login docker.vonedao.com

    图中提示密码存在/root/.docker/config.json中。
  2. 复制密码文件
cp /root/.docker/config.json /data/jenkins/.docker/config.json
  1. 构建测试


posted @ 2020-07-10 09:10  邹姣姣  阅读(5448)  评论(0编辑  收藏  举报