jenkins-pipeline - 如何传递 jenkins 的凭据以将 docker 镜像推送到我自己的注册表?

标签 jenkins-pipeline jhipster jib

JHipster 现在使用 maven-jib-plugin。在此之前,我在 docker-container 中运行的 jenkins 服务器能够使用 *.war-file 构建一个 docker 镜像,并使用“Jenkinsfile”(对于 gradle,但我切换了)通过管道将其推送到我自己的 docker-registry现在到 Maven),作业完成后,另一个作业通过使用 ssh 在远程主机上执行 shell 脚本,将新构建的 docker-image 拉入我服务器上的新 docker-container。

这个任务的阶段是:

    def dockerImage
    stage('build docker') {
        sh "cp -Rvvv src/main/docker build/"
        sh "cp -vvv build/libs/*.war build/docker/"
        dockerImage = docker.build("$IMAGE_NAME:$IMAGE_TAG", "build/docker")
    }

    stage('publish docker') {
        docker.withRegistry("$REGISTRY_URL", "$REGISTRY_USER") {
            dockerImage.push "$IMAGE_TAG"
        }
    }

    stage('Remove Unused docker image') {
        sh "docker rmi $IMAGE_NAME:$IMAGE_TAG"
    }

据我所知,jib 使它变得更容易,Jenkinsfile 中的相关部分由 $ jhipster ci-cd 生成归结为

    def dockerImage
    stage('publish docker') {
        sh "./mvnw -ntp jib:build -Dimage=$REGISTRY/$IMAGE_NAME:$IMAGE_TAG  -Djib.to.auth.username=$REGISTRY_USER"
    }

不幸的是 jib 似乎不再使用给定 $REGISTRY_USER 的 docker-registry 用户登录凭据,这些凭据像以前一样保存在 Jenkins 的“凭据”部分中在 Jenkins 中运行的 docker 守护进程。

我如何告诉 jenkins 管道中的 jib-plugin 使用存储在我的 jenkins 帐户中的 docker-registry-login 凭证,我认为这是一个安全的解决方案?我不希望在每个客户端或 github 上处理凭据(尤其是密码)。

最佳答案

通过环境变量提供凭据的一种方法是按以下方式使用 withCredentials(),如 this comment 中所提示的那样.

    def dockerImage
    stage('publish docker') {
        withCredentials([usernamePassword(credentialsId: 'myregistry-login', passwordVariable: 'DOCKER_REGISTRY_PWD', usernameVariable: 'DOCKER_REGISTRY_USER')]) {
            // assumes Jib is configured to use the environment variables
            sh "./mvnw -ntp jib:build"
        }
    }

关于jenkins-pipeline - 如何传递 jenkins 的凭据以将 docker 镜像推送到我自己的注册表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59254492/

相关文章:

jenkins - 如何防止 Multibranch Pipeline 作业在 master 上克隆 repo

jhipster - 覆盖 JH4.x 中的 SwaggerConfiguration

oauth-2.0 - Jhipster OAuth 2.0/OIDC 身份验证授权 header 与不记名 token

maven - Jenkins MultiBranchPipeline 因 ModelInterpreter.groovy : 43: unable to resolve class javax. 注释而失败。Nonnull

Jenkins 根据另一个参数值生成新参数

jenkins - 如何从 Jenkins 管道中的另一个文件调用函数?

jwt - 如何在多个子域之间共享 JWT token ?

docker - 使用Jib和Gitlab-CI构建docker镜像

spring-boot - 如何安装curl来进行spring boot jib docker镜像的健康检查?