やっぱりRaspberryPi3上でJenkinsを営業する
諸般の事情でJenkinsを24時間営業にしたいということでRaspberry Pi上にJenkins環境を構築することにした。前いろいろあって諦めたんだけど。。
起動タイムアウトを無効にする
基本的に本家の記述 https://www.jenkins.io/doc/book/installing/linux/ に合わせれば良いが、 Java は openjdk-17-jre-headless
にする。
RaspberryPi3上だと初回起動に6分くらい掛かるのでギリギリ起動しない。
Preparing to unpack .../jenkins_2.452.2_all.deb ...
Unpacking jenkins (2.452.2) ...
Setting up jenkins (2.452.2) ...
Created symlink /etc/systemd/system/multi-user.target.wants/jenkins.service → /lib/systemd/system/jenkins.service.
Job for jenkins.service failed because a timeout was exceeded.
See "systemctl status jenkins.service" and "journalctl -xe" for details.
このため、 systemctl edit jenkins
して設定の上書きをする必要がある。
[Service]
TimeoutStartSec=infinity
その後 systemctl restart jenkins
して初期セットアップを完了させる。
Cloudflare下に置く
Webhookをインターネットから受けとるため、Cloudflareの下に配置してネットワーク名を持てるようにする。Cloudflareはそのために自社のネットワークへVPNを張れるようにしている。
ドメインと認証のセットアップ
... これ結構複雑だけどここに書けることがあんまり無い。。手元ではOktaの開発者アカウントを使っている。
Tunnelの作成
公式のドキュメントの通りにやる https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/get-started/create-remote-tunnel/ 。この後、public hostnameを追加する。 このタイミングでサーバーはインターネットに公開される 。Cloudflare Zero TrustのApplication設定が終わるまではサーバーを起動しない方が良いかも。
Applicationの作成
公式のドキュメントもある https://developers.cloudflare.com/cloudflare-one/applications/configure-apps/self-hosted-apps/ が、そもそもこの手の製品を使ったことが無いと意味不明なんじゃないだろうか。。
HTTPSの強制
Websites → ドメイン → SSL/TLS から有効にできる。
別のドライブをWindowsのJenkins agentディレクトリにできない
いやまぁビルドを直接実行する機会は無いから良いんだけど、Jenkins agentを c:
ドライブ以外に置いたら、
[06/23/24 19:30:37] [SSH] Starting agent process: cd "e:/jenkins_agent" && java -jar remoting.jar -workDir e:/jenkins_agent -jar-cache e:/jenkins_agent/remoting/jarCache
Error: Unable to access jarfile remoting.jar
Agent JVM has terminated. Exit code=1
と出てagentの起動に失敗してしまった。Windowsはドライブ毎にカレントディレクトリを持つため、 cd "e:/jenkins_agent"
は意味がない。
(remoting.jar
をログイン直後のディレクトリである c:/Users/oku
から探そうとしていることがわかる)
... いやまぁ冷静に考えると当然なんだけど、procmonで直接確認するまで全然気付かなかった。