33

git、codebuild、および Elastic Beanstalk を使用して CI/CD パイプラインを構築しています。

コードビルドの実行中に、テスト ケースの構文エラーが原因でビルドが失敗した場合、コードビルドが次の段階に進み、最終的にアーティファクトの生成に進むことがわかります。

私の理解では、ビルドが失敗した場合、実行は停止するはずです。これは正しい動作ですか?

以下のビルドスペックを参照してください。

    version: 0.2

    phases:
      install:
        commands:
          - echo Installing package.json..
          - npm install
          - echo Installing Mocha...
          - npm install -g mocha
      pre_build:
        commands:
          - echo Installing source NPM placeholder dependencies...
      build:
        commands:
          - echo Build started on `date`
          - echo Compiling the Node.js code
          - mocha modules/**/tests/*.js
      post_build:
        commands:
          - echo Build completed on `date`
    artifacts:
      files:
        - modules/*
        - node_modules/*
        - package.json
        - config/*
        - server.js
4

6 に答える 6

11

ビルド セクションが失敗する可能性がある場合でも、post_build セクションが実行されます前の回答を拡張するCODEBUILD_BUILD_SUCCEEDINGと、ファイルの post_build セクションで変数を使用できbuildspec.ymlます。ビルド セクションが正常に完了した場合にのみ、post_build セクションを実行できます。以下は、これを実現する方法の例です。

version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
      - CODEBUILD_RESOLVED_SOURCE_VERSION="${CODEBUILD_RESOLVED_SOURCE_VERSION:-$IMAGE_TAG}"
      - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_URI="$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG"
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $IMAGE_URI .
  post_build:
    commands:
      - bash -c "if [ /"$CODEBUILD_BUILD_SUCCEEDING/" == /"0/" ]; then exit 1; fi"
      - echo Build stage successfully completed on `date`
      - docker push $IMAGE_URI
      - printf '[{"name":"clair","imageUri":"%s"}]' "$IMAGE_URI" > images.json
artifacts:
  files: images.json
于 2020-02-04T20:06:18.817 に答える
2

コマンドが失敗したときに実行全体を停止したい場合は、次の-eオプションを指定できます。

  • bash ファイルを実行する場合

      - /bin/bash -e ./commands.sh
    
  • または、一連のコマンド/bash ファイルを実行する場合

    #!/bin/bash
    
    set -e
    
    # ... commands
    
于 2020-11-10T15:46:19.627 に答える
0

post_build ステージが実行され、アーティファクトが生成されます。post_build は、必要に応じてビルド環境を適切にシャットダウンするのに適しています。また、ビルドが失敗した場合でも成果物が役立つ可能性があります。例: 追加のログ、中間ファイルなど。

ビルドの結果に依存しないコマンドに対してのみ post_build を使用し、ビルド環境を適切に初期化解除することをお勧めします。それ以外の場合は、そのステップを除外できます。

于 2017-11-08T19:54:35.637 に答える