Gitbucket と Jenkins の連携¶
created at 2019-08-20 15:11+0900
See also ネットワーク図.
Gitbucket から Jenkins へ WebHook¶
Jenkins に gitbucket plugin をインストールして、GitbucketのService Hook設定にWebHookのURLを入力してテスト接続、、、、失敗。
gitbucket pluginで連携できて楽チンだと思ったのも何年前のことだろうか。gitbucket pluginはずいぶん前からアップデートされてないようで、Jenkinsのスパルタにはついて行ってないらしい。
ここいらへんを参考に、Gitbucketのapi/v3とやらを適用しようとしてみた。
しかしこんなメッセージが出て失敗。
INFO: Received PushEvent for https://gitbucket.r-square.net/api/v3/repos/Spinx/blog from 172.18.0.3 ⇒ http://jenkins:8080/github-webhook/
WARNING: Could not match URL https://gitbucket.r-square.net/api/v3/repos/Spinx/blog
WARNING: Malformed repo url https://gitbucket.r-square.net/api/v3/repos/Spinx/blog
WARNING: Could not match URL http://gitbucket:8080/git/Spinx/blog.git
api/v3に非対応ってことなのか?
JenkinsとGitbucketは、proxy越しのdockerコンテナでそれぞれ稼働しているためなのか?
ブラウザからアクセスする時は
https://gitbucket.r-square.net/
https://jenkins.r-square.net/
JenkinsとGitbucketが相互に通信する時は
http://gitbucket:8080/
http://jenkins:8080/
ちなみにJenkins から「ビルド実行」でビルドする分には成功している。
Jenkins-Crumb 入りでPOST¶
ここいらへんを参考にJenkins執事長のスパルタを乗り越えようとしてみた。
Jenkins ジョブ作成¶
jenkins ジョブ作成画面を開く
ビルドトリガーは「リモートからビルド」を選択
認証トークンはテキトーに入力
保存する
アクセスユーザ用API TOKEN作成¶
jenkins api でアクセスする専用ユーザをJenkins「ユーザの管理」にて作成する。
そのユーザでJenkinsへログインし、ユーザの設定ページでAPI TOKENを発行する。
Jenkins-Crumb 取得¶
Jenkins API の crumbIssuer を使ってCrumbをもらう
curl -u "{ユーザID}:{ユーザのAPI TOKEN}" 'http://jenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
実行結果はこんな感じ
Jenkins-Crumb:ab0cdefg2h34i56j7890klmn1234opqr
ビルド実行¶
Jenkins-Crum をヘッダに設定し、ビルドしろやオラアAPIを呼ぶ
curl -X POST -u "sebastian:{ユーザのAPI TOKEN}" \
-H "Jenkins-Crumb:ab0cdefg2h34i56j7890klmn1234opqr" \
'http://jenkins:8080/job/{作成したジョブ名}/build?token={ジョブの認証トークン}'
Jenkinsのビルド履歴をみるとモリモリ実行されてた。
課題¶
JenkinsへアクセスできるネットワークにいるならばGitbucketホストからでなくてもトリガー出せるねえ。どこから出す?
nginx-proxy通さないでアクセスできるようにしたらWebHookできるのか?
JenkinsとGitbucketそれぞれにSSLかますのは、めんどくさいなあ。
せっかくサブドメインでカッチョよくアクセスできるのにモッタイナイ。
めんどくさいから「定期的に実行」でいいかもしんない
Jenkinsでビルドしたとして、デプロイ先はまた別のDockerコンテナなんだよなあ。どうやって持っていこうかな?てかパーミッション大丈夫か?
というのは、コンテナ間でrsyncせなアカンのか?と思ったから。
よく調べたら、コンテナ間で共有するためのVolume作って繋げたら良さげ。