AWS CDK Pipeline如何在Synth动作前添加独立自定义执行步骤
CDK Pipeline Synth前添加自定义构建测试步骤方案
可以实现,你可以将Maven构建、测试逻辑拆分为独立的前置步骤,将产物传递给后续Synth步骤即可,具体改造方式如下:
核心改造逻辑
- 拆分原Synth步骤中的
mvn相关逻辑到独立的ShellStep中,在该步骤中完成打包、单元测试、结果上报 - 将该前置步骤的输出作为Synth步骤的输入,保证
mvn package产物在Synth执行时已经可用 - CodePipeline会自动按依赖关系编排顺序,前置步骤会在Synth步骤之前执行
改造后示例代码
// 先定义源码源 const source = CodePipelineSource.gitHub('OWNER/repo', 'main', { authentication: SecretValue.secretsManager('GITHUB_TOKEN'), }); // 新增独立的构建测试步骤 const buildTestStep = new ShellStep('BuildAndTest', { input: source, commands: [ './mvnw package', // 可扩展添加单元测试、静态代码扫描等命令 './mvnw test' ], // 输出全量文件给后续Synth步骤,也可按需仅指定需要的目录 primaryOutputDirectory: '.', // 配置上报单元测试结果,可在CodePipeline控制台直接查看 reports: { junitTestReport: { files: ['target/surefire-reports/*.xml'] } }, // 如果Maven构建需要用到Docker,可开启该配置 // dockerEnabled: true }); const pipeline = new CodePipeline(this, 'Pipeline', { dockerEnabledForSynth: true, dockerEnabledForSelfMutation: true, crossAccountKeys: true, synth: new ShellStep('Synth', { // 输入改为前置构建步骤的输出,已经包含mvn打包后的产物 input: buildTestStep, commands: [ // 移除原有的mvn命令,已在前置步骤完成 'npm ci', 'npm run build', 'npx cdk synth', ] }) }); // DockerImageAsset配置无需修改,路径和之前保持一致即可 const dockerImage = new DockerImageAsset(this, 'Image', { directory: '......' });
注意事项
- 你可以调整
primaryOutputDirectory仅输出需要的目录(比如target目录、CDK代码目录),减少文件传输体积 - 测试报告除JUnit格式外,还支持Cucumber、Visual Studio Test等格式,可按你实际使用的测试工具调整配置
- 该方案不会影响原有Docker镜像构建、跨环境部署的逻辑
内容的提问来源于stack exchange,提问作者tobi
相关产品推荐
相关产品推荐

