如何为 jenkins 传递凭据以将 docker 图像推送到我自己的注册表?
How to pass credentials for jenkins to push a docker image to my own registry?
JHipster 现在使用 maven-jib-plugin。在此之前,我在 docker-容器中的詹金斯服务器 运行 能够使用 *.war- 文件构建一个 docker 图像并将其推送到我自己的 docker-registry 和使用 'Jenkinsfile' 的管道(对于 gradle,但我现在切换到 Maven),在作业完成后,另一个作业将新构建的 docker-image 拉入通过使用 ssh 在远程主机上执行 shell 脚本,在我的服务器上创建新的 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-注册表用户登录凭据,这些凭据保存在 Jenkins 的 'credentials'-部分和以前一样,在 Jenkins 中使用 docker 守护程序 运行。
我如何告诉 jenkins 管道中的 jib
-plugin 使用存储在我的 jenkins 帐户中的 docker-registry-login 的凭据,我认为 was/is 一个安全的解决方案?我不希望在每个客户端或 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"
}
}
pipeline{
agent any
stages{
stage("Docker login"){
steps{
withCredentials([string(credentialsId: 'DockerHubPwd', variable: 'dockerpwd')]) {
sh "docker login -u username -p ${dockerpwd}"
}
}
}
}
JHipster 现在使用 maven-jib-plugin。在此之前,我在 docker-容器中的詹金斯服务器 运行 能够使用 *.war- 文件构建一个 docker 图像并将其推送到我自己的 docker-registry 和使用 'Jenkinsfile' 的管道(对于 gradle,但我现在切换到 Maven),在作业完成后,另一个作业将新构建的 docker-image 拉入通过使用 ssh 在远程主机上执行 shell 脚本,在我的服务器上创建新的 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-注册表用户登录凭据,这些凭据保存在 Jenkins 的 'credentials'-部分和以前一样,在 Jenkins 中使用 docker 守护程序 运行。
我如何告诉 jenkins 管道中的 jib
-plugin 使用存储在我的 jenkins 帐户中的 docker-registry-login 的凭据,我认为 was/is 一个安全的解决方案?我不希望在每个客户端或 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"
}
}
pipeline{
agent any
stages{
stage("Docker login"){
steps{
withCredentials([string(credentialsId: 'DockerHubPwd', variable: 'dockerpwd')]) {
sh "docker login -u username -p ${dockerpwd}"
}
}
}
}