CodeBuild - vários artefatos de entrada no AWS Pipeline

12

Estou criando um CodePipeline da AWS que depende de dois repositórios de origem. Se a etapa do 'CodeBuild' é especificado com vários artefatos de entrada, então você obtém o erro: .. declares 2 input artifacts which is more than the maximum count. A documentação tem um requisito estrito para que o CodeBuild tenha apenas um único artefato de entrada.

Lambdas, por outro lado, não tem essa limitação. Eu estive procurando uma maneira de como um Lambda poderia "mesclar" dois artefatos em um único que eu possa passar para o CodeBuild. Infelizmente, as informações sobre este assunto são bastante limitadas.

Alguém tem um CodePipeline Lambda em funcionamento que mesclaria dois artefatos em um?

insira a descrição da imagem aqui

Nota : Documentação sobre como acessar artefatos .

romaninsh
fonte

Respostas:

6

Tivemos exatamente o mesmo problema - nosso estágio de criação precisa usar informações de dois locais separados.

Para resolver isso de maneira genérica, criei dois Lambdas de uso geral - um que mesclará artefatos e outro que extrairá arquivos específicos de um artefato. Nos dois casos, é criado um novo artefato que pode ser transmitido para um estágio subsequente do CodePipeline.

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

Se ele não atender aos seus requisitos exatos, deve ser fácil o suficiente para ajustar o que você precisa.

Philip Callender
fonte
Trabalho incrível, Philip, obrigado por compartilhar este Lambda.
precisa saber é
4

Na verdade, eu resolvi o problema clonando o repositório diretamente no codebuild:

Passe o token do GitHub:

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

# Execute o git clone na etapa de instalação:

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

Eu descobri que esta solução é mais fácil de implementar, não depende do Lambdas e, apesar de executar duas tentativas, funciona de maneira bastante confiável.

romaninsh
fonte
Onde exatamente você coloca o - {Name ...}?
Alex R
Eu crio o CodeBuild através da formação de nuvens, mas essa é uma variável de ambiente que você pode especificar também através do console.
romaninsh
2

A partir de 4 de setembro de 2018, a Amazon adicionou suporte para várias fontes 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- artefatos /

Da documentação :

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

Você pode revisar o CodeBuild. O arquivo BuildScpec pode ser colocado no projeto CodeBuild.Projeto CodeBuild

darangom
fonte
3
Não vejo como isso responde à pergunta.
Tensibai