読者です 読者をやめる 読者になる 読者になる

spring of life

技術、ときどき日常のブログ(予定)

chef で jenkins 環境構築

jenkins の環境構築を chef でできないかな〜といろいろ調べてある程度できたのでメモ

jenkins のインストール

remote_file node[:jenkins][:rpm_path] do
  source node[:jenkins][:rpm_url]
  owner 'root'
  group 'root'
  mode 0755
  not_if { File.exists?(node[:jenkins][:rpm_path]) }
end

package 'jenkins' do
  source node[:jenkins][:rpm_path]
  not_if 'rpm -q jenkins'
end

アカウント作成

  • ここからが少し面倒だった。。。
  • jenkins には WebAPI とか CLI があるみたいで、今回は CLI を使った
  • chef の中でコマンド実行することでアカウントを作成
  • まず、jenkins-cli.jar をダウンロード( http://localhost:8080/jnlpJars/jenkins-cli.jar にアクセス)
  • groovy を使ってアカウントを作成
    • groovy = とすることで標準入力を受け付けれる
  • 最初は管理者しかいないので、ユーザー名とパスワードは管理者のものを使用
    • パスワードは/var/lib/jenkins/secrets/initialAdminPasswordに書かれている
    • --passwordオプションもあるが、インストール前だともちろんファイルはなく、chef でインストールから始める場合にファイルがなくエラーになるのでファイルを指定するようにしておく
remote_file node[:jenkins][:cli_path] do
  source node[:jenkins][:cli_url]
  owner 'root'
  group 'root'
  mode 0755
  not_if { File.exists?(node[:jenkins][:cli_path]) }
end

execute 'create account' do
  command <<-"EOF"
echo 'jenkins.model.Jenkins.instance.securityRealm.createAccount("<id>", "<password>")' |
java -jar #{node[:jenkins][:cli_path]} -s #{node[:jenkins][:host]} groovy = --username=admin --password-file=</path/to/password-file>
  EOF
  user 'root'
end

プラグインインストール

  • これも CLI を使ってインストール
  • install-pluginというコマンドを使う
execute 'install plugin' do
  command <<-"EOF"
java -jar #{node[:jenkins][:cli_path]} -s #{node[:jenkins][:host]} install-plugin <プラグイン名(git とか)> --username=<ユーザー名> --password=<パスワード>
  EOF
  user 'root'
end

ジョブ作成

  • これは1度config.xmlを作っとかないと無理。。。
  • 自分の場合は既に手作業で作った jenkins があったので、/var/lib/jenkins/jobs/<ジョブ名>/config.xmlをコピーして chef のリポジトリの中に入れておくことにした
    • まぁこうしとけば、あとは別のサーバーで作る時は自動で作れるので一応便利、かな。。。
execute 'create job' do
  command <<-EOF
cat /path/to/config.xml |
java -jar #{node[:jenkins][:cli_path]} -s #{node[:jenkins][:host]} create-job <ジョブ名> --username=<ユーザー名> --password=<パスワード>
  EOF
  user 'root'
end

とりあえず今回はここまで自動化した!

おまけ

  • jenkins でパスワードなしで sudo 権限を使いたい場合は/etc/sudoers.d以下に↓みたいな設定ファイルを追加しておく
jenkins        ALL=(ALL)        NOPASSWD: ALL