Githubと GCEを連携してデプロイを自動化する方法を教えてください

投稿者: Anonymous

Github上の特定のブランチに対して PRがマージされたことをトリガーに、GCEにその変更をデプロイしたいです。
現在は dockerは使っておらず、GCEのあるディレクトリ上で git pullをして変更を反映させる運用方法をとっているのでこれを自動化したいと考えております。

Travis CIや Cloud Buildのドキュメントを読みましたが、いずれもトリガーがブランチへの pushであり実現することは難しいのではないかと思っています。
できれば GCP上で完結することが望ましいです。

提案やアドバイス、実際に行われている方法などがあれば教えていただけますでしょか。
よろしくお願い致します。

解決

Travis CIや Cloud Buildのドキュメントを読みましたが、いずれもトリガーがブランチへの pushであり実現することは難しいのではないかと思っています。

いいえ、Mergeはpushをトリガーとすることで認識できます。私が知っている限りではCloud Build/Travis CI/Drone CIはmergeをpushとして検知します。これはmasterへの直接pushしたときと同じ意味を持ちます。

Cloud BuildとTravis CIの設定例は以下の通りです。

Cloud Build

Cloud BuildはGUI上での設定になるので項目のみ記します。

Event
– Push to branch

Source
– Branch master

Travis CI

echoするだけの簡単な実装例です。手元で動かしてご確認ください。

language: node_js
branches:
  only:
  - master

stages:
# masterへpull requestを投げたときにjobを動かす条件
- name: pull request to master
  if: branch = master AND type = pull_request
# masterへpushしたときにjobを動かす条件
- name: push or merge to master
  if: branch = master AND type = push

jobs:
  include:
  - stage: pull request to master
    script:
    - echo "This job works when the job is committed to a PR to master."
  - stage: push or merge to master
    script:
    - echo "This job works when the job is merged with master or when the job is pushed." //

その他

提案やアドバイス、実際に行われている方法などがあれば教えていただけますでしょか。
よろしくお願い致します。

これに応えると、私個人としてはtagが作成されたイベントをデプロイなどのトリガーとしています。理由としては、masterブランチというのは、Pull Requestだけでなく、直接push可能な状態です。当たり前ですが先着順でコードが入ってしまうため作業が前後した場合に後戻りするのが面倒なことが多いです。それに対してtagは特定のコミットより作成するため、作業の順序はそもそも発生せず、特定のコミットまでの作業を確実にリリースへ反映させることが可能です。もし追加の作業がそのタグより後に発生した場合は、新しいタグを作成すればよいだけなので、不要な運用トラブルを避けることが可能です。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *