Шаблон облачной информации для CodePipeline - PullRequest
0 голосов
/ 04 февраля 2020

У нас есть настройка aws, где у нас есть тестовая учетная запись и производственная учетная запись. Наша кодовая фиксация (java lambda's) находится в нашей тестовой учетной записи, и мы хотим использовать CodePipeline для развертывания кода отсюда в нашей тестовой учетной записи и производственных учетных записях.

Мне было интересно, знает ли кто-нибудь о каких-либо готовых сделанных Шаблоны облачной информации (или cdk), которые могут выполнять эту работу?

Спасибо, Дэмиен

1 Ответ

1 голос
/ 04 февраля 2020

Я реализовал, что через несколько дней 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 .

Это полное решение, если вы хотите реализовать что-то еще, Подробнее о действиях конвейера кода здесь .

...