DEV Community

kaede
kaede

Posted on

CI BuildKite で GitHub からリポジトリをクローンして内部の hello.sh を実行する

why

パイプラインに強くなりたい
インフラ強くなりたい


BuildKite とは?

https://buildkite.com/

クラウド上で動く実行環境。
時間指定で実行できる。

主に定期的にビルドしてデプロイするために使われるらしい。

自動テストの定期実行や、定期的な取り込み処理にも使える。


パイプラインとは?

BuildKite でのプロジェクトのひとまとまり。


Agent とは?

https://buildkite.com/docs/agent/v3

ローカルにインストールして、CUI でパイプラインを動かすためのものらしい。


パイプラインのガワの作成

Image description

サインアップしてパイプラインを作成する

Image description

Git リポジトリとの連携を求められるので
hello.sh が入っている sh のリポジトリ

https://github.com/kaede0902/sh

を連携した

Image description

同時に最初のステップも作成できる。
ステップとラベルだけ入力しておく。

Image description

これでパイプラインと、中身のステップとラベルができた。

Yaml で編集するボタンを押して

steps:
  - command: ./hello.sh
    label: "print hello.sh"
Enter fullscreen mode Exit fullscreen mode

リポジトリ内部の hello.sh を実行する処理を書いた。

Image description

これを動かすためには Agent をローカルにインストールして
Agent からパイプラインを一度叩く必要が有る。


Agent のインストールと有効化

https://buildkite.com/docs/agent/v3/ubuntu

BuildKite の GPG key? Public Key? を import してきて
keysaver に送ったりする。

k8s, k3d のインストールに似ている。

 sudo apt-get update && sudo apt-get install -y buildkite-agent   

Setting up buildkite-agent (3.39.1-4608) ...
 _           _ _     _ _    _ _                                _
| |         (_) |   | | |  (_) |                              | |
| |__  _   _ _| | __| | | ___| |_ ___    __ _  __ _  ___ _ __ | |_
| '_ \| | | | | |/ _` | |/ / | __/ _ \  / _` |/ _` |/ _ \ '_ \| __|
| |_) | |_| | | | (_| |   <| | ||  __/ | (_| | (_| |  __/ | | | |_
|_.__/ \__,_|_|_|\__,_|_|\_\_|\__\___|  \__,_|\__, |\___|_| |_|\__|
                                               __/ |
                                              |___/

You now need to add your agent token to "/etc/buildkite-agent/buildkite-agent.cfg"
Enter fullscreen mode Exit fullscreen mode

GPG key を登録したら、apt-get で
buildkite-agent をインストールする

 sudo sed -i "s/xxx/YOUR_AGENT_TOKEN/g" /etc/buildkite-agent/buildkite-agent.cfg         
Enter fullscreen mode Exit fullscreen mode

configure する設定のファイルに、エージェントトークンを書き込む

API リクエストするときの BearToken とは別のトークン。

sudo systemctl enable buildkite-agent && sudo systemctl start buildkite-agent
Enter fullscreen mode Exit fullscreen mode

そして buildkite-agent を有効化すると

Image description

サイトで通知される。
紙吹雪が vercel みたいだ...


パイプラインを curl で実行する

Image description

buildkite-agent のインストールと有効化が終わり
パイプラインの管理画面に戻ると

curl をたたけと言われる。

curl -H "Authorization: Bearer $TOKEN" "https://api.buildkite.com/v2/organizations/kaede-dot-dev/pipelines/test-sh/builds" \
  -X "POST" \
  -F "commit=HEAD" \
  -F "branch=master" \
  -F "message=First build :rocket:"
Enter fullscreen mode Exit fullscreen mode

ここに buildkite のエージェントのトークンを入れて
リクエストするらしい。

Image description

Slack と同じように、用途を絞って API トークンを発行する。

これを入れて さっきの curl リクエストすると

JSON でパイプラインの情報が返ってくる。

Image description

パイプラインを見ると起動されているのがわかる。
しかし、ssh の設定をしていないので、
GitHub からリポジトリが clone できていない。


buildkite での実行環境の公開鍵を GitHub に登録する

https://buildkite.com/docs/agent/v3/ssh-keys#creating-a-single-ssh-key

buildkite-agent ローカルのターミナルで動かすと、
パイプラインが実際実行されるリモートの Ubuntu のマシンにアクセスできる
そこで Public key の登録とかをできると推測。

sudo su buildkite-agent
Enter fullscreen mode Exit fullscreen mode

buildkite-agent で sh に入って

mkdir -p ~/.ssh && cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "dev+build@myorg.com"
Enter fullscreen mode Exit fullscreen mode

Generating public/private rsa key pair.

dev+build というメアドで rsa キーを生成する

Image description

このキーを GitHub の pubkey 置き場に登録する

これで GitHub から SSH で Clone できるようになった。


パイプラインを GUI と CUI で実行する

Image description

GUI での Build Now ボタンでも実行できるし

curl -v -H "Authorization: Bearer yourApiToken" "https://api.buildkite.com/v2/organizations/your/pipelines/test-sh/builds" \
  -X "POST" \
  -F "commit=HEAD" \
  -F "branch=master" \
  -F "message=curl build request"
Enter fullscreen mode Exit fullscreen mode

curl でのそのパイプラインのエンドポイントへの POST でも

Image description

BuildKite のパイプラインを実行することができた。


定期実行

Image description

パイプラインの schedule タブから設定できる。
Jenkins と違って cron だけでなく, daily, hourly, midnight などとわかりやすいタグで頻度をつけられる。


まとめ

Buildkite でパイプラインを作成し、その中で連携された GitHub リポジトリの中身のシェルを実行するには

  1. GitHub と連携してパイプラインを作り
  2. 公開鍵の設定をして buildkite が GitHub リポジトリを clone できるようにして
  3. GitHub リポジトリの中身のシェルを実行するパイプラインのステップを yaml で書いて
  4. ローカルに BuildKiteAgent をインストールして、パイプラインを有効化するリクエストを投げて
  5. パイプラインのボタンか curl リクエストでパイプラインのビルドを行わせる。または定期実行の設定をする。

以上。

Top comments (0)