CodePipeline 的 Cloudformation 模板
Cloudformation template for CodePipeline
我们有一个 aws 设置,其中有一个测试帐户和一个生产帐户。
我们的代码提交(java lambda's)在我们的测试账户中,我们想使用 CodePipeline 将代码从这里部署到我们的测试账户和生产账户。
我想知道是否有人知道可以执行此工作的任何现成的 cloudformation(或 cdk)模板?
谢谢
达米恩
我几天前使用 CDK 实现了这一点,想法是在目标环境上创建一个 IAM 角色,并在 运行 代码构建(作为代码管道的一部分运行)时承担这个角色.
就我而言,由于代码构建创建了 CDK 堆栈,因此我为该角色提供了 AdministratorAccess 策略。
稍后,创建新的 codebuild 并将权限附加到 codebuild 项目角色。
// create the codebuild project used by the codepipeline
const codeBuildProject = new codebuild.PipelineProject(scope, `${props.environment}-${props.pipelineNamePrefix}-codebuild`, {
projectName: `${props.environment}-${props.pipelineNamePrefix}`,
buildSpec: codebuild.BuildSpec.fromSourceFilename('buildspec.yml'),
environment: {
buildImage: codebuild.LinuxBuildImage.AMAZON_LINUX_2,
privileged: true,
environmentVariables: buildEnvVariables,
computeType: props.computeType
},
})
// attach permissions to codebuild project role
codeBuildProject.addToRolePolicy(new PolicyStatement({
effect: Effect.ALLOW,
resources: [props.deploymentRoleArn],
actions: ['sts:AssumeRole']
}));
请注意,props.deploymentRoleArn
是您在目标环境中创建的角色的 ARN。
然后,创建一个新管道并将 codeBuildProject
添加到 codepipelineActions.CodeBuildAction
为 project
:
// create codepipeline to deploy cdk changes
const codePipeline = new codepipeline.Pipeline(scope, `${props.environment}-${props.pipelineNamePrefix}-codepipeline`, {
restartExecutionOnUpdate: false,
pipelineName: `${props.environment}-${props.pipelineNamePrefix}`,
stages: [
{
stageName: 'Source',
actions: [
new codepipelineActions.GitHubSourceAction({
branch: props.targetBranch,
oauthToken: gitHubToken,
owner: props.githubRepositoryOwner,
repo: props.githubRepositoryName,
actionName: 'get-sources',
output: pipelineSourceArtifact,
})]
},
{
stageName: 'Deploy',
actions: [
new codepipelineActions.CodeBuildAction({
actionName: 'deploy-cdk',
input: pipelineSourceArtifact,
type: codepipelineActions.CodeBuildActionType.BUILD,
project: codeBuildProject
}),
]
}
]
});
上面代码片段的相关部分是 Deploy
stage.The 其他阶段只有在您想从 github 获取源代码时才需要 - 更多信息 here。
这是完整的解决方案,如果您想实施其他内容,请阅读有关代码管道操作的更多信息here。
我们有一个 aws 设置,其中有一个测试帐户和一个生产帐户。 我们的代码提交(java lambda's)在我们的测试账户中,我们想使用 CodePipeline 将代码从这里部署到我们的测试账户和生产账户。
我想知道是否有人知道可以执行此工作的任何现成的 cloudformation(或 cdk)模板?
谢谢 达米恩
我几天前使用 CDK 实现了这一点,想法是在目标环境上创建一个 IAM 角色,并在 运行 代码构建(作为代码管道的一部分运行)时承担这个角色.
就我而言,由于代码构建创建了 CDK 堆栈,因此我为该角色提供了 AdministratorAccess 策略。
稍后,创建新的 codebuild 并将权限附加到 codebuild 项目角色。
// create the codebuild project used by the codepipeline
const codeBuildProject = new codebuild.PipelineProject(scope, `${props.environment}-${props.pipelineNamePrefix}-codebuild`, {
projectName: `${props.environment}-${props.pipelineNamePrefix}`,
buildSpec: codebuild.BuildSpec.fromSourceFilename('buildspec.yml'),
environment: {
buildImage: codebuild.LinuxBuildImage.AMAZON_LINUX_2,
privileged: true,
environmentVariables: buildEnvVariables,
computeType: props.computeType
},
})
// attach permissions to codebuild project role
codeBuildProject.addToRolePolicy(new PolicyStatement({
effect: Effect.ALLOW,
resources: [props.deploymentRoleArn],
actions: ['sts:AssumeRole']
}));
请注意,props.deploymentRoleArn
是您在目标环境中创建的角色的 ARN。
然后,创建一个新管道并将 codeBuildProject
添加到 codepipelineActions.CodeBuildAction
为 project
:
// create codepipeline to deploy cdk changes
const codePipeline = new codepipeline.Pipeline(scope, `${props.environment}-${props.pipelineNamePrefix}-codepipeline`, {
restartExecutionOnUpdate: false,
pipelineName: `${props.environment}-${props.pipelineNamePrefix}`,
stages: [
{
stageName: 'Source',
actions: [
new codepipelineActions.GitHubSourceAction({
branch: props.targetBranch,
oauthToken: gitHubToken,
owner: props.githubRepositoryOwner,
repo: props.githubRepositoryName,
actionName: 'get-sources',
output: pipelineSourceArtifact,
})]
},
{
stageName: 'Deploy',
actions: [
new codepipelineActions.CodeBuildAction({
actionName: 'deploy-cdk',
input: pipelineSourceArtifact,
type: codepipelineActions.CodeBuildActionType.BUILD,
project: codeBuildProject
}),
]
}
]
});
上面代码片段的相关部分是 Deploy
stage.The 其他阶段只有在您想从 github 获取源代码时才需要 - 更多信息 here。
这是完整的解决方案,如果您想实施其他内容,请阅读有关代码管道操作的更多信息here。