概要
- 静的サイトの自動デプロイ github -> CircleCI -> S3 -> CloudFront の記事に関連した設定の続きです。
- 上記の設定では、デプロイしたURLをいちいちブランチ名をコピペしてURLにアクセスする必要が有るので若干面倒です。それを無くすためにデプロイ先のURLをPull requestのコメントに自動で書き込みます。
- 余談ですがCircleCIの設定ファイルのバージョンが2.1に上がって色々書けるようになりましたね。
CircleCIの設定
いきなりですが回答です。全て変数で書いてあるので、コピペで使えます。
# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
defaults: &defaults
working_directory: ~/repo
docker:
- image: circleci/node:10
version: 2.1
jobs:
build:
<<: *defaults
steps:
- checkout
- run: npm install
- run: npm run build
- persist_to_workspace:
root: .
paths:
- build
deploy-job:
<<: *defaults
steps:
- attach_workspace:
at: .
- run:
name: Install newer version of awscli
command: |
sudo apt-get install python-dev python-pip
pip install awscli --user
- run:
name: Deploy to S3
command: /home/circleci/.local/bin/aws s3 sync build s3://${AWS_BUCKET_NAME}${CIRCLE_BRANCH}/ --delete --region=${AWS_S3_REGION}
- run:
name: Post URL
command: |
if [ ${CI_PULL_REQUEST} ]; then
curl -X POST \
-H 'Content-Type:application/json' \
-u matsubo:${GITHUB_ACCESS_TOKEN} \
-d "{\"body\":\"Deployed to:\nhttp://${AWS_BUCKET_NAME}.s3-website-${AWS_S3_REGION}.amazonaws.com/${CIRCLE_BRANCH}/\"}" \
"https://api.github.com/repos/${GITHUB_USER}/${GITHUB_REPO}/issues/${CIRCLE_PULL_REQUEST##*/}/comments"
fi
workflows:
version: 2
build-deploy:
jobs:
- build
- deploy-job:
requires:
- build
上記のYAMLにある変数に追加してawscliを使うために以下の2つの環境変数なども必要に応じて設定します。
AWS_ACCESS_KEY_ID– IAM ユーザーまたはロールに関連付けられる AWS アクセスキーを指定します。AWS_SECRET_ACCESS_KEY– アクセスキーに関連付けられるシークレットキーを指定します。これは、基本的にアクセスキーの「パスワード」です。
うまく出来ると、下のような感じになります。
GithubのPull Requestにコメントを書き込む
中でも面倒だったのがGithubのAPIの認証です。エラーがわかりづらくて面倒でした。
まず、Personal Access Tokenをこちらのページから作ります。2FAを使っている場合もこの手順でOKです。
権限は、以下の項目(Full control of private repositories)だけチェックをしておけばOKです。
curlコマンドでテストすると以下のようになります。エンドポイントURLのpathはpullではなく、issuesで良いです。
> curl -X POST -H 'Content-Type:application/json' -u matsubo:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -d "{\"body\":\"GitHub APIからコメント投稿\"}" "https://api.github.com/repos/xxxxxxxxxx/xxxxxxxxxxxxxxxxxxx/issues/14/comments"
{
"url": "https://api.github.com/repos/xxxxxxxxxx/xxxxxxxxxxxxxxxxxxx/issues/comments/530435426",
"html_url": "https://github.com/xxxxxxxxxx/xxxxxxxxxxxxxxxxxxx/pull/14#issuecomment-530435426",
"issue_url": "https://api.github.com/repos/xxxxxxxxxx/xxxxxxxxxxxxxxxxxxx/issues/12",
"id": 530435426,
"node_id": "MDEyOklzc3VlQ29tbWVudDUzMDQzNTQyNg==",
"user": {
"login": "matsubo",
"id": 98103,
"node_id": "MDQ6VXNlcjk4MTAz",
"avatar_url": "https://avatars0.githubusercontent.com/u/98103?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/matsubo",
"html_url": "https://github.com/matsubo",
"followers_url": "https://api.github.com/users/matsubo/followers",
"following_url": "https://api.github.com/users/matsubo/following{/other_user}",
"gists_url": "https://api.github.com/users/matsubo/gists{/gist_id}",
"starred_url": "https://api.github.com/users/matsubo/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/matsubo/subscriptions",
"organizations_url": "https://api.github.com/users/matsubo/orgs",
"repos_url": "https://api.github.com/users/matsubo/repos",
"events_url": "https://api.github.com/users/matsubo/events{/privacy}",
"received_events_url": "https://api.github.com/users/matsubo/received_events",
"type": "User",
"site_admin": false
},
"created_at": "2019-09-11T15:32:07Z",
"updated_at": "2019-09-11T15:32:07Z",
"author_association": "COLLABORATOR",
"body": "GitHub APIからコメント投稿"
}




Comments