Open12
backlogでもCI/CDしたい
backlogでもCI/CDしたいのでwebhook調査する。
webhookでGitのpushを設定して、git pushしてみると以下の内容が送られたらしい。
webhookの送信先には、適当にデプロイしたCloud RunのURLを設定。
{
"id":xxxx,
"project": {
"id": xxx,
"projectKey": "XXXX",
"name": "xxx",
"chartEnabled": false,
"subtaskingEnabled": false,
"projectLeaderCanEditProjectLeader": false,
"useWikiTreeView": true,
"textFormattingRule": "markdown",
"archived": false
},
"type": 12,
"content": {
"change_type": "create",
"ref": "refs/heads/main",
"repository": {
"id": xx,
"name": "webhooktest",
"description": null
},
"revision_count": 1,
"revision_type": "commit",
"revisions": [
{
"rev": "xxx",
"comment": "first commit"
}
]
},
"notifications": [],
"createdUser": {
"id": xxx,
"userId": null,
"name": "xxxx",
"roleType": 1,
"lang": "ja",
"mailAddress": null,
"nulabAccount": {
"nulabId": "xxx",
"name": "xxx",
"uniqueId": "xxx"
}
},
"created": "2024-12-05T02:43:41Z"
}
POST2004.84 KB3 ms Backlog Webhook https://xxxx.xxxxxx.run.app/
確かに、Cloud Run側に来てる。
"type": 12,
"content": {
"change_type": "create",
"ref": "refs/heads/main",
この辺使って、mainにpushされたら、ビルド・デプロイができるか。
"type": 12
と"change_type": "create"
これ調べる。
ここにtypeの一覧があった。
1:課題の追加
2:課題の更新
3:課題にコメント
4:課題の削除
5:Wikiを追加
6:Wikiを更新
7:Wikiを削除
8:共有ファイルを追加
9:共有ファイルを更新
10:共有ファイルを削除
11:Subversionコミット
12:GITプッシュ
13:GITリポジトリ作成
14:課題をまとめて更新
15:ユーザーがプロジェクトに参加
16:ユーザーがプロジェクトから脱退
17:コメントにお知らせを追加
18:プルリクエストの追加
19:プルリクエストの更新
20:プルリクエストにコメント
21:プルリクエストの削除
22:マイルストーンの追加
23:マイルストーンの更新
24:マイルストーンの削除
25:グループがプロジェクトに参加
26:グループがプロジェクトから脱退
type: 12
はgit push。
だからwebhook受け取る側でtype: 12 && ref: refs/heads/main
の時にgit clone -> build -> deploy
すれば良さそう。
Google Cloudでどうするか
Cloud Runにデプロイしたい。
backlog (webhook) ->
cloud run (cloud buildをトリガーするだけ) ->
cloud buildでgit cloneして、gcloud run deploy --source .
みたいな感じかな。
ssh鍵作る。
ssh-keygen -t rsa -b 4096 -N '' -f id_rsa_backlog -C <mail address>
secret managerに秘密鍵保存する。
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/git'
secretEnv: ['SSH_KEY']
entrypoint: 'bash'
args:
- -c
- |
echo "$$SSH_KEY" >> /root/.ssh/id_rsa
chmod 400 /root/.ssh/id_rsa
ssh-keyscan -t rsa <space id>.git.backlog.com > /root/.ssh/known_hosts
volumes:
- name: 'ssh'
path: /root/.ssh
# Clone the repository
- name: 'gcr.io/cloud-builders/git'
entrypoint: 'bash'
args:
- '-c'
- |
if [ -d "webhooktest" ]; then
echo "Directory 'webhooktest' already exists. Performing git pull..."
cd webhooktest
git pull
else
echo "Cloning repository..."
git clone <space id>@<space id>.git.backlog.com:/OMIHIROFUMI/webhooktest.git
fi
volumes:
- name: 'ssh'
path: /root/.ssh
availableSecrets:
secretManager:
- versionName: <secret manager>
env: 'SSH_KEY'
options:
logging: CLOUD_LOGGING_ONLY
これで、backlogからgit cloneできることは確認できた。
steps:
- name: ubuntu
args:
- echo
- $_PROJECT_DD
options:
logging: CLOUD_LOGGING_ONLY
cloud buildのトリガーの設定でbody取れて、フィルタリングもできるからwebhook送る先を自分で作らなくてもよさそう。