もくじ
- 背景
- Groovyとは
- init.groovy.d を書いてみる
- 実行ログが見てみたい
- Ansibleでgroovyをデプロイしてみる
- Ansibleにjenkins_script_moduleというものがあるらしい
- 参考
背景
Jenkinsのプラグインの設定とかをAnsibleで管理したいないという要望はあるかと思います。Jenkinsを立てるたびにプラグインをポチポチ入れるのは面倒。ではどうしようと行った時に、groovyでinitスクリプトを書くという方法があることを知りました。
Groovyとは
Java系のプログラミング言語です。Jenkinsのいろんなところで使えます。
例えば、/var/lib/jenkins/init.groovy.d/
ディレクトリ以下に Groovy で書かれたファイルを置いておくと、Jenkins起動時に実行してくれます。
init.groovy.d を書いてみる
今回使用したJenkinsのバージョンは 2.89.3 です
以下の記事を参考にしながら「プラグインのインストールを実施する」やつを書きます。
以下のファイルを、 /var/lib/jenkins/init.groovy.d/init.groovy
とかに置きます。
import jenkins.model.* def instance = Jenkins.getInstance() def plugins = ["workflow-aggregator"] pm = instance.getPluginManager() uc = instance.getUpdateCenter() uc.updateAllSites() def enablePlugin(pluginName) { if (! pm.getPlugin(pluginName)) { deployment = uc.getPlugin(pluginName).deploy(true) deployment.get() } def plugin = pm.getPlugin(pluginName) if (! plugin.isEnabled()) { plugin.enable() } plugin.getDependencies().each { enablePlugin(it.shortName) } } plugins.each { def plugin = pm.getPlugin(it) enablePlugin(it) }
Jenkinsを再起動します。
service jenkins restart
実行ログが見てみたい
init.groovy
がうまく行かなかった場合など、実行ログが見たい場合があるかと思います。
/var/log/jenkins/jenkins.log
がログファイルなので、service restartしてこのログを見てみるといいでしょう。
groovyの中で print("hogehoge")
などと書くとそのままログが出力されるので、これらを使って原因箇所を特定するのがいいかも。
Ansibleでgroovyをデプロイしてみる
こういった初期化用のスクリプトはAnsibleを使って管理したいもの。 roles/jenkins/files/init.groovy
とかに上記initスクリプトを置いて、 roles/jenkins/tasks/
で以下のように定義してデプロイしてみます。
- name: create init script directory file: path: /var/lib/jenkins/init.groovy.d state: directory owner: jenkins group: jenkins - name: deploy init.groovy copy: src: InstallPlugin.groovy dest: /var/lib/jenkins/init.groovy.d/init.groovy owner: jenkins group: jenkins mode: 0755 - name: jenkinsをrestartして設定を反映 service: name=jenkins state=restarted
init.groovy.d
ディレクトリを作成したうえで、スクリプトを配置し、jenkinsをrestartすることでスクリプトが実行されてプラグインがインストールされます。
実物は以下のリポジトリにあるのでみてみてください。
Ansibleにjenkins_script_moduleというものがあるらしい
Ansibleのjenkins_script_moduleというのがあり、groovyを手動で配置するよりも、こういったものを使ったほうが綺麗にAnsibleが書けるかもしれません。
jenkins_script - Executes a groovy script in the jenkins instance — Ansible Documentation
今度詳しく調べてみようかと思います。