前提条件
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
- 準備
=======
まず変数の確認をします。
変数の確認
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. プロジェクト名の指定
変数の設定
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
- プロジェクトの作成
=====================
変数の確認
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)"
}
}
- 事後作業
===========
コマンド
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)"
}
]
}