使用 Jenkins 管道将 Docker 图像传输到 Docker Hub 时出错
Error when transferring Docker Image to Docker Hub using Jenkins Pipeline
下面是我用来构建 Docker 映像并将其部署到 Docker 集线器的 Jenkins 管道脚本的一部分。我遇到的问题是,在执行管道后,Docker 图像不会传输到 Docker Hub ~并且~本地 Docker 图像(在此过程中创建)不会被删除.
pipeline {
environment {
registry = "<my_docker_hub userid>/object"
registryCredential = 'dockerhub'
}
agent { label 'ubuntu16.04-slave-two' }
stages {
stage('Cloning Git') {
steps {
...
}
}
stage('Building image') {
steps{
sh "/usr/local/bin/docker-compose -p $registry:$BUILD_NUMBER build "
}
}
stage('Deploy Image') {
steps{
sh "docker push $registry:$BUILD_NUMBER"
}
}
stage('Remove Unused docker image') {
steps{
sh "docker rmi $registry:$BUILD_NUMBER"
}
}
}
}
尽管 我在构建图像时收到成功消息:
Successfully built fe86784636c2
Successfully tagged <docker_hub_id>object44_website:latest
图像未传输到 Docker 集线器。
下面是我在 运行 管道代码时得到的日志:
Started by user Jenkins Admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on ubuntu16.04-slave-two in /var/jenkins/workspace/oracle-client-with-flask
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Cloning Git)
[... snip ...']
Building authorize-service
Step 1/11 : FROM oraclelinux:7
---> a803b2474b20
[... snip ...]
Step 3/4 : COPY . /var/www/html/
---> Using cache
---> e0b4cd5713c0
Step 4/4 : EXPOSE 80
---> Using cache
---> fe86784636c2
Successfully built fe86784636c2
Successfully tagged <docker_hub_id>object44_website:latest
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy Image)
[Pipeline] sh
+ docker push <docker_hub_id>/object:44
The push refers to a repository [docker.io/<docker_hub_id>/object]
An image does not exist locally with the tag: <docker_hub_id>/object
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Remove Unused docker image)
Stage "Remove Unused docker image" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
如何才能将图像成功发送到 Docker Hub?
TIA
编辑:这是 docker-compose.yml 文件
version: '3'
services:
authorize-service:
build: ./authorizations
container_name: authorize-service
environment:
- DB_IP=XXX.XX.XX.XX
- DB_PORT=1521
- DB_SID=TEST
- DB_USER=xxxxxxx
- DB_PASS=xxxxxxx
ports:
- 2700:5000
networks:
- kdcnetwork
testtab-service:
build: ./testtab
container_name: testtab-service
environment:
- DB_IP=XXX.XX.XX.XX
- DB_PORT=1521
- DB_SID=TEST
- DB_USER=xxxxx
- DB_PASS=xxxxx
ports:
- 2800:5000
networks:
- kdcnetwork
website:
build: ./website
container_name: testtab-website
links:
- testtab-service
volumes:
- ./website:/var/www/html
ports:
- 5000:80
networks:
- kdcnetwork
depends_on:
- testtab-service
networks:
kdcnetwork:
driver: bridge
您没有提供 docker-compose 文件,所以我无法给出非常准确的答案,但我可以简单地找到
Successfully tagged <docker_hub_id>object44_website:latest
与您尝试推送的内容不同:
docker push <docker_hub_id>/object:44
这两个名字必须相同。
编辑:
因此您必须将 docker-compose 中的部分更改为以下内容
website:
build: ./website
image: <docker_hub_id>/object:44
所以 docker-compose 将构建映像 <docker_hub_id>/object:44
并且您的 docker 推送命令应该能够推送它
下面是我用来构建 Docker 映像并将其部署到 Docker 集线器的 Jenkins 管道脚本的一部分。我遇到的问题是,在执行管道后,Docker 图像不会传输到 Docker Hub ~并且~本地 Docker 图像(在此过程中创建)不会被删除.
pipeline {
environment {
registry = "<my_docker_hub userid>/object"
registryCredential = 'dockerhub'
}
agent { label 'ubuntu16.04-slave-two' }
stages {
stage('Cloning Git') {
steps {
...
}
}
stage('Building image') {
steps{
sh "/usr/local/bin/docker-compose -p $registry:$BUILD_NUMBER build "
}
}
stage('Deploy Image') {
steps{
sh "docker push $registry:$BUILD_NUMBER"
}
}
stage('Remove Unused docker image') {
steps{
sh "docker rmi $registry:$BUILD_NUMBER"
}
}
}
}
尽管 我在构建图像时收到成功消息:
Successfully built fe86784636c2
Successfully tagged <docker_hub_id>object44_website:latest
图像未传输到 Docker 集线器。
下面是我在 运行 管道代码时得到的日志:
Started by user Jenkins Admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on ubuntu16.04-slave-two in /var/jenkins/workspace/oracle-client-with-flask
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Cloning Git)
[... snip ...']
Building authorize-service
Step 1/11 : FROM oraclelinux:7
---> a803b2474b20
[... snip ...]
Step 3/4 : COPY . /var/www/html/
---> Using cache
---> e0b4cd5713c0
Step 4/4 : EXPOSE 80
---> Using cache
---> fe86784636c2
Successfully built fe86784636c2
Successfully tagged <docker_hub_id>object44_website:latest
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy Image)
[Pipeline] sh
+ docker push <docker_hub_id>/object:44
The push refers to a repository [docker.io/<docker_hub_id>/object]
An image does not exist locally with the tag: <docker_hub_id>/object
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Remove Unused docker image)
Stage "Remove Unused docker image" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
如何才能将图像成功发送到 Docker Hub?
TIA
编辑:这是 docker-compose.yml 文件
version: '3'
services:
authorize-service:
build: ./authorizations
container_name: authorize-service
environment:
- DB_IP=XXX.XX.XX.XX
- DB_PORT=1521
- DB_SID=TEST
- DB_USER=xxxxxxx
- DB_PASS=xxxxxxx
ports:
- 2700:5000
networks:
- kdcnetwork
testtab-service:
build: ./testtab
container_name: testtab-service
environment:
- DB_IP=XXX.XX.XX.XX
- DB_PORT=1521
- DB_SID=TEST
- DB_USER=xxxxx
- DB_PASS=xxxxx
ports:
- 2800:5000
networks:
- kdcnetwork
website:
build: ./website
container_name: testtab-website
links:
- testtab-service
volumes:
- ./website:/var/www/html
ports:
- 5000:80
networks:
- kdcnetwork
depends_on:
- testtab-service
networks:
kdcnetwork:
driver: bridge
您没有提供 docker-compose 文件,所以我无法给出非常准确的答案,但我可以简单地找到
Successfully tagged <docker_hub_id>object44_website:latest
与您尝试推送的内容不同:
docker push <docker_hub_id>/object:44
这两个名字必须相同。
编辑:
因此您必须将 docker-compose 中的部分更改为以下内容
website:
build: ./website
image: <docker_hub_id>/object:44
所以 docker-compose 将构建映像 <docker_hub_id>/object:44
并且您的 docker 推送命令应该能够推送它