首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将分支名称从事件传递到CodeBuild项目

将分支名称从事件传递到CodeBuild项目
EN

Stack Overflow用户
提问于 2022-01-12 14:58:00
回答 1查看 612关注 0票数 1

在AWS中,我想定义一个CodeBuild项目,它将在每次CodeCommit中打开或更新拉请求时运行。我这样做是为了能够在合并到主分支之前对我的测试和构建进行验证。

如何为与拉请求关联的分支运行此CodeBuild项目?

下面是我的代码:

代码语言:javascript
复制
import { Repository } from 'aws-cdk-lib/aws-codecommit';
import { BuildSpec, Project, Source } from 'aws-cdk-lib/aws-codebuild';
import { CodeBuildProject } from 'aws-cdk-lib/aws-events-targets';

const repo = Repository.fromRepositoryName(this, 'MyRepo', 'my-repo');

const project = new Project(this, 'MyCodeBuildProject', {
  source: Source.codeCommit({ repository: repo }),
  buildSpec: BuildSpec.fromObject({
    version: '0.2',
    phases: {
      build: {
        commands: [ 'npm run build' ],
      },
    },
  }),
});

const myRule = repo.onPullRequestStateChange('MyRule', {
  target: new targets.CodeBuildProject(project),
});

我尝试以这种方式将其提供给项目源:

代码语言:javascript
复制
import { ReferenceEvent } from 'aws-cdk-lib/aws-codecommit';
...
  source: Source.codeCommit({ repository: repo, branchOrRef: ReferenceEvent.name }),

但是我收到了这个错误:reference not found for primary source and source version $.detail.referenceName

CodeCommit ->打开拉出请求-> CloudWatch event (EventBridge) -> CodeBuild

AWS CDK v2.5.0

TypeScript

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-13 20:54:50

我能够通过从事件中提取分支并将其传递给目标来解决这个问题。

代码语言:javascript
复制
import { EventField, RuleTargetInput } from 'aws-cdk-lib/aws-events';

const myRule = repo.onPullRequestStateChange('MyRule', {
  target: new targets.CodeBuildProject(project, {
    event: RuleTargetInput.fromObject({
      sourceVersion: EventField.fromPath('$.detail.sourceReference'),
    }),
  }),
});

这是因为targets.CodeBuildProject()将调用CodeBuild StartBuild APIevent键在CodeBuildProjectProps中指定将发送给StartBuild API的有效负载。默认情况下,会发送整个事件,但这不是CodeBuild所期望的格式。StartBuild API有效负载允许使用sourceVersion指定分支、提交或标记。我们可以使用EventField从事件中提取数据。来自CodeCommit的事件有嵌套在detail.sourceReference下面的引用。这将类似于'refs/heads/my-branch'。使用Eventfield.fromPath(),我们可以使用$.语法访问触发此规则的事件,然后为JSON路径提供一个点符号字符串来访问我们需要的数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70683758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档