问题描述
我试图在另一个AWS账户(AccountB)中创建管道,我的代码提交存储库位于另一个AWS账户(AccountA)中。从这些链接中我做的方法完全相同:
https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create-cross-account.html https://cloudfornoobs.com/aws-codepipeline-with-cross-account-codecommit-repo/
但是,执行管道后,构建始终会失败。我的pipeline.json如下:
PS:我只想使用codecommit和codebuild而不使用CodeDeploy
querySelectorAll' on 'Document': 'button//contains(@class,'btn primary-button')'
is not a valid selector
解决方法
在其他帐户中使用CodeCommit时,由于交叉帐户,触发管道启动的默认CloudWatch事件将不起作用。 CloudWatch的Event bus功能提供了此功能,该功能可以将消息从帐户A发送到帐户B。
步骤
在帐户A中创建Cloudwatch事件规则,该规则将事件转发到帐户B的默认总线(存在管道)
Cloudwatch>规则>新建>服务名称-代码提交,事件类型为代码提交存储库状态更改
事件模式如下所示:
{
"source": [
"aws.codecommit"
],"detail-type": [
"CodeCommit Repository State Change"
],"resources": [
"arn:aws:codecommit:us-east-1:AccountAid:RepoName" #Account A's codecommit repo ARN
]
}
选择目标以指向“另一个帐户的默认事件总线”。
目标>选择目标>另一个帐户中的事件总线>输入帐户ID>(管道帐户的ID,帐户B)
选择/创建一个有权将事件发送到另一个帐户的新角色。我已经为其附加了CloudwatchEventsFull Access角色。
在帐户B(其中存在代码管道)中
允许默认事件总线从帐户A接收事件
Cloudwatch>事件总线>权限>添加权限> AWS账户>输入账户A ID
创建一个新规则,一旦收到事件,该规则将触发管道
Cloudwatch>规则>新建>服务名称-代码提交,事件类型为代码提交存储库状态更改,输入帐户A的代码管道的ARN。
事件模式与以前相同,
{
"source": [
"aws.codecommit"
],"resources": [
"arn:aws:codecommit:us-east-1:AccountAid:RepoName" #Account A's codecommit repo ARN
]
使用管道ARN创建目标。您可以使用现有角色或新角色,只需访问此角色即可触发管道。
至此,我们已经完成了Cloudwatch Events的创建。测试提交并验证管道是否已触发。