CodeBuild: múltiples artefactos de entrada en AWS Pipeline

12

Estoy construyendo una AWS CodePipeline que depende de dos repositorios de origen. Si no se especifica el paso de 'CodeBuild' con múltiples artefactos de entrada, entonces se obtiene el error: .. declares 2 input artifacts which is more than the maximum count. La documentación tiene un requisito estricto para que CodeBuild tenga un solo artefacto de entrada.

Lambdas, por otro lado, no tiene esta limitación. He estado buscando la forma en que un Lambda podría "fusionar" dos artefactos en uno solo que luego puedo pasar al CodeBuild. Desafortunadamente, la información sobre este tema es bastante limitada.

¿Alguien tiene un CodePipeline Lambda que combine dos artefactos en uno?

ingrese la descripción de la imagen aquí

Nota : Documentación sobre cómo acceder a los artefactos .

romaninsh
fuente

Respuestas:

6

Hemos tenido exactamente el mismo problema: nuestra etapa de construcción necesita usar información de dos ubicaciones separadas.

Para resolver esto de manera genérica, he creado dos Lambdas de propósito general: una que fusionará artefactos y otra que extraerá archivos específicos de un artefacto. En ambos casos, se crea un nuevo artefacto que se puede pasar a una etapa posterior de CodePipeline.

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

Si no cumple con sus requisitos exactos, debería ser lo suficientemente fácil de modificar para hacer lo que necesita.

Philip Callender
fuente
Impresionante trabajo, Philip, gracias por compartir este Lambda.
romaninsh
4

De hecho, he resuelto el problema clonando el repositorio directamente en codebuild:

Pase el token GitHub:

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

# Ejecute git clone en el paso de instalación:

      - git clone --single-branch --depth=1 -b $GITHUB_BRANCH https://gitorgname:[email protected]/gitorgname/reponame.git  src/reponame

Descubrí que esta solución es más fácil de implementar, no depende de Lambdas y, aunque realiza dos tirones, funciona de manera bastante confiable.

romaninsh
fuente
¿Dónde exactamente pones el - {Nombre ...}?
Alex R
Creo CodeBuild a través de la formación en la nube, pero esa es una variable de entorno que también puede especificar a través de la consola.
romaninsh
2

A partir del 4 de septiembre de 2018, Amazon agregó soporte para múltiples fuentes de entrada:

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

De la documentación :

{
"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
romaninsh
fuente
-1

Puedes revisar CodeBuild. El archivo BuildScpec se puede colocar en el proyecto CodeBuild.Proyecto CodeBuild

darangom
fuente
3
No veo cómo responde esto a la pregunta.
Tensibai