Closed9
AWS CodeBuildでGithubのReleasesを自動作成する
要件
GithubのReleasesを自動作成する(自作アプリでの例)
トリガー
releaseブランチをプッシュした時に実行する
Releasesの中身
- タグ名はrelease_バージョン名
- バージョン名はAndroidプロジェクトのbuild.gradleから取得する
- タイトルはバージョン名
- 本文
- 最新のrelease_で始まるタグが付いたコミットから最新コミットまでの間でマージされたプルリクのタイトル
- 上記の♯付き番号
パラメータについて
GithubのAPIアクセストークン、リポジトリ名、Organization名は環境変数で入力する。
現行実装
BitriseのScriptステップで下記スクリプトを動かしている。
sudo apt install -y python3-pip
pip3 install pygithub --user
python3 release_note.py
release_note.pyの中身。
問題点
sudo apt install -y python3-pip
が失敗する。
他にも
- 毎回必要なライブラリをインストールするのは非効率。
- Pythonやライブラリのバージョンが毎回変わるので突然動かなくなる可能性がある。
今回やりたいこと
- poetryで環境を固定する
- DockerイメージにしてAWS ECRに置く
- ソースコードを公開できるように固有の情報は環境変数にする
- Releasesの作成だけを行うAWS CodeBuildのビルドプロジェクトを作る
- Google Playへの自動申請はBitriseのGoogle Play Deployステップで行っているが、そこは問題が無いのでそのままにする。
今回のコード
アプリ開発者が提供する環境変数
- GITHUB_API_ACCESS_TOKEN
- GITHUB_REPOSITORY (リポジトリ名)
- GITHUB_ORGANIZATION (Organizationを使っている場合は設定する)
AWS CodeBuildによって提供される環境変数
- CODEBUILD_SRC_DIR GitHubからチェックアウトされてソースコードが保存されたディレクトリ
Dockerfileを作成
FROM python:3.8-slim
WORKDIR /app
COPY . /app
RUN pip install poetry
RUN poetry install
docker-compose.ymlを作成
release_note:
build: .
environment:
- GITHUB_API_ACCESS_TOKEN
- GITHUB_REPOSITORY
- GITHUB_ORGANIZATION
ここで指定した環境変数はホストOSの物が使われる。
docker-composeを実行する
CODEBUILD_SRC_DIR環境変数を使用する部分はコメントアウトする。
docker-compose build
docker-compose run release_note poetry run main
- 不要なappcompatライブラリ取り込みを削除 #79
- Create Dependabot config file #80
DockerのAWS ECR向け認証を行う
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY環境変数は設定済みという前提。
aws_account_idは人によって違う。
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.ap-northeast-1.amazonaws.com
Registoryを作る
aws ecr create-repository --repository-name release_note --image-scanning-configuration scanOnPush=true --region ap-northeast-1
AWS ECRにPUSHするためにローカルのDockerイメージにタグを付ける
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
release_note_release_note latest a542cc66d3a1 8 minutes ago 205MB
docker tag release_note_release_note:latest aws_account_id.dkr.ecr.ap-northeast-1.amazonaws.com/release_note:latest
AWS ECRにPUSHする
docker push aws_account_id.dkr.ecr.ap-northeast-1.amazonaws.com/release_note
AWS CodeBuildの設定を行う
プロジェクトの設定
- ビルドプロジェクトを作成する
- プロジェクト名を設定する
ソース
- ソースプロバイダをGitHubにする
- GitHub アカウントのリポジトリを選択する
- リリースノートを作りたいリポジトリを選択する
- サービスロールのアクセス許可にチェックを入れる
プライマリソースのウェブフックイベント
- コードの変更がこのレポジトリにプッシュされるたびに再構築する
- イベントタイプをPUSHにする
- HEAD_REF - オプショナルを
^refs/heads/release$
にする
環境
- カスタムイメージ
- 環境タイプはLinux
- 自分のECRアカウント
- Amazon ECR レポジトリを選択する
- Amazon ECR イメージをlatestにする
- プロジェクトサービスロールを選択する
- AWS CodeBuild にこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする、にチェックを入れる
- 環境変数を設定する
Buildspec
今回はビルドコマンドの挿入にした。
version: 0.2
phases:
build:
commands:
- cd /app
- poetry run main
ログ
- グループ名とストリーム名を設定する
Dockerイメージをアップデートする場合
docker-compose build
docker tag release_note_release_note:latest aws_account_id.dkr.ecr.ap-northeast-1.amazonaws.com/release_note
docker push aws_account_id.dkr.ecr.ap-northeast-1.amazonaws.com/release_note
テスト実行
- GithubのReleasesの投稿はコメントアウトしている
-
ビルドを開始ボタン
を押す - ビルドログから動作を確認
[Container] 2021/02/10 18:53:50 Entering phase BUILD
[Container] 2021/02/10 18:53:50 Running command cd /app
[Container] 2021/02/10 18:53:50 Running command poetry run main
1.4.6 release_1_4_6
- 不要なappcompatライブラリ取り込みを削除 #79
- Create Dependabot config file #80
[Container] 2021/02/10 18:53:55 Phase complete: BUILD State: SUCCEEDED
本番実行
自作アプリはアップデート予定が無いので、毎週アップデータをリリースしている会社のアプリで試す。
このスクラップは2021/03/01にクローズされました