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
- 構建測試