JenkinsからAnsibleにパラメータを渡してジョブを実行する

前田です。
最近は継続的インテグレーションツールにJenkinsを使っています。
今までずっとCircleCIを使ってきたので、UIなどにまだ全然慣れていないですが、少しずつ覚えていっています。

現在扱っているシステムは下記のような感じで、JenkinsからAnsibleを使ってサーバの環境構築やデプロイをしています。

アプリケーションやAnsibleなどの構成管理のソースコードはGitHubなどで管理していることが多いと思いますが、DBの接続情報などの環境によって値が変わったり、セキュアにしなければいけないパラメータなどは、直接ソースコードに記載するのではなく、JenkinsやCircleCIなどのインテグレーションサービスにパラメータを設定し、デプロイ時に動的にセットしてあげるのがセオリーだと思います。
JenkinsからAnsible(Jenkins Ansible plugin使用)でサーバの環境構築をする際に、サーバやアプリケーション固有の情報(DBの接続情報など)を構築対象のサーバに渡してあげる為、どうやって渡すかの方法を色々調査しましたので、その方法を書きたいと思います。

環境 バージョン
Jenkins version 1.645
Jenkins Ansible Plugin 0.6.2

Jenkinsのパラメータ設定

Jenkinsのパラメータは、全ジョブ全体のグローバルパラメータと、ジョブ毎のパラメータがあります。
それぞれで同じ名前を設定した場合は、ジョブ毎のパラメータが優先されます。
ケースによって、どちらかに値を設定します。

グローバルパラメータの設定方法

Jenkinsトップ -> Jenkinsの管理 -> システムの設定 -> グローバルプロパティの「環境変数」チェックボックス

「追加」ボタンをクリックして、設定したいパラメータを設定していきます。

ジョブ毎のパラメータの設定方法

Jenkinsトップ -> 設定したいジョブを選択 -> 設定 -> 「ビルドのパラメータ化」チェックボックス

「パラメータの追加」 -> 「文字列」を選択し、「名前」にキー、「デフォルト値」に渡したいパラメータを設定していきます。

Ansibleジョブの設定

次にAnsible実行時にパラメータをセットする方法です。

Jenkinsトップ -> 設定したいジョブを選択 -> 設定 -> invoke Ansible Playbook -> 高度な設定

Additional parametersに下記のようにパラメータを追加します。
--extra-vars '{"db_host":"${DB_HOST}"}'

この設定は、Jenkinsのグローバルパラメータやジョブ毎のパラメータに設定したDB_HOSTというパラメータを受け取り、Ansible側のdb_hostパラメータを上書いてAnsibleを実行します。


以上、簡単ですが「JenkinsからAnsibleにパラメータを渡して環境構築する方法」でした。
完全に個人的な目線ですが、Jenkinsは色々クセがあって、CircleCIなどのようには直感的に動かせないところがつらいですが、自由度はかなり高そうなので、色々触ってみると面白いかもと思っています。

参考 : How to pass parameter from Jenkins job to Ansible playbook

このエントリーをはてなブックマークに追加