首页 > 解决方案 > 以 GitHub 为源的 CDK Codepipeline

问题描述

因此,我正在使用 CDK codebuild.PipelineProject 创建一个新的 Codebuild 项目,但我遇到了问题,因为 APi 参考似乎没有办法将 GitHub 作为源代码库应用:

https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_codebuild/PipelineProject.html

任何人都可以让它工作或找到一种方法将 Github 设置为主要来源?

标签: pythonpython-3.xgithubaws-cdkaws-codebuild

解决方案


这个问题的答案取决于你理想的最终状态是什么样的。这里有两个选项:

  1. CodePipeline 触发 CodeBuild
  2. CodeBuild 在 CodePipeline 之外由 GitHub 触发

这部分文档讨论了这两个选项之间的区别。

CodePipeline 触发 CodeBuild

codepipeline_actions如果您想从同一源提交(如部署)执行其他操作,则使用 CodePipeline 触发 CodeBuild 非常有用。

为此,您需要在 CodePipeline 中创建一个单独的 Source 操作,并将其导出的变量用作 CodeBuild 项目 ( docs ) 的输入。

例如,

from aws_cdk import core as cdk
from aws_cdk import aws_codepipeline as codepipeline
from aws_cdk import aws_codepipeline_actions as codepipeline_actions
from aws_cdk import aws_codebuild as codebuild


class CdkPythonStack(cdk.Stack):
    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        source_output = codepipeline.Artifact()
        source_action = codepipeline_actions.GitHubSourceAction(
            action_name="Source",
            owner="blimmer",
            repo="my_repo",
            # You'll need to create this secret per the docs
            # https://docs.aws.amazon.com/cdk/api/latest/docs/aws-codepipeline-actions-readme.html#github
            oauth_token=cdk.SecretValue.secrets_manager('my-github-token'),
            output=source_output,
        )
        pipeline = codepipeline.Pipeline(
            self,
            "MyPipeline",
            stages=[
                codepipeline.StageProps(stage_name="Source", actions=[source_action]),
                codepipeline.StageProps(
                    stage_name="Build",
                    actions=[
                        codepipeline_actions.CodeBuildAction(
                            action_name="Build",
                            # Configure your project here
                            project=codebuild.PipelineProject(self, "MyProject"),
                            input=source_output,
                        )
                    ],
                ),
            ],
        )

CodeBuild 在 CodePipeline 之外由 GitHub 触发

如果您不需要任何其他 CodePipeline 操作,则只创建一个没有 CodePipeline 的 CodeBuild 项目可能会更简单。

您需要将 Source 设置为 CodeBuild 项目 ( docs ) 的属性,然后定义项目。

例如:

from aws_cdk import core as cdk
from aws_cdk import aws_codebuild as codebuild


class CdkPythonStack(cdk.Stack):
    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        project = codebuild.Project(
            self,
            "MyProject",
            # You'll need to configure this first. See:
            # https://docs.aws.amazon.com/cdk/api/latest/docs/aws-codebuild-readme.html#githubsource-and-githubenterprisesource
            source=codebuild.Source.git_hub(
                owner="blimmer", repo="my_repo", webhook=True
            ),
            # Configure your project here
        )

推荐阅读