Google Cloud BuildをGitHubリポジトリと連携させて、ビルドジョブを動かしてみました。
CI/CDの類を構築したことがなかったので、Hello, World!からです。
2021/05/07追記:AWSのCodeBuildも試しました → AWS CodeBuildをGitHubリポジトリで動かしてHello, World!
この記事にあるスクショは、白い背景はGoogle Cloud Platformのページで、黒い背景はGitHubのページです。
前提
- Google Cloud Platformにプロジェクトが存在する
- GitHubアカウントが存在する
- GitHub上にGoogle Cloud Buildを試すためのリポジトリが存在する
手順
- Cloud BuildをGitHubリポジトリに接続
- pushしたらジョブを起動するためのTriggerをCloud Buildに設定
- ジョブの内容を記述するファイル cloudbuild.yaml を作成
- pushしてジョブを実行してみる
Cloud BuildをGitHubリポジトリに接続
Cloud Buildの画面に移動し、左のメニューのTriggersを選択します。
まずはCloud Buildをリポジトリに接続することが必要なので、「CONNECT REPOSITORY」のボタンをクリックします。次のような画面になります。
今回はGitHubのリポジトリで作成してみます。GitHub認証の設定では、ブラウザがGitHubのページに移動して承認を求められますので、承認します。すると次のような画面になります。
"GitHubにGoogle Cloud Buildをインストール" することが必要のようです。「INSTALL GOOGLE CLOUD BUILD」のボタンをクリックすると、再びGitHubの画面が開きます。
この画面になるので、インストールするリポジトリを選択します。
インストールが完了すると、Google Cloudの画面に戻り、接続するリポジトリが選択できるようになりますので、選択します。
「CONNECT」のボタンをクリックすると、接続完了です。
続いて、「CREATE A TRIGGER」のボタンをクリックすると、Trigger作成画面に移動します。
ちなみに、GitHubの画面では、自分のアカウントのページのSettingsのメニューにあるApplicationsのページを見ると、Installed GitHub AppsとしてGoogle Cloud Buildが登場しています。
pushしたらジョブを起動するためのTriggerをCloud Buildに設定
次は、GitHubにpushすると自動でジョブが走るようにTriggerを設定します。
「CREATE A TRIGGER」のボタンをクリックし、Trigger作成画面に移ります。
Nameだけ適当に入力します。
EventはPush to a branch、Sourceはすでに先ほど作成したリポジトリが選択されています。Branchはデフォルトで ^main$
となっています。正規表現のようです。
Configurationはデフォルトのままにします。
これで「CREATE」ボタンをクリック。
Triggers一覧の画面になり、Triggerが作成されていることが確認できます。
ジョブの内容を記述するファイル cloudbuild.yaml を作成
ジョブの内容を記述するファイルはYAMLでリポジトリの中に作成します。
cloudbuild.yaml
という名前で以下の3行のみのYAMLを作成します。
steps:
- name: "bash"
args: ["echo", "Hello, World!"]
pushしてジョブを実行してみる
このYAMLファイルをgit commit
し、git push
でGitHubにpushすると、Cloud Buildのビルドが実行されます。
Cloud Buildの画面の左のメニューのHistoryを選択すると、実行履歴が残されてます。
Hello, World!ができました。
おまけ
cloudbuild.yaml
を以下のようにすると、ビルドがどういう環境で実行されるのかがイメージできました。
steps:
- name: "bash"
args: ["echo", "Hello, World!"]
- name: "bash"
args: ["pwd"]
- name: "bash"
args: ["ls", "-al"]
- name: "bash"
args: ["touch", "building.txt"]
- name: "bash"
args: ["ls", "-al"]
pwd
コマンドでは/workspace
と出力されました。
touch
コマンドのあとのls
コマンドではtouchしたファイルが増えます。ジョブを再実行すると、touchしたファイルがない状態から始まります。
リポジトリに含まれているファイルのタイムスタンプは、ジョブを開始する時刻になっているので、ジョブ実行ごとに環境が作られているようです。