Advertisement
Advertisement

More Related Content

Similar to Redmine Ansible(20)

Advertisement

Redmine Ansible

  1. インターネット非接続環境で、 Redmine & Subversion の インストール&設定を、 Ansible を使って自動化してみた 第8回 redmine.tokyo 勉強会 2015-05-16 (土) 伊藤 喜一 (@glad2121)
  2. 自己紹介 • ハンドルネーム: GLAD!! (@glad2121) • 氏名: 伊藤 喜一(いとう よしいち) • 所属: 株式会社オージス総研 エンタープライズオープンソースセンター (EOSC) • 主な仕事: ▫ アーキテクトとして案件の立ち上げと支援 ▫ OSS を活用したビジネスの拡大 2
  3. 1年前 • とあるお客様(銀行)で、開発ツール(Redmine、 Subversion、Jenkins 等)の導入・標準化支援をする ことに 3
  4. インストールをどうしようか・・・ • ALMinium ▫ https://github.com/alminium/alminium ▫ Redmine、Subversion、Jenkins、Backlogs プラグイン 等のインストールが簡単にできる ▫ インターネット接続が必要 ⇒ 断念 • Redmine JP のインストール手順 ▫ http://redmine.jp/install/ ▫ これもインターネット接続が必要 ⇒ 断念 • BitNami Redmine Stack ▫ https://bitnami.com/stack/redmine ▫ スタンドアローンで実行可能 ⇒ 採用 4
  5. BitNami Redmine Stack の特徴 • プラットフォーム ▫ Linux、Windows、OS X、VMware、Clouds • メリット ▫ Apache、MySQL、Ruby on Rails など必要なもの一式 がインストールされる • デメリット、問題点 ▫ Linux 版はサービスとして登録されない ▫ Subversion は svnserve (svn://) が起動しており、 Apache と連携 (http://) していない ▫ Windows 版 Apache 2.4 が mod_perl に対応しておら ず、Redmine.pm によるアカウントの連携ができない 5
  6. 案件の方は・・・ • Redmine 採用プロジェクトの増加、社内標準化 • 商用構成管理ツールから Subversion への移行 • お客様の状況や要望に応えたカスタマイズ • 独自プラグインも作成 ⇒ サーバーを何台もセットアップするのは面倒 6
  7. インストール作業を自動化したい 1. BitNami Redmine Stack のインストール 2. Redmine の初期設定 3. Redmine のパッチ(カスタマイズ)適用 4. Redmine のプラグインのインストール Banner、SCM Creator、Issue Importer、 Wiki Extensions、独自プラグイン、etc. 5. Redmine のテーマのインストール 6. Subversion と Redmine のアカウント連携 7. LDAP 認証の設定 8. バックアップ、ログローテーションの設定 7
  8. サーバー構成管理ツール? • サーバーの構成情報を管理し、構築を自動化する ツール 8 構成管理ツール 実行環境 管理対象サーバー 管理対象サーバー 管理対象サーバー 構成情報 - Redmine - 初期設定 - Subversion - etc. Redmine 初期設定 Subversion etc.
  9. Ansible vs Chef 9 Ansible Chef 実行環境 Python 2.6 以上 Ruby 構成情報の 記述 YAML で記述 比較的シンプル Playbook DSL (Ruby) で記述 若干複雑 Cookbook、Recipe 管理対象 サーバー エージェントの インストール不要 Python が動作し、SSH で接続できればOK エージェントの インストールが必要 chef-client chef-solo アーキテクチャ Push 型 Pull 型 共有リポジトリ Ansible Galaxy Supermarket
  10. BitNami インストーラの自動起動 • installer --help でオプションが確認できる ▫ --mode unattended :非対話形式で実行 ▫ --prefix <dir> :インストールディレクトリ ▫ --base_user<user> :管理者アカウント ▫ --redmine_language <lang> :使用言語 ▫ --optionfile <file> :オプションをファイルに記述 • ところが・・・ 肝心な --redmine_language ja が効かない ⇒ しかたがないので、非対話形式での実行を断念 10
  11. expect • 対話形式のプログラムを 自動実行するためのツール • Tcl 言語を拡張 • expect <pattern> で 指定の出力を待って、 send <text> で 自動入力を行う 11 #!/usr/bin/expect -- set installer [lindex $argv 0] set optionfile [lindex $argv 1] spawn $installer --optionfile $optionfile while {1} { expect { "Please choose an option ?4] :" { send “9¥n“ } "Press ?Enter] to continue:" { send “¥n“ break } … "]:" { send "¥n“ } } } 4 (English)? と聞かれたら、 9 (Japanese) と訂正する 最後の質問で、 ループを抜ける
  12. Ansible のインストール 1. yum downloadonly プラグインのインストール # yum install yum-plugin-downloadonly 2. RPM ファイルのダウンロード # yum install ansible --downloadonly --downloaddir=<directory> 3. createrepo のインストール # yum install createrepo 4. ローカルリポジトリの作成 # createrepo <repodir> 5. ZIP に固めてサーバーへ 6. .repo ファイルの作成 eg. /etc/yum.repos.di/local.repo 7. Ansible のインストール # yum install ansible –disablerepo=* --enablerepo=local ※ ローカルリポジトリが作成できれば、BitNami じゃなくてもいいんだけどね (^^;) 12 [local] name=Local baseurl=file:///var/local/repo
  13. Ansible の基本概念 • Inventory ファイル ▫ 管理対象のサーバーを記述したファイル ▫ サーバーの用途、種類などでグルーピングが可能 • Playbook ▫ サーバーの構成情報、構築手順を記述したもの ▫ 1ファイルでも記述できるが、分割も可能 • Role ▫ サーバーが持つ役割ごとに、構成情報、構築手順を まとめたもの、再利用の単位になる 13
  14. Ansible の基本的なモジュール • copy ▫ ファイルを管理対象サーバーへコピーする • template ▫ テンプレートを元にファイルを作成する • file ▫ ファイルの所有者、モードの変更、ディレクトリの作成など • lineinfile / replace ▫ 管理対象サーバー上のファイルを編集する • service ▫ サービスの起動、停止、再起動など • command ▫ 任意のコマンドを実行する、パイプやリダイレクトは利用不可 • shell ▫ 任意のコマンドを実行する、パイプやリダイレクトも利用可能 14
  15. Playbook の作成 15 --- - hosts: redmine-servers sudo: yes pre_tasks: - debug: var=bitnami_home roles: - common - expect - bitnami - redmine-settings - redmine-patches - redmine-plugins - redmine-themes - subversion bitnami-redmine.yml - roles/ - common/ - expect/ - bitnami/ - tasks/ - main.yml - handlers/ - files/ - templates/ - redmine-settings/ … - name: copy installer copy: … - name: install bitnami-redmine command: …
  16. Playbook の実行 • よく使うオプション ▫ -i <inventory> :インベントリファイルの指定 ▫ -v :詳細表示 ▫ -k :SSH パスワードの問合せ(プロンプトを表示) ▫ -K :sudo パスワードの問合せ(プロンプトを表示) ▫ -u <user> :リモートユーザーの指定 ▫ --check :チェックモード(実際の変更は行われない) • こんな感じで実行 ansible-playbook bitnami-redmine.yml –i hosts –vkK • 何回実行しても OK(冪等性) 16
  17. Tips: DB パスワードの取得 • database.yml に記載されているパスワードを取得する • grep | sed ⇒ register ⇒ set_fact • チェックモード (--check) でも実行&変更扱いしない - name: get bitnami mysql password shell: >- grep -E '^¥s+password¥:¥s+¥w+' {{ redmine_home }}/config/database.yml | sed -E 's/¥s+password¥:¥s+//' always_run: yes register: bitnami_mysql_password_result changed_when: false - name: set bitnami_mysql_password set_fact: bitnami_mysql_password: "{{ bitnami_mysql_password_result.stdout }}" 17
  18. Tips: Redmine の設定変更 • Rake タスクで DB を変更(でよい?) • $REDMINE_HOME/lib/tasks/redmine_setup.rake を作成 • 普通に Redmine (Rails) の model が使用できる • 設定の変更は Setting[key] = value で OK • $REDMINE_HOME で以下のコマンドを実行 bundle exec rake redmine_setup RAILS_ENV=production 18 desc "Setup Redmine." task :redmine_setup => :environment do Setting[:repositories_encodings] = 'utf-8,cp932,euc-jp' Setting[:user_format] = :lastname_firstname … end
  19. まとめ • Ansible はシンプル! • インターネット非接続環境でも使える! • 一度 Playbook を作成すれば、構成の変更やサーバー の追加が簡単! 19
  20. 参考: Redmine 関連① • Redmine ▫ http://www.redmine.org • Redmine JP ▫ http://redmine.jp • BitNami Redmine Stack ▫ https://bitnami.com/stack/redmine • BitNami Redmine Documentation ▫ https://wiki.bitnami.com/Applications/BitNami_Redmine • ALMinium ▫ https://github.com/alminium/alminium • Redmine SCM Creator ▫ http://projects.andriylesyuk.com/project/redmine/scm- creator 20
  21. 参考: Redmine 関連② • BitNami Redmine 2.4.2 初期設定 ▫ http://ossfan.net/setup/redmine-02.html • Subversion の Apache 経由アクセスの設定 ▫ http://sc1h5r.cswiki.jp/index.php?SubversionのApache経由 アクセスの設定 • 閉鎖環境で Redmine をインストールする ▫ https://github.com/glad2121/bitnami-redmine-ext/wiki • Rails でバッチ処理を作成してみる(Rake のタスクの場合) ▫ http://d.hatena.ne.jp/yk5656/20140803/1407569988 21
  22. 参考: Ansible 関連 • Ansible ▫ http://www.ansible.com • Ansible Documentation ▫ http://docs.ansible.com • Ansible チュートリアル ▫ http://yteraoka.github.io/ansible-tutorial/ • 構成管理ツール Ansible を使ってみる ▫ http://dev.classmethod.jp/tool/ansible/ • Ansible マジック変数の一覧と内容 ▫ http://qiita.com/h2suzuki/items/15609e0de4a2402803e9 • Ansible 入門 ▫ http://dotinstall.com/lessons/basic_ansible 22
  23. 参考: その他 • Expect 入門 ▫ http://nsa.kpu-m.ac.jp/gijutu/expect/doc-expect.php • yum を使用して、パッケージをインストールせずにダウンロードだけ を行う方法 ▫ https://access.redhat.com/ja/node/395763 • yum リポジトリのセットアップ方法 (createrepo) ▫ http://darutk-oboegaki.blogspot.jp/2012/11/yum.html • sed コマンド ▫ http://hydrocul.github.io/wiki/commands/sed.html 23
  24. 24 ご清聴どうもありがとうございました。 本日の発表の成果物はこちら https://github.com/glad2121/bitnami-ansible
Advertisement