我正在构建一个AWS CodePipeline,它依赖于两个源存储库。如果在“ CodeBuild”步骤中指定了多个Input工件,则会出现错误:.. declares 2 input artifacts which is more than the maximum count。文档严格要求CodeBuild仅具有单个输入工件。另一方面,Lambda不受此限制。我一直在寻找Lambda如何将两个工件“合并”为一个工件的方法,然后我可以将其传递给CodeBuild。不幸的是,有关此主题的信息非常有限。

有没有人能正常工作的CodePipeline Lambda可以将两个工件合并为一个? br />

#1 楼

我们遇到了完全相同的问题-我们的构建阶段需要使用来自两个单独位置的信息。

为了以一种通用的方式解决此问题,我创建了两个通用Lambda,一个将合并工件,并且将从工件中提取特定文件的工件。在这两种情况下,都会创建一个新的工件,该工件可以传递到后续的CodePipeline阶段。 >如果它不满足您的确切要求,则应该很容易进行调整以执行所需的操作。

评论


菲利普(Philip)非常棒,感谢您分享此Lambda。

– romaninsh
18年1月26日在13:55

#2 楼

我实际上已经通过直接在代码构建中克隆存储库解决了该问题:

传递GitHub令牌:在安装步骤中:

      - { Name: GITHUB_TOKEN, Value: {Ref: GitHubToken } }
      - { Name: GITHUB_BRANCH, Value: {Ref: GitHubBranch } }


我发现该解决方案更易于实现,不依赖Lambda,即使执行两次拉动,也相当可靠。 >

评论


您将-{Name ...}放在哪里?

– Alex R
18年6月3日在4:20

我通过cloudformation创建CodeBuild,但这是一个环境变量,您也可以通过控制台指定它。

– romaninsh
18年6月22日在14:12

#3 楼

从2018年9月4日起,亚马逊增加了对多种输入源的支持:

https://aws.amazon.com/about-aws/whats-new/2018/08/aws-codebuild-adds-ability使用多个输入源和输出工件创建构建项目/

来自文档:

{
"name": "sample-project",
"source": {
  "type": "S3",
  "location": "bucket/sample.zip"
},
"secondarySources": [
  {
    "type": "CODECOMMIT",
    "location": "https://git-codecommit.us-west-2.amazonaws.com/v1/repos/repo"
    "sourceIdentifier": "source1"
  },
  {
    "type": "GITHUB",
    "location": "https://github.com/awslabs/aws-codebuild-jenkins-plugin"
    "sourceIdentifier": "source2"
  }
],



version: 0.2

phases:
  build:
    commands:
      - cd $CODEBUILD_SRC_DIR_source1
      - touch file1
      - cd $CODEBUILD_SRC_DIR_source2
      - touch file2

artifacts:
  secondary-artifacts:
    artifact1:
      base-directory: $CODEBUILD_SRC_DIR_source1
      files:
        - file1
    artifact2:
      base-directory: $CODEBUILD_SRC_DIR_source2
      files:
        - file2


#4 楼

您可以查看CodeBuild。 BuildScpec文件可以放在CodeBuild项目中。

评论


我看不到如何回答这个问题。

–滕西拜
18年6月15日在8:16