CodeBuild - plusieurs artefacts d'entrée dans AWS Pipeline


12

Je construis un AWS CodePipeline qui dépend de deux référentiels sources. Si l'étape « CodeBuild » est spécifié avec plusieurs artefacts d'entrée, vous obtenez l'erreur: .. declares 2 input artifacts which is more than the maximum count. La documentation a une exigence stricte pour que CodeBuild n'ait qu'un seul artefact d'entrée.

Les Lambdas, d'autre part, n'ont pas cette limitation. J'ai cherché un moyen pour un Lambda de «fusionner» deux artefacts en un seul que je pourrais ensuite transmettre au CodeBuild. Malheureusement, les informations à ce sujet sont assez limitées.

Quelqu'un a-t-il une Lambda CodePipeline qui fusionnerait deux artefacts en un seul?

entrez la description de l'image ici

Remarque : Documentation sur la façon d'accéder aux artefacts .

Réponses:


6

Nous avons eu exactement le même problème - notre étape de construction doit utiliser des informations provenant de deux emplacements distincts.

Pour résoudre ce problème de manière générique, j'ai créé deux Lambdas à usage général - l'un qui fusionnera les artefacts et l'autre qui extraira des fichiers spécifiques d'un artefact. Dans les deux cas, un nouvel artefact est créé qui peut être transmis à une étape CodePipeline suivante.

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

S'il ne répond pas exactement à vos besoins, il devrait être assez facile de le modifier pour faire ce dont vous avez besoin.


Super travail, Philip, merci d'avoir partagé cette Lambda.
romaninsh

4

J'ai en fait résolu le problème en clonant le référentiel directement dans le codebuild:

Passer le jeton GitHub:

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

# Exécuter git clone dans l'étape d'installation:

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

J'ai trouvé que cette solution est plus facile à mettre en œuvre, ne repose pas sur Lambdas et même si elle effectue deux tirages, fonctionne de manière assez fiable.


Où mettez-vous exactement le - {Nom ...}?
Alex R

Je crée CodeBuild via cloudformation, mais c'est une variable d'environnement que vous pouvez également spécifier via la console.
romaninsh

2

À partir du 4 septembre 2018, Amazon a pris en charge plusieurs sources d'entrée:

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

De la documentation :

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

Vous pouvez consulter CodeBuild. Le fichier BuildScpec peut être placé dans le projet CodeBuild.Projet CodeBuild


3
Je ne vois pas comment cela répond à la question.
Tensibai
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.