はじめに
社内のjenkinsサーバでrbenvを使うための環境をAnsibleで構築しました。
参考
http://qiita.com/moriokumura/items/36aa573891a6ab17b26d
http://qiita.com/semind/items/8e973a544b592376a07e
要件
- rbenvはシステムワイドにインストール
- jenkinsユーザはログインシェルがない
前提
- gitなど、rbenvインストールおよびrubyをビルドするために必要なパッケージはインストール済み
- jenkins環境は構築済み
- jenkinsユーザの環境変数はjob内で設定
ポイント
- Ansibleのタスクはrootで実行されるので、rbenvの環境変数はrootに設定する
- shellモジュールはデフォルトでは
~/.bash_profile
を読まないので、bash -lc
で環境変数を読み込んでrbenvコマンドを実行する - インストール済みrubyのバージョンをチェックし、指定バージョンをインストール
Sample
ディレクトリ構成
ディレクトリ構成
├── roles
│ └── rbenv
│ └── tasks
│ └── main.yml
├── site.yml
└── vars
└── vars.yml
Role
roles/rbenv/tasks/main.yml
---
- name: does rbenv exist?
stat:
path: "{{ my_vars.middlewares.rbenv.install_dir }}"
register: dir_stat
- name: install rbenv
git:
repo: https://github.com/sstephenson/rbenv.git
dest: "{{ my_vars.middlewares.rbenv.install_dir }}"
when: dir_stat.stat.isdir is not defined and not ansible_check_mode
- name: install ruby-build
git:
repo: https://github.com/sstephenson/ruby-build.git
dest: "{{ my_vars.middlewares.rbenv.install_dir }}/plugins/ruby-build"
when: dir_stat.stat.isdir is not defined and not ansible_check_mode
- name: permit using rbenv to group
file:
path: "{{ my_vars.middlewares.rbenv.install_dir }}"
group: "{{ my_vars.middlewares.rbenv.user_group }}"
mode: "2775"
state: directory
recurse: yes
- name: set env
blockinfile:
dest: /root/.bash_profile
insertafter: '^PATH=\$PATH:\$HOME/bin$'
content: |
export RBENV_ROOT={{ my_vars.middlewares.rbenv.install_dir }}
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
- name: Check rbenv version
shell: bash -lc "rbenv versions | grep {{ my_vars.middlewares.rbenv.ruby_version }}"
register: rbenv_check_install
changed_when: False
ignore_errors: yes
- name: install ruby
shell: bash -lc "rbenv install -v {{ my_vars.middlewares.rbenv.ruby_version }}"
when: rbenv_check_install|failed
- name: rbenv rehash
shell: bash -lc "rbenv rehash {{ my_vars.middlewares.rbenv.ruby_version }}"
when: rbenv_check_install|failed
- name: Check ruby version
shell: bash -lc "rbenv version | grep {{ my_vars.middlewares.rbenv.ruby_version }}"
register: rbenv_check_default
changed_when: False
ignore_errors: yes
- name: Set default ruby version
shell: bash -lc "rbenv global {{ my_vars.middlewares.rbenv.ruby_version }}"
when: rbenv_check_default|failed
vars
vars/vars.yml
---
my_vars:
middlewares:
rbenv:
install_dir: /usr/local/rbenv
ruby_version: 2.1.2
user_group: jenkins
site.yml
site.yml
---
- hosts: targethost
roles:
- role: rbenv
vars_files:
- ./vars/vars.yml
まとめ
権限周りと環境変数設定あたりを修正すれば、通常のユーザ単位のrbenv環境構築にも使えると思います。