从 Jenkins 管道推送到 ECR

AWS*_*nar 4 amazon-web-services jenkins docker aws-ecr

我有预置的 Jenkins 服务器。我有创建 Docker 镜像的 Jenkins 文件,现在我想将该镜像推送到 AWS ECR。我是否必须创建一个特殊的 IAM 用户并提供其访问和秘密访问密钥?或者什么是最好的方法来做到这一点。

我在互联网上找到了下面

  withAWS(role:'Jenkins', roleAccount:'XXXX216610',duration: 900, roleSessionName: 'jenkinssession')
  sh ' eval \$(aws ecr get-login --no-include-email --region us-east-2) '
Run Code Online (Sandbox Code Playgroud)

但是由于我的 jenkins 服务器是本地部署,角色将如何工作?

Jon*_*ess 9

您现在可以使用https://plugins.jenkins.io/amazon-ecr/中的 Jenkins \xe2\x80\x98amazon-ecr\xe2\x80\x99 插件,而不是 eval进行 ECR 部署。

\n
pipeline {\n  environment {\n    registry = \'1111111111111.dkr.ecr.eu-central-1.amazonaws.com/myRepo\'\n    registryCredential = \'ID_OF_MY_AWS_JENKINS_CREDENTIAL\'\n    dockerImage = \'\'\n  }\n  agent any\n  stages {\n    stage(\'Building image\') {\n      steps{\n        script {\n          dockerImage = docker.build registry + ":$BUILD_NUMBER"\n        }\n      }\n    }\n    stage(\'Deploy image\') {\n        steps{\n            script{\n                docker.withRegistry("https://" + registry, "ecr:eu-central-1:" + registryCredential) {\n                    dockerImage.push()\n                }\n            }\n        }\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n


Adi*_*iii 7

我是否必须创建一个特殊的 IAM 用户并提供其访问和秘密访问密钥?或者什么是最好的方法来做到这一点。

如果您在 AWS 中运行 Jenkins 并且您使用密钥和访问密钥,则您违反了最佳实践。您永远不应在 AWS VPC 内使用访问密钥和秘密密钥。这些旨在从 AWS 账户外部与 AWS 交互。

您应该创建一个具有特定角色的IAM 角色,并且该角色仅允许 Jenkins 将映像推送到 ECR。

就您当前的命令而言,eval \$(aws ecr get-login --no-include-email --region us-east-2)您将始终需要此令牌来将图像推/拉到 ECR,此令牌有一些到期时间,您应该在下面阅读有关此方法的信息。但 IAM 角色似乎没问题。

ECR_AWSCLI-get-login-token

您也可以探索Amazon+ECR-plugin

关于

Amazon ECR 插件实现了一个 Docker 令牌生成器,将 Amazon 凭证转换为(主要)所有 Docker 相关插件使用的 Jenkins API。感谢这位制作人,您可以为 Jenkins 中的各种 Docker 操作选择您现有的已注册 Amazon 凭证,例如使用 CloudBees Docker 构建和发布插件: