推送到与Jenkins CI / CD不同的AWS账户中的ECR

问题描述 投票:0回答:1

我有Jenkins从节点作为EC2实例,我在其中运行CI / CD并将映像推送到AWS ECR。

 stage('Push Image to ECR'){
        steps{
              withAWS(region: 'us-east-1', roleAccount: shared_services_account, role: 
                             'Role-Name') {

             sh 'eval \$(aws ecr get-login --no-include-email --region us-east-1)'
             sh 'docker tag test-image 5722XXXXXX.dkr.ecr.us-east- 
                 1.amazonaws.com/Dev/DC/DCservice:latest'
             sh 'sudo docker push 572205XXXX.dkr.ecr.us-east- 
                  1.amazonaws.com/Dev/DC/DCservice:latest'
           }

现在我的EC2 Jenkins从节点和ECR在同一帐户中。

但是对于生产,如果要使用相同的Jenkins EC2从节点并将其推送到生产AWS账户的ECR。

我相信以下代码将无法正常运行,因为它将推送至同一AWS账户的ECR?

   sh 'eval \$(aws ecr get-login --no-include-email --region us-east-1'

[请提出如何使用相同的EC2从属节点推送到生产AWS账户的ECR。

amazon-web-services docker jenkins jenkins-plugins aws-ecr
1个回答
0
投票

要回答您的紧迫问题,需要在registry_id命令(get-login)中指定relevant docs

sh 'eval \$(aws ecr get-login --registry-ids 012345678910 --no-include-email --region us-east-1'

但是,还有其他一些事情值得检查。

假设您可以通过互联网推送到您的ECR,则需要以下条件:

[通过角色策略附加到您的Jenkins EC2实例的IAM实例配置文件,该策略允许您将ECR推送到”其他”帐户中,see this用于策略结构的示例

您的Jenkins EC2实例需要一个允许HTTPS出站访问Internet的安全组规则

您在“其他”帐户中的ECR策略需要允许从Jenkins实例配置文件进行写入,see this作为ECR策略的示例

(类似的东西应该可以工作)

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:instance-profile/jenkins_ec2"
        ]
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}

如果您不想通过互联网进行推送,则可以使用最近发布的ECR端点,see this了解更多信息

© www.soinside.com 2019 - 2024. All rights reserved.