在AWS中,我想定义一个CodeBuild项目,它将在每次CodeCommit中打开或更新拉请求时运行。我这样做是为了能够在合并到主分支之前对我的测试和构建进行验证。
如何为与拉请求关联的分支运行此CodeBuild项目?
下面是我的代码:
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),
});我尝试以这种方式将其提供给项目源:
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
发布于 2022-01-13 20:54:50
我能够通过从事件中提取分支并将其传递给目标来解决这个问题。
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 API。event键在CodeBuildProjectProps中指定将发送给StartBuild API的有效负载。默认情况下,会发送整个事件,但这不是CodeBuild所期望的格式。StartBuild API有效负载允许使用sourceVersion指定分支、提交或标记。我们可以使用EventField从事件中提取数据。来自CodeCommit的事件有嵌套在detail.sourceReference下面的引用。这将类似于'refs/heads/my-branch'。使用Eventfield.fromPath(),我们可以使用$.语法访问触发此规则的事件,然后为JSON路径提供一个点符号字符串来访问我们需要的数据。
https://stackoverflow.com/questions/70683758
复制相似问题