############################### Gitbucket と Jenkins の連携 ############################### :small:`created at 2019-08-20 15:11+0900` .. graphviz:: ci.dot See also :ref:`r2networkdiag`. ************************************* Gitbucket から Jenkins へ WebHook ************************************* Jenkins に gitbucket plugin をインストールして、GitbucketのService Hook設定にWebHookのURLを入力してテスト接続、、、、失敗。 gitbucket pluginで連携できて楽チンだと思ったのも何年前のことだろうか。gitbucket pluginはずいぶん前からアップデートされてないようで、Jenkinsのスパルタにはついて行ってないらしい。 ここいらへんを参考に、Gitbucketのapi/v3とやらを適用しようとしてみた。 * https://github.com/gitbucket/gitbucket/issues/1847 * https://github.com/gitbucket/gitbucket/wiki/Setup-Jenkins-GitHub-pull-request-builder-plugin しかしこんなメッセージが出て失敗。 .. code-block:: bash 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執事長のスパルタを乗り越えようとしてみた。 * https://qiita.com/xotaki/items/06de6fc3812d0f54d4d0 * https://obel.hatenablog.jp/entry/20180511/1525973400 Jenkins ジョブ作成 ========================= #. jenkins ジョブ作成画面を開く #. ビルドトリガーは「リモートからビルド」を選択 * 認証トークンはテキトーに入力 #. 保存する アクセスユーザ用API TOKEN作成 ================================ #. jenkins api でアクセスする専用ユーザをJenkins「ユーザの管理」にて作成する。 #. そのユーザでJenkinsへログインし、ユーザの設定ページでAPI TOKENを発行する。 Jenkins-Crumb 取得 ========================= Jenkins API の crumbIssuer を使ってCrumbをもらう .. code-block:: bash curl -u "{ユーザID}:{ユーザのAPI TOKEN}" 'http://jenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 実行結果はこんな感じ .. code-block:: bash Jenkins-Crumb:ab0cdefg2h34i56j7890klmn1234opqr ビルド実行 ========================= Jenkins-Crum をヘッダに設定し、ビルドしろやオラアAPIを呼ぶ .. code-block:: bash 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作って繋げたら良さげ。