Open4

やっぱりRaspberryPi3上でJenkinsを営業する

okuokuokuoku

諸般の事情でJenkinsを24時間営業にしたいということでRaspberry Pi上にJenkins環境を構築することにした。前いろいろあって諦めたんだけど。。

okuokuokuoku

起動タイムアウトを無効にする

基本的に本家の記述 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 して初期セットアップを完了させる。

okuokuokuoku

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 から有効にできる。

okuokuokuoku

別のドライブを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で直接確認するまで全然気付かなかった。