term タグ別の記事一覧

JenkinsのWebフックによるビルド設定メモ

 Jenkinsをアップデートしたらグローバルセキュリティ設定を確認しろというメッセージが出たので色々設定したら、gitのpushに対応させてビルドするために設定していたWebフックが動かなくなった。そのための対応メモ。アドホックにやったので正しい対策ではないかもしれない。

グローバルセキュリティ設定

 「行列による権限管理(プロジェクト単位)」を有効にして、匿名ユーザーに対し「ジョブ」の「Build」を許可する。このとき、ログインしているユーザーに全権限を与えないとその後Jenkinsの操作ができなくなる場合がある(ググればその場合の対策法が出てくる)。

 また、「CSRF対策」は無効にする。有効にすると事前にトークンの取得が必要になるらしい(参考:https://stackoverflow.com/questions/38137760/jenkins-rest-api-create-job)。面倒臭いので無効にする。

プロジェクト単位の権限設定

 匿名ユーザーに「ジョブ」の「Build」、「Read」、「Workspace」を有効にする。

 これでビルドできた。「リモートからビルド」は有効にしておくが、認証トークンが必要かどうかは不明。

JenkinsでLet's encryptのSSL証明書を使う

 Let’s encryptで取得したSSL証明書をJenkinsで使おうとしてハマったので解決法のメモ。

 基本的にはhttps://issues.jenkins-ci.org/browse/JENKINS-22448に書いてあるとおり。まず、次のようなconvert.shを作る。

#!/bin/bash

HOST=<ホスト名>
KEY_PEM=/etc/letsencrypt/live/$HOST/privkey.pem
CERT_PEM=/etc/letsencrypt/live/$HOST/cert.pem
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
KEYSTORE=/var/lib/jenkins/keystore

# convert ky
openssl rsa -des3 -in $KEY_PEM -out key.encrypted.pem
openssl pkcs12 -inkey key.encrypted.pem -in $CERT_PEM -export -out keys.encrypted.pkcs12
keytool -importkeystore -srckeystore keys.encrypted.pkcs12 -srcstoretype pkcs12 -destkeystore $KEYSTORE

 このconvert.shをroot権限で実行すると、/var/lib/jenkins/keystoreというファイルができる。ついでにカレントディレクトリにいくつかの中間ファイルができるが、それは削除してOK。

 次にJenkinsのサーバー設定ファイル(Ubuntuなら/etc/default/jenkins)内の「JENKINS_ARGS」付近を以下のように変更する。

HTTPS_KEYSTORE=/var/lib/jenkins/keystore
HTTPS_KEYSTORE_PASSWORD=<適当なパスワード>
HTTPS_PORT=8443
HTTPS_OPT="--httpsKeyStore=$HTTPS_KEYSTORE --httpsKeyStorePassword=$HTTPS_KEYSTORE_PASSWORD --httpsPort=$HTTPS_PORT"

JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT $HTTPS_OPT"

 これでJenkinsを再起動すればhttps://<ホスト名>:8443/での待ち受けが可能。鍵を更新したら毎回この作業が必要なので適当にcronで回すのがよさそう……なんだけど、途中でパスワードの入力を求められるのでそこら辺を自動化しないといけません。