CodeBuild - Artefakte mit mehreren Eingaben in der AWS-Pipeline


12

Ich erstelle eine AWS CodePipeline, die von zwei Quellrepositorys abhängt. Wenn der ‚CodeBuild‘ Schritt mit mehreren Eingängen Artefakte angegeben wird, dann erhalten Sie den Fehler: .. declares 2 input artifacts which is more than the maximum count. Für die Dokumentation ist es strikt erforderlich, dass CodeBuild nur ein einziges Eingabeartefakt enthält.

Lambdas hingegen haben diese Einschränkung nicht. Ich habe nach einer Möglichkeit gesucht, wie ein Lambda zwei Artefakte zu einem einzigen "zusammenführen" kann, das ich dann an CodeBuild weitergeben kann. Leider sind die Informationen zu diesem Thema sehr begrenzt.

Hat jemand eine funktionierende CodePipeline Lambda, die zwei Artefakte zu einem zusammenfügt?

Bildbeschreibung hier eingeben

Hinweis : Dokumentation zum Zugriff auf Artefakte .

Antworten:


6

Wir hatten genau das gleiche Problem: In unserer Erstellungsphase müssen Informationen von zwei verschiedenen Standorten verwendet werden.

Um dies generisch zu lösen, habe ich zwei Allzweck-Lambdas erstellt - eines, das Artefakte zusammenführt, und eines, das bestimmte Dateien aus einem Artefakt extrahiert. In beiden Fällen wird ein neues Artefakt erstellt, das an eine nachfolgende CodePipeline-Stufe weitergegeben werden kann.

Siehe https://github.com/tooltwist/codepipeline-artifact-munge

Wenn es nicht genau Ihren Anforderungen entspricht, sollte es einfach genug sein, um das zu tun, was Sie brauchen.


Tolle Arbeit, Philip, danke, dass du diesen Lambda geteilt hast.
Romaninsh

4

Ich habe das Problem tatsächlich gelöst, indem ich das Repository direkt in Codebuild geklont habe:

GitHub-Token übergeben:

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

# Führe git clone im Installationsschritt aus:

      - git clone --single-branch --depth=1 -b $GITHUB_BRANCH https://gitorgname:$GITHUB_TOKEN@github.com/gitorgname/reponame.git  src/reponame

Ich fand, dass diese Lösung einfacher zu implementieren ist, sich nicht auf Lambdas verlässt und obwohl sie zwei Zugvorgänge ausführt, ziemlich zuverlässig funktioniert.


Wo genau setzen Sie das - {Name ...}?
Alex R

Ich erstelle CodeBuild durch Cloud-Bildung, aber das ist eine Umgebungsvariable, die Sie auch über die Konsole angeben können.
Romaninsh

2

Seit dem 4. September 2018 unterstützt Amazon mehrere Eingabequellen:

https://aws.amazon.com/about-aws/whats-new/2018/08/aws-codebuild-adds-ability-to-create-build-projects-with-multiple-input-sources-and-output- Artefakte /

Aus der Dokumentation :

{
"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

-1

Sie können CodeBuild überprüfen. Die BuildScpec-Datei kann in das CodeBuild-Projekt eingefügt werden.CodeBuild-Projekt


3
Ich verstehe nicht, wie das die Frage beantwortet.
Tensibai
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.