[JAWS-UG CLI] CodeBuild: #2 プロジェクトの作成

  • 0
    いいね
  • 0
    コメント

    前提条件

    CodeBuildへの権限

    CodeBuildに対してフル権限があること。

    AWS CLIのバージョン

    以下のバージョンで動作確認済

    • AWS CLI 1.11.57
    コマンド
    aws --version
    

    結果(例):

      aws-cli/1.11.70 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.33
    

    バージョンが古い場合は最新版に更新しましょう。

    コマンド
    sudo -H pip install -U awscli
    

    0. 準備

    まず変数の確認をします。

    変数の確認
    cat << ETX
    
            AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
            AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
            FILE_ZIP             (0.3) ${FILE_ZIP}
            IAM_ROLE_ARN        (0.4) ${IAM_ROLE_ARN}
    
    ETX
    

    結果(例):

      AWS_DEFAULT_PROFILE: (0.1) <CodeBuildにフル権限のあるプロファイル>
      AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
      FILE_ZIP             (0.3) MessageUtil.zip
      IAM_ROLE_ARN         (0.4) arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole
    

    変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
    行います。

    0.1. プロファイルの指定

    プロファイルの一覧を確認します。

    コマンド
    cat ~/.aws/credentials \
           | grep '\[' \
           | sed 's/\[//g' | sed 's/\]//g'
    

    結果(例):

      iamFull-prjz-mbpr13
      <CodeBuildにフル権限のあるプロファイル>
    
    変数の設定
    export AWS_DEFAULT_PROFILE='<CodeBuildにフル権限のあるプロファイル>'
    

    0.2. リージョンの指定

    変数の設定
    export AWS_DEFAULT_REGION='ap-northeast-1'
    

    0.3. ソースコードZIPファイルの指定

    変数の設定
    FILE_ZIP='MessageUtil.zip'
    
    コマンド
    aws s3 ls s3://${S3_BUCKET_SOURCE}/${FILE_ZIP}
    

    0.4. IAMロールの指定

    変数の設定
    IAM_ROLE_NAME='CodeBuildServiceRole'
    
    コマンド
    IAM_ROLE_ARN=$( \
            aws iam get-role \
              --role-name ${IAM_ROLE_NAME} \
              --query 'Role.Arn' \
              --output text \
    ) \
            && echo ${IAM_ROLE_ARN}
    

    結果(例):

      arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole
    

    最終確認

    変数の確認
    cat << ETX
    
            AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
            AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
            FILE_ZIP             (0.3) ${FILE_ZIP}
            IAM_ROLE_NAME        (0.4) ${IAM_ROLE_NAME}
    
    ETX
    

    結果(例):

      AWS_DEFAULT_PROFILE: (0.1) <CodeBuildにフル権限のあるプロファイル>
      AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
      FILE_ZIP             (0.3) MessageUtil.zip
      IAM_ROLE_NAME        (0.4) CodeBuildServiceRole
    

    1. 事前作業

    1.1. プロジェクト名の指定

    変数の設定
    CODEB_PROJECT_NAME='codebuild-demo-java-20170417'
    

    同名のプロジェクトの不存在確認します。

    変数の設定
    ARRAY_CODEB_PROJECT_NAMES="${CODEB_PROJECT_NAME}" \
            && echo ${ARRAY_CODEB_PROJECT_NAMES}
    

    同名のプロジェクトの不存在確認します。

    コマンド
    aws codebuild batch-get-projects \
            --names "${ARRAY_CODEB_PROJECT_NAMES}"
    

    結果(例):

      {
        "projectsNotFound": [
          "codebuild-demo-java-20170417"
        ],
        "projects": []
      }
    

    1.2. プロジェクトの説明の指定

    変数の設定
    CODEB_PROJECT_DESC='codebuild demo (java)'
    

    1.3. ソースコードタイプの指定

    変数の設定
    CODEB_SOURCE_TYPE='S3'
    

    1.4. ソースコード用S3バケットの指定

    変数の設定
    S3_BUCKET_SOURCE=$( \
            aws s3 ls \
              | grep "source-${AWS_DEFAULT_REGION}" \
              | cut -d ' ' -f3 \
    ) \
            && echo ${S3_BUCKET_SOURCE}
    

    結果(例):

      source-ap-northeast-1-XXXXXXXXXXXX
    

    1.5. source

    変数の確認
    cat << ETX
    
            CODEB_SOURCE_TYPE: ${CODEB_SOURCE_TYPE}
            S3_BUCKET_SOURCE:  ${S3_BUCKET_SOURCE}
            FILE_ZIP:          ${FILE_ZIP}
    
    ETX
    
    変数の設定
    CODEB_PROJECT_SOURCE="type=${CODEB_SOURCE_TYPE},location=${S3_BUCKET_SOURCE}/${FILE_ZIP}" \
            && echo ${CODEB_PROJECT_SOURCE}
    

    結果(例):

      type=S3,location=source-ap-northeast-1-XXXXXXXXXXXX/MessageUtil.zip
    

    1.6. アーティファクトタイプの指定

    変数の設定
    CODEB_ARTIFACTS_TYPE='S3'
    

    1.7. アーティファクト用S3バケットの指定

    変数の設定
    S3_BUCKET_ARTIFACTS=$( \
            aws s3 ls \
              | grep "artifact-${AWS_DEFAULT_REGION}" \
              | cut -d ' ' -f3 \
    ) \
            && echo ${S3_BUCKET_ARTIFACTS}
    

    結果(例):

      artifact-ap-northeast-1-XXXXXXXXXXXX
    

    1.8. artifacts

    変数の確認
    cat << ETX
    
            CODEB_ARTIFACTS_TYPE: ${CODEB_ARTIFACTS_TYPE}
            S3_BUCKET_ARTIFACTS:  ${S3_BUCKET_ARTIFACTS}
    
    ETX
    
    変数の設定
    CODEB_PROJECT_ARTIFACTS="type=${CODEB_ARTIFACTS_TYPE},location=${S3_BUCKET_ARTIFACTS}" \
            && echo ${CODEB_PROJECT_ARTIFACTS}
    

    結果(例):

      type=S3,location=artifact-ap-northeast-1-XXXXXXXXXXXX
    

    1.9. 環境タイプの指定

    変数の設定
    CODEB_ENV_TYPE='LINUX_CONTAINER'
    

    1.10. 環境イメージの指定

    注釈: http://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref.html

    変数の設定
    CODEB_ENV_IMAGE='aws/codebuild/java:openjdk-8'
    

    1.11. 環境コンピュートタイプの指定

    変数の設定
    CODEB_ENV_COMPUTE_TYPE='BUILD_GENERAL1_SMALL'
    

    1.12. environment

    変数の確認
    cat << ETX
    
            CODEB_ENV_TYPE:         ${CODEB_ENV_TYPE}
            CODEB_ENV_IMAGE:        ${CODEB_ENV_IMAGE}
            CODEB_ENV_COMPUTE_TYPE: ${CODEB_ENV_COMPUTE_TYPE}
    
    ETX
    
    変数の設定
    CODEB_PROJECT_ENVIRONMENT="type=${CODEB_ENV_TYPE},image=${CODEB_ENV_IMAGE},computeType=${CODEB_ENV_COMPUTE_TYPE}" \
            && echo ${CODEB_PROJECT_ENVIRONMENT}
    

    結果(例):

      type=LINUX_CONTAINER,image=aws/codebuild/java:openjdk-8,computeType=BUILD_GENERAL1_SMALL
    

    2. プロジェクトの作成

    変数の確認
    cat << ETX
    
            CODEB_PROJECT_NAME:        ${CODEB_PROJECT_NAME}
            CODEB_PROJECT_DESC:        ${CODEB_PROJECT_DESC}
            CODEB_PROJECT_SOURCE:      ${CODEB_PROJECT_SOURCE}
            CODEB_PROJECT_ARTIFACTS:   ${CODEB_PROJECT_ARTIFACTS}
            CODEB_PROJECT_ENVIRONMENT: ${CODEB_PROJECT_ENVIRONMENT}
            IAM_ROLE_ARN:              ${IAM_ROLE_ARN}
    
    ETX
    
    コマンド
    aws codebuild create-project \
            --name ${CODEB_PROJECT_NAME} \
            --description "${CODEB_PROJECT_DESC}" \
            --source ${CODEB_PROJECT_SOURCE} \
            --artifacts ${CODEB_PROJECT_ARTIFACTS} \
            --environment ${CODEB_PROJECT_ENVIRONMENT} \
            --service-role ${IAM_ROLE_ARN}
    

    結果(例):

      {
        "project": {
          "name": "codebuild-demo-java-20170417",
          "serviceRole": "arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole",
          "created": 14xxxxxxxx.000,
          "source": {
              "type": "S3",
              "location": "source-ap-northeast-1-XXXXXXXXXXXX/MessageUtil.zip"
          },
          "artifacts": {
              "namespaceType": "NONE",
              "packaging": "NONE",
              "type": "S3",
              "location": "artifact-ap-northeast-1-XXXXXXXXXXXX",
              "name": "codebuild-demo-java-20170417"
          },
          "lastModified": 14xxxxxxxx.000,
          "timeoutInMinutes": 60,
          "environment": {
              "computeType": "BUILD_GENERAL1_SMALL",
              "image": "aws/codebuild/java:openjdk-8",
              "type": "LINUX_CONTAINER",
              "environmentVariables": []
          },
          "encryptionKey": "arn:aws:kms:ap-northeast-1:XXXXXXXXXXXX:alias/aws/s3",
          "arn": "arn:aws:codebuild:ap-northeast-1:XXXXXXXXXXXX:project/codebuild-demo-java-20170417"
          "description": "codebuild demo (java)"
        }
      }
    

    3. 事後作業

    コマンド
    aws codebuild batch-get-projects \
            --names "${ARRAY_CODEB_PROJECT_NAMES}"
    

    結果(例):

      {
          "projectsNotFound": [],
          "projects": [
              {
                  "name": "codebuild-demo-java-20170417",
                  "serviceRole": "arn:aws:iam::XXXXXXXXXXXX:role/CodeBuildServiceRole",
                  "tags": [],
                  "artifacts": {
                      "namespaceType": "NONE",
                      "packaging": "NONE",
                      "type": "S3 ",
                      "location": "artifact-ap-northeast-1-XXXXXXXXXXXX",
                      "name": "codebuild-demo-java-20170417"
                  },
                  "lastModified": 14xxxxxxxx.000,
                  "timeoutInMinutes": 60,
                  "created": 14xxxxxxxx.000,
                  "environment": {
                      "computeType": "BUILD_GENERAL1_SMALL",
                      "image": "aws/codebuild/java:openjdk-8",
                      "type": "LINUX_CONTAINER",
                      "environmentVariables": []
                  },
                  "source": {
                      "type": "S3",
                      "location": "source-ap-northeast-1-XXXXXXXXXXXX/MessageUtil.zip"
                  },
                  "encryptionKey": "arn:aws:kms:ap-northeast-1:XXXXXXXXXXXX:alias/aws/s3",
                  "arn": "arn:aws:codebuild:ap-northeast-1:XXXXXXXXXXXX:project/codebuild-demo-java-20170417",
                  "description": "codebuild demo (java)"
              }
          ]
      }
    

    完了