LoginSignup
8
10

More than 5 years have passed since last update.

Ansibleでsystem wideなrbenv環境を構築する(for jenkins)

Posted at

はじめに

社内の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環境構築にも使えると思います。

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10