why
パイプラインに強くなりたい
インフラ強くなりたい
BuildKite とは?
クラウド上で動く実行環境。
時間指定で実行できる。
主に定期的にビルドしてデプロイするために使われるらしい。
自動テストの定期実行や、定期的な取り込み処理にも使える。
パイプラインとは?
BuildKite でのプロジェクトのひとまとまり。
Agent とは?
https://buildkite.com/docs/agent/v3
ローカルにインストールして、CUI でパイプラインを動かすためのものらしい。
パイプラインのガワの作成
サインアップしてパイプラインを作成する
Git リポジトリとの連携を求められるので
hello.sh が入っている sh のリポジトリ
https://github.com/kaede0902/sh
を連携した
同時に最初のステップも作成できる。
ステップとラベルだけ入力しておく。
これでパイプラインと、中身のステップとラベルができた。
Yaml で編集するボタンを押して
steps:
- command: ./hello.sh
label: "print hello.sh"
リポジトリ内部の hello.sh を実行する処理を書いた。
これを動かすためには 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"
GPG key を登録したら、apt-get で
buildkite-agent をインストールする
❯ sudo sed -i "s/xxx/YOUR_AGENT_TOKEN/g" /etc/buildkite-agent/buildkite-agent.cfg
configure する設定のファイルに、エージェントトークンを書き込む
API リクエストするときの BearToken とは別のトークン。
sudo systemctl enable buildkite-agent && sudo systemctl start buildkite-agent
そして buildkite-agent を有効化すると
サイトで通知される。
紙吹雪が vercel みたいだ...
パイプラインを curl で実行する
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:"
ここに buildkite のエージェントのトークンを入れて
リクエストするらしい。
Slack と同じように、用途を絞って API トークンを発行する。
これを入れて さっきの curl リクエストすると
JSON でパイプラインの情報が返ってくる。
パイプラインを見ると起動されているのがわかる。
しかし、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
buildkite-agent で sh に入って
mkdir -p ~/.ssh && cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "dev+build@myorg.com"
Generating public/private rsa key pair.
dev+build というメアドで rsa キーを生成する
このキーを GitHub の pubkey 置き場に登録する
これで GitHub から SSH で Clone できるようになった。
パイプラインを GUI と CUI で実行する
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"
curl でのそのパイプラインのエンドポイントへの POST でも
BuildKite のパイプラインを実行することができた。
定期実行
パイプラインの schedule タブから設定できる。
Jenkins と違って cron だけでなく, daily, hourly, midnight などとわかりやすいタグで頻度をつけられる。
まとめ
Buildkite でパイプラインを作成し、その中で連携された GitHub リポジトリの中身のシェルを実行するには
- GitHub と連携してパイプラインを作り
- 公開鍵の設定をして buildkite が GitHub リポジトリを clone できるようにして
- GitHub リポジトリの中身のシェルを実行するパイプラインのステップを yaml で書いて
- ローカルに BuildKiteAgent をインストールして、パイプラインを有効化するリクエストを投げて
- パイプラインのボタンか curl リクエストでパイプラインのビルドを行わせる。または定期実行の設定をする。
以上。
Top comments (0)