我有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。
要回答您的紧迫问题,需要在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了解更多信息