はじめに
- 1年ぶりにjenkins本体のバージョンを最新(2.286)まで一気に更新したところ、大ハマリしたので問題と対処法をメモしておく
- 環境はEC2(Amazon Linux 2)上に構築したものとする
(1) java.lang.IllegalStateException: An attempt to save the global configuration was made before it was loaded
状況
- jenkins再起動後にこのエラーが出て何もできない状態になる
- プラグインのバージョンを上げずに、jenkins本体のバージョンを最新まで上げてしまった場合に起こる模様
対策
- jenkinsを安定版の2.263に一旦ダウングレードして再起動(a)
- ここですんなり起動すれば問題ないものの、今回は次の(2)の問題が発生
sudo yum downgrade jenkins-2.263
sudo systemctl restart jenkins
- 再起動後、GUI上でプラグインのバージョンを上げる
- プラグインのバージョンアップ後に再度jenkinsを最新版までバージョンアップし、再起動
sudo yum install jenkins
sudo systemctl restart jenkins
(2) com.thoughtworks.xstream.mapper.CannotResolveClassException: hudson.security.LDAPSecurityRealm
状況
- jenkins再起動後にこのエラーが出て何もできない状態になる
- (1)の(a)でダウングレード後に発生
対策
-
/var/lib/jenkins/config.xml
のバックアップを取っておく
-
/var/lib/jenkins/config.xml
の <securityRealm ...>...</securityRealm>
を削除する
- 今回はLDAP認証の設定なので、これにより既存ユーザとしてはログインできなくなる
- (role-strategyで運用している場合)匿名ユーザにadminロールを一時的に付ける
-
/var/lib/jenkins/config.xml
の <authorizationStrategy ...>
のうち、adminロールのassignedSIDsに <sid>anonymous</sid>
を追加する
<authorizationStrategy class="com.michelin.cio.hudson.plugins.rolestrategy.RoleBasedAuthorizationStrategy">
[...]
<role name="admin" pattern=".*">
<permissions>
[...]
</permissions>
<assignedSIDs>
<sid>anonymous</sid>
[...]
</assignedSIDs>
</role>
[...]
</authorizationStrategy>
-
/var/lib/jenkins/config.xml
を編集したら再起動し、(1)の(a)に戻る
参考: https://stackoverflow.com/questions/55742680/jenkins-fails-to-start-after-restart-due-to-com-thoughtworks-xstream-mapper-cann
(3) jenkins slave(agent)とのJNLP接続が切れる
状況
- jenkins slaveとの接続が全て切れている
対策
- グローバルセキュリティの設定のうち、agent用のポート(TCP port for inbound agents)が無効になっていないか確認
- jenkins slaveホスト側のjnlpUrlを確認して変更
- 旧:
"java ... -jnlpUrl http://{host}/computer/agent_name/slave-agent.jnlp"
- 新:
"java ... -jnlpUrl http://{host}/computer/agent_name/jenkins-agent.jnlp"
- ポリコレの流れでmaster/slaveという用語の見直しがあったためと思われる
- jnlpUrlの変更後、JNLP接続を張り直す
参考: https://issues.jenkins.io/browse/JENKINS-35452