CodeBuild: più artefatti di input nella pipeline AWS


12

Sto costruendo un codice di AWS che dipende da due repository di origine. Se passo la 'CodeBuild' è specificato con più manufatti di ingresso, quindi si ottiene l'errore: .. declares 2 input artifacts which is more than the maximum count. La documentazione ha un requisito rigoroso affinché CodeBuild abbia solo un singolo artefatto di input.

Lambdas, d'altra parte, non ha questa limitazione. Ho cercato un modo in cui una Lambda potesse "unire" due artefatti in uno singolo che poi posso passare a CodeBuild. Sfortunatamente, le informazioni su questo argomento sono piuttosto limitate.

Qualcuno ha un CodePipeline Lambda funzionante che unirebbe due artefatti in uno?

inserisci qui la descrizione dell'immagine

Nota : documentazione su come accedere agli artefatti .

Risposte:


6

Abbiamo avuto esattamente lo stesso problema: la nostra fase di costruzione deve utilizzare le informazioni da due posizioni separate.

Per risolverlo in modo generico, ho creato due Lambdas generici: uno che unirà artefatti e uno che estrarrà file specifici da un artefatto. In entrambi i casi viene creato un nuovo artefatto che può essere passato a una fase CodePipeline successiva.

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

Se non soddisfa i requisiti esatti, dovrebbe essere abbastanza facile da modificare per fare ciò di cui hai bisogno.


Ottimo lavoro, Philip, grazie per aver condiviso questo Lambda.
romaninsh,

4

In realtà ho risolto il problema clonando il repository direttamente in codebuild:

Passa il token GitHub:

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

# Esegui clone git nel passaggio di installazione:

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

Ho scoperto che questa soluzione è più facile da implementare, non si basa su Lambdas e anche se esegue due pull, funziona in modo abbastanza affidabile.


Dove metti esattamente il - {Nome ...}?
Alex R,

Creo CodeBuild tramite cloudformation, ma questa è una variabile di ambiente che è possibile specificare anche tramite console.
romaninsh,

2

A partire dal 4 settembre 2018 Amazon ha aggiunto il supporto per più fonti di input:

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

Dalla documentazione :

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

Puoi rivedere CodeBuild. Il file BuildScpec può essere inserito nel progetto CodeBuild.Progetto CodeBuild


3
Non riesco a vedere come questo risponda alla domanda.
Tensibai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.