所以我试图建立在詹金斯生成图像的管道,他们推到泊坞枢纽。 我在管理'Jenkins的凭证被称为同为“搬运工 - 轮毂凭证”,而且似乎被使用。
它可以建立,但它只是不通过推...帮助得到什么?我已经花了几个小时了,我不确定自己缺少什么。
我已经使用泊坞窗登录尝试,但詹金斯不允许它。
stage('Build image') {
/* This builds the actual image; synonymous to
* docker build on the command line */
bat 'docker build -t username/foldername:build . ' }
stage('Push image') {
/* Finally, we'll push the image with two tags:
docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
bat 'docker push username/foldername:build'
}
}
我希望图像被推送,但是我有这个:
The push refers to repository [docker.io/username/foldername]
a73d7d9f4346: Preparing
964bdfb24a54: Preparing
1af124d739c9: Preparing
6cffeea81e5d: Preparing
614a79865f6d: Preparing
612d27bb923f: Preparing
ef68f6734aa4: Preparing
612d27bb923f: Waiting
ef68f6734aa4: Waiting
denied: requested access to the resource is denied
答案 0 :(得分:2)
在Image push
阶段,您可以先进行docker login
,然后再推动图像。尝试以下操作进行docker登录:
stage('Push image') {
withCredentials([usernamePassword( credentialsId: 'docker-hub-credentials', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) {
def registry_url = "registry.hub.docker.com/"
bat "docker login -u $USER -p $PASSWORD ${registry_url}"
docker.withRegistry("http://${registry_url}", "docker-hub-credentials") {
// Push your image now
bat "docker push username/foldername:build"
}
}
}
确保注册表URL正确。
上面的withCredentials([usernamePassword(...)])
方法将设置两个环境变量USER
和PASSWORD
,它们是来自凭据ID docker-hub-credentials
的Docker注册表凭据。
答案 1 :(得分:1)
我找到了答案!!!
stage('Push image') {
withDockerRegistry([ credentialsId: "docker-hub-credentials", url: "" ]) {
bat "docker push devopsglobalmedia/teamcitydocker:build"
}
答案 2 :(得分:0)
一个更好的选择是使用Docker pipeline plugin(推荐的插件中提供)。
node {
checkout scm
def dockerImage
stage('Build image') {
dockerImage = docker.build("username/repository:tag")
}
stage('Push image') {
dockerImage.push()
}
}
以这种方式进行操作,您必须在管道模型定义中指定Docker注册表的凭据。
Docker管道插件在将“管道模型定义”中分配的凭据应用于具有多分支管道的项目时遇到问题。也就是说,如果使用上面的代码,您将继续收到错误:
拒绝:请求的对资源的访问被拒绝
然后,您必须在Jenkins文件中指定凭据,如下所示:
node {
checkout scm
def dockerImage
stage('Build image') {
dockerImage = docker.build("username/repository:tag")
}
stage('Push image') {
docker.withRegistry('https://registry-1.docker.io/v2/', 'docker-hub-credentials') {
dockerImage.push()
}
}
}
如果需要,可以修改自定义注册表的URL
答案 3 :(得分:0)
我最近也遇到了同样的问题,这是Docker注册表URL错误
问题-https://index.docker.io/v1
修复-https://index.docker.io/v1/
是的,这是一个问题。我无法将其推送到docker Registry。
答案 4 :(得分:0)
我花了大约半天时间来解决它。请确保安装了Docker Pipeline Plugin
。
script {
withDockerRegistry([ credentialsId: "Docker-Hub-Cred", url: "https://index.docker.io/v1/" ]){
}
}
答案 5 :(得分:0)
如果要推送私有存储库,则必须遵循以下命令:
第一:您必须确保jenkins上的dockerhub凭证。 第二:您已经在管道项目中创建了工作 第三:然后您必须使用jenkinsfile推送项目。 第四:现在可以构建詹金斯了。
我正在提供完整的Jenkinsfile,它将有助于解决此权限拒绝问题,并且您可以成功创建docker映像并将其推送到dockerhub。
pipeline {
agent any
stages{
stage('Maven Install'){
agent any
steps{
bat 'mvn -f pom.xml clean install'
}
}
stage('Docker Build'){
agent any
steps{
bat 'docker build -t dockerhub_username/repository_name/docker-jenkins-integration .'
}
}
stage('Push image'){
agent any
steps{
withDockerRegistry([ credentialsId: "id", url: "" ]) {
bat "docker tag dockerhub_username/repository_name/docker-jenkins-integration dockerhub_username/repository_name:docker-jenkins-integration"
bat "docker push dockerhub_username/repository_name:docker-jenkins-integration"
}
}
}
}
}
答案 6 :(得分:0)
截至今天,Docker 管道插件提供了登录 docker hub、构建镜像并最终推送的 groovy 方法。 以下是声明式管道的示例代码
pipeline {
agent any
stages {
stage('Push container') {
steps {
echo "Workspace is $WORKSPACE"
dir("$WORKSPACE/dir-to-Dockerfile") {
script {
def REGISTRY_URL = "https://index.docker.io/v1/"
def USER_NAME = "your-registry-username"
docker.withRegistry("$REGISTRY_URL", 'DockerHub-Cred-ID-Defined-In-Jenkins') {
def image = docker.build("$USER_NAME/some-image-name:${env.BUILD_ID}")
image.push()
}
}
}
}
}
}
}