从Jenkins CI / CD推送到存在于其他AWS账户中的ECR

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

private void dataGridViewReader_CurrentCellDirtyStateChanged(object sender,EventArgs e)
{
    if (dataGridViewReader.IsCurrentCellDirty)
        dataGridViewReader.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

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

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

我相信以下代码将无法正常运行,因为它将推送至同一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从节点将Prod AWS账户的ECR推送。

fwangeling 回答:从Jenkins CI / CD推送到存在于其他AWS账户中的ECR

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

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出站访问互联网

您在“其他”帐户中的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获取更多信息

本文链接:https://www.f2er.com/2949086.html

大家都在问