跨账户CodePipeline Cloudwatch>规则>新建>服务名称-代码提交,事件类型为代码提交存储库状态更改允许默认事件总线从帐户A接收事件创建一个新规则,一旦收到事件,该规则将触发管道使用管道ARN创建目标您可以使用现有角色或新角色,只需访问此角色即可触发管道

问题描述

我试图在另一个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的创建。测试提交并验证管道是否已触发。