Я реализовал, что через несколько дней go с использованием CDK идея состоит в том, чтобы создать роль IAM в целевой среде и взять на себя эту роль при выполнении сборки кода (которая выполняется как часть конвейера кода).
В моем случае, так как сборка кода создает стеки CDK, я назначил этой роли политику AdministratorAccess.
Позже создайте новую сборку кода и прикрепите разрешения для роли проекта сборки кода.
// 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. Другой этап требуется только в том случае, если вы хотите получить исходники из github - Подробнее here .
Это полное решение, если вы хотите реализовать что-то еще, Подробнее о действиях конвейера кода здесь .