karlmdavis.jenkins2
Ansibleロール:Jenkins 2+
このAnsibleロールは、Jenkins 2のインストールと管理に使用できます。
要件
このロールには、Ansible 2.4以上が必要です。また、管理されるシステムにAnsibleのパイプライン機能またはsetfacl
が必要です(詳細は非特権ユーザーになるを参照)。
このロールは現在、Ubuntu 14.04(Trusty)とUbuntu 16.04(Xenial)をサポートしています。他のプラットフォームのサポートも歓迎します!
ロール変数
このロールは、以下の変数をサポートしています。デフォルト値はdefaults/main.ymlに記載されています。
jenkins_release_line
:'weekly'
long_term_support
に設定すると、JenkinsのLTSリリースがインストールされます。weekly
に設定すると、Jenkinsの週次リリースがインストールされます。
jenkins_release_update
:true
true
の場合、ロールの実行時にJenkinsパッケージが最新のバージョンにアップグレードされます。
jenkins_home
:/var/lib/jenkins
- Jenkinsデータが保存されるディレクトリです。
- Jenkinsインストーラーの制限により、
jenkins
サービスアカウントはデフォルトのホームディレクトリを使用します。これはSSHキーに関してのみ関係します。
jenkins_port
:8080
- JenkinsがHTTPリクエスト用に実行されるポートです。
- 多くのシステムでは、この値は1024以上である必要があります。なぜなら、Jenkinsは
root
として実行されないからです。
jenkins_context_path
:''
- Jenkinsがホストされるコンテキストパスです。例えば、
http://localhost:8080/foo
の/foo
などです。ルートパスでホストするには''
のままにします。
- Jenkinsがホストされるコンテキストパスです。例えば、
jenkins_url_external
:''
- ユーザーがJenkinsにアクセスするために使用する外部URLです。Jenkinsの設定に設定され、メールやWebhookなどで使用されます。
- これが空のままの場合、設定は行われず、Jenkinsは自動的にこれを検出しようとします(プロキシを使用している場合には正しく機能しません)。
jenkins_admin_username
: (未定義)jenkins_admin_username
またはjenkins_admin_password
のいずれかが定義されている場合、両方が必要です。- この変数をオーバーライドして、各可能なセキュリティ領域に使用すべきJenkins管理者の資格情報を指定します。
- 未定義のままにした場合、ロールは匿名認証を使用しようとします。
- このロールは、Jenkinsが匿名認証を許可するように設定されている場合(インストール直後です)を自動的に検出し、適切に処理します。
jenkins_admin_password
: (未定義)jenkins_admin_username
またはjenkins_admin_password
のいずれかが定義されている場合、両方が必要です。- この変数をオーバーライドして、各可能なセキュリティ領域に使用すべきJenkins管理者の資格情報を指定します。
jenkins_session_timeout
:30
- Jenkinsセッションがタイムアウトするまでの分数、つまりログインが有効な時間です。
- デフォルトは30分です。
0
に設定すると、タイムアウトしなくなります。
jenkins_plugins_extra
:[]
- この変数をオーバーライドして、追加のJenkinsプラグインをインストールします。
- これらは、Jenkins 2の新しいセットアップウィザードによって自動的にインストールされる推奨プラグインに加えてインストールされます(defaults/main.yml内の
jenkins_plugins_recommended
を参照)。
jenkins_plugins_timeout
:60
- プラグインのインストール/アップデートが失敗するまでの時間(秒単位)です。この値は
jenkins_plugin
モジュールのタイムアウトパラメータに渡されます(詳細はここを参照: http://docs.ansible.com/ansible/latest/jenkins_plugin_module.html#options)。
- プラグインのインストール/アップデートが失敗するまでの時間(秒単位)です。この値は
jenkins_plugins_update
:true
true
の場合、ロールが実行されるときにJenkinsプラグインが更新されます(不足しているプラグインは常にインストールされます)。
jenkins_java_args_extra
:''
- Jenkinsプロセスの
JAVA_ARGS
に追加されるオプションです。例えば、JVMメモリ設定-Xmx4g
などです。
- Jenkinsプロセスの
jenkins_http_proxy_server
,jenkins_http_proxy_port
,jenkins_http_proxy_no_proxy_hosts
: (すべて未定義)- これらはJVMの
http.proxyHost
、http.proxyPort
、http.nonProxyHosts
システムプロパティと同じ機能を持ち、HTTPおよびHTTPSリクエストの両方に使用される設定です。 - 具体的には、これらの設定は以下のように使用されます:
- Jenkins JVMの
http.proxyHost
、http.proxyPort
、https.proxyHost
、https.proxyPort
、http.nonProxyHosts
システムプロパティ(Java Networking and Proxiesを参照)を設定します。 - 一部のプラグインが必要とするJenkins固有のプロキシ設定(GitHubプラグインなど)を設定します。詳細はJenkinsBehindProxyを参照してください。
jenkins_http_proxy_no_proxy_hosts
の値はリストで、例えば['localhost', 'example.com']
のように設定する必要があります。
- Jenkins JVMの
- これらはJVMの
依存関係
このロールには他のAnsibleロールの直接的な依存関係はありません。ただし、Java JREがシステムパスで利用可能である必要があります。
例プレイブック
このロールは、以下のようにインストールできます:
$ ansible-galaxy install karlmdavis.jenkins2
このロールは、以下のように適用できます:
- hosts: some_box
tasks:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
jenkins_plugins_extra:
- github-oauth
Jenkinsを構成するためのGroovyスクリプトの実行
Jenkinsをインストールした後、JenkinsをさらにカスタマイズするためにGroovyスクリプトをAnsible経由で実行できます。
例えば、Jenkinsをインストールして、HudsonPrivateSecurityRealm
を使用するように構成する方法は次のとおりです:
- hosts: some_box
tasks:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
# 初回実行時に必要ありませんが、以前の実行(以下のセキュリティが有効にされた後)には必要です。
jenkins_admin_username: test
jenkins_admin_password: supersecret
# Jenkinsが必要に応じて再起動されたことを確認します。
- meta: flush_handlers
# Jenkinsローカルアカウントを使用するようにセキュリティを構成します。
- name: セキュリティの構成
jenkins_script:
url: "{{ jenkins_url_local }}"
user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
script: |
// これはJenkinsのインタラクティブスクリプトコンソールが自動的に含む基本的なインポートです。
import jenkins.*;
import jenkins.model.*;
import hudson.*;
import hudson.model.*;
// 認証を管理するセキュリティレルムを構成します。
def securityRealm = new hudson.security.HudsonPrivateSecurityRealm(false)
if(!securityRealm.equals(Jenkins.instance.getSecurityRealm())) {
Jenkins.instance.setSecurityRealm(securityRealm)
// ログインするためのユーザーを作成します。ユーザーはシステムローカルの`jenkins`ユーザーのSSHキーにバインドされていることを確認します。
def testUser = securityRealm.createAccount("test", "supersecret")
testUser.addProperty(new hudson.tasks.Mailer.UserProperty("[email protected]"));
testUser.save()
Jenkins.instance.save()
println "認証を変更しました。"
}
// 誰が何をできるかを指定する認可戦略を構成します。
def authorizationStrategy = new hudson.security.FullControlOnceLoggedInAuthorizationStrategy()
if(!authorizationStrategy.equals(Jenkins.instance.getAuthorizationStrategy())) {
authorizationStrategy.setAllowAnonymousRead(false)
Jenkins.instance.setAuthorizationStrategy(authorizationStrategy)
Jenkins.instance.save()
println "認可を変更しました。"
}
register: shell_jenkins_security
changed_when: "(shell_jenkins_security | success) and 'Changed' not in shell_jenkins_security.stdout"
または、Groovyスクリプトを別のファイルとして保存し、以下のようにlookup(...)
を使用して読み込むこともできます:
- hosts: some_box
tasks:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
# 初回実行時に必要ありませんが、以前の実行(以下のセキュリティが有効にされた後)には必要です。
jenkins_admin_username: test
jenkins_admin_password: supersecret
# Jenkinsが必要に応じて再起動されたことを確認します。
- meta: flush_handlers
# Jenkinsローカルアカウントを使用するようにセキュリティを構成します。
- name: セキュリティの構成
jenkins_script:
url: "{{ jenkins_url_local }}"
user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
script: "{{ lookup('template', 'templates/jenkins_security.groovy.j2') }}"
ライセンス
このプロジェクトは、全世界でパブリックドメインにあります。CONTRIBUTINGに明記されているように:
このプロジェクトは、アメリカ合衆国においてパブリックドメインにあり、作品に関する著作権および関連権利は、CC0 1.0 Universal public domain dedicationを通じて放棄されます。
このプロジェクトへのすべての貢献は、CC0の献身の下にリリースされます。プルリクエストを送信することで、著作権権益の放棄に従うことに同意します。
著者情報
このプラグインは、Karl M. Davis(https://justdavis.com/karl/)によって作成されました。
ansible-galaxy install karlmdavis.jenkins2