- はじめに
- 環境
- java-openjdk11のインストール
- セットアップウィザードの無効化
- ログインの有効(設定の変更)
- initialAdminPasswordの取得
- プラグインのインストール
- 認証情報の登録
- ノードの登録
- 備考
はじめに
DockerやAnsibleは使わず、terraformのfileやremort-exce、local-exceを組み合わせて自動構築します。
Jenkinsを使って何かを自動構築するのではなく、Jenkinsサーバを自動構築する記事です。
環境
java-openjdk11のインストール
OSがAmazon Linux 2なので、以下コマンドでインストールします。
Amazon Correttoでもいいかもしれません。
$ sudo yum upgrade -y $ sudo amazon-linux-extras install -y java-openjdk11
セットアップウィザードの無効化
色々調べたのですが、Jenkinsのバージョンによって設定方法が変わるようです。
jenkins.service.d、override.confを作成し、 daemon-reload、およびサービスをリスタートします。 ただし、ログインが無効になりID/Passwordの入力無しになるので、後でそれらを有効にします。
$ pwd /etc/systemd/system/jenkins.service.d $ cat override.conf [Service] Environment="JAVA_OPTS=-Djenkins.install.runSetupWizard=false" $ sudo systemctl daemon-reload $ sudo systemctl restart jenkins
ログインの有効(設定の変更)
/var/lib/jenkins/config.xmlを入れ替え、サービスをリスタートします。
ログインのほか、各設定を有効・無効にしたものを用意しておくと手間が減るので、
それらを設定したJenkinsからコピーしておくと良いです。
initialAdminPasswordの取得
Jenkinsサーバにログインして確認するのは面倒なので、local-execで取得します。
provisioner "local-exec" { working_dir = "${path.root}/" interpreter = ["/usr/bin/bash", "-c"] command = <<-EOT echo $(ssh -o StrictHostKeyChecking=no -i key.pem ec2-user@IPアドレス "sudo cat /var/lib/jenkins/secrets/initialAdminPassword") > initialAdminPassword.txt EOT }
初回起動時にセットアップウィザードを無効にすると、ファイルinitialAdminPasswordが作成されませんでした。
そのため、セットアップウィザードを有効にした状態で初回起動した後(initialAdminPasswordの作成)、セットアップウィザードを無効にして起動しなおしました。
initialAdminPasswordの作成方法か、それを知る手順があればあればぜひ教えてください。
プラグインのインストール
セットアップウィザードを無効にしているため、そこでインストールを提案されるプラグインは入っていません。
必要なプラグインをインストールし、サービスをリスタートしてプラグインを有効化します。
なお、credencialsなどを入れていないと、ノード追加の認証方法はagent.jarによる接続しか選べませんでした。
$ sudo java -jar jenkins-cli.jar -s http://localhost:8080 -auth ユーザ名:パスワード install-plugin プラグイン名 $ sudo systemctl restart jenkins
プラグインを複数まとめてインストールしたい場合は、昨日の記事を参考にしてください。
認証情報の登録
STOREやDomainはデフォルトのまま、鍵認証とします。
Jenkins CLIを使って認証情報(credentials.xml)をインポートしますが、credentials.xmlは手動で登録したJenkinsからエクスポートすると楽に用意できます。
その際、鍵は暗号化されているためインポート前に書き換えます。
認証情報のエクスポート $ sudo java -jar jenkins-cli.jar -s http://localhost:8080 -auth ユーザ名:パスワード list-credentials-as-xml system::system::jenkins
鍵の書き換え chompを付けて最終行の改行を削除しないと、登録できませんでした provisioner "file" { content = templatefile("${path.root}/credentials.xml", {KEY_PEM=chomp(鍵)}) destination = "/tmp/credentials.xml" }
認証情報のインポート $ cat /tmp/credentials.xml | sudo java -jar jenkins-cli.jar -s http://localhost:8080 -auth ユーザ名:パスワード import-credentials-as-xml system::system::jenkins
Jenkins CLIには、importではなく、createコマンドもあります。
ノードの登録
認証情報と同様の手順です。
手動でノードを登録した後、ノードの設定ファイルをエクスポートして用意し、IPアドレスなどを書き換えてからインポートします。
ノード設定ファイルの取得 $ sudo java -jar jenkins-cli.jar -s http://localhost:8080 -auth ユーザ名:パスワード get-node ノード名
IPアドレスの書き換え 固定ではないので変数を指定していますが、確か改行が入ったのでchompで消します provisioner "file" { content = templatefile("${path.root}/ノード名.xml", {NODE_IP=chomp(IPアドレス)}) destination = "/tmp/ノード名.xml" }
ノードの登録 $ cat /tmp/ノード名.xml | sudo java -jar jenkins-cli.jar -s http://localhost:8080 -auth ユーザ名:パスワード create-node ノード名
備考
Jenkins CLIでlogin、logoutコマンドはこのバージョンだと使えませんでした。
EC2で立てているので様々な情報を変数に置き換え、ノード数も可変にしたので、整理もかねて投稿!
DockerやAnsibleが使えたら楽だったかも。まぁでも、おかげで知見が増えたなぁ。