複数環境のRedmine/RedMicaをアップデートする


2019/12/20 祝!Redmine4.1リリース!

Redmine Advent Calendar 2019の 24日用の記事です。
Redmineサーバの管理者のお役に立てれば幸いです。
※4.0→4.1へのアップデートに本記事では対応できませんので手動でお願いいたします。

背景・意図

AWS/社内/ローカルと全部で10台以上にRedmineを導入しています。
とにかく、Redmineもプラグインも最新リビジョンにしたい派なのですが、すべてを最新化するのはなかなかの手間。

ここまで増える前は各サーバにメンテナンス用のシェルスクリプトを置いていましたが、

  • スクリプト改修時に全台に配置し直すのが面倒
  • 環境によってRedmineのパスや導入プラグインが違って、微妙にシェルスクリプトを変更するのが面倒
  • 複数のRedmineを1サーバに配置してる環境で実行する際にパスの書き換えで事故ったことも…

ということで、

  • 環境依存の値を変数定義
  • 変数を埋め込んだスクリプトを転送し、リモートで実行

という運用にするためのplaybookを作成しました。1

※シェルスクリプトを使用しないパターンも作成しました。
https://github.com/ryouma-nagare/redmine-update2.git

導入

※git/ansibleがインストール済みであることを前提とします。

1.リポジトリ取得

git clone https://github.com/ryouma-nagare/redmine-update.git
初期ファイル一覧
redmine-update/
|-- README.md
|-- ansible.cfg
|-- host_vars
|   |-- host1
|   `-- host2
|-- inventory
|   `-- hosts
|-- keys
|   `-- your_key_file
|-- redmine-update.yml
`-- roles
    `-- redmine-update
        |-- handlers
        |   `-- main.yml
        |-- tasks
        |   `-- main.yml
        `-- templates
            `-- upd_redmine.sh.j2

2.inventory/hosts の編集

以下の書式で編集します。

[グループ名]
ホスト名  ansible_host=ホスト情報 認証情報

今回はグループ aws :鍵認証*2台、グループ intra :パスワード認証*2台としました。

hosts
[aws]
redmine-aws-1   ansible_host=i-XXXXXXXXXXXXXXXXX ansible_user=ec2-user ansible_private_key_file=./keys/aws.pem
redmine-aws-2   ansible_host=i-YYYYYYYYYYYYYYYYY ansible_user=ec2-user ansible_private_key_file=./keys/aws.pem

[intra]
redmine-intra-1 ansible_host=AAA.BBB.CCC.DDD ansible_user=USER1 ansible_password=PASSWORD1
redmine-intra-2 ansible_host=EEE.FFF.GGG.HHH ansible_user=USER2 ansible_password=PASSWORD2

※AWSは、AWS Systems Manager Session Manager + Session Manager Pluginを使用して、ansible_host をインスタンスIDにしています。

3.keys/ に鍵ファイル配置

|-- keys
|   `-- aws.pem

※パスワードログインのみの場合は不要です。

4.host_vars/ に変数定義ファイル配置

hosts に記述したホスト名=ファイル名として、host1host2からリネームコピーしてください。

|-- host_vars
|   |-- redmine-aws-1
|   |-- redmine-aws-2
|   |-- redmine-intra-1
|   `-- redmine-intra-2

※パラメータ等の詳細はREADME.mdでご確認ください。

実行

全サーバ対象
ansible-playbook -i ./inventory/hosts redmine-update.yml
グループ指定で実行
ansible-playbook -i ./inventory/hosts redmine-update.yml -l aws
ホスト指定で実行
ansible-playbook -i ./inventory/hosts redmine-update.yml -l redmine-aws-1

基本的にはスクリプト実行後のサービス再起動がエラーにならなければ、アップデートに成功していると思いますが、不安なサーバはdebug_stdoutdebud_stderrtrueにして、スクリプトの出力を確認してください。

実行例

host_vars/redmine-aws-1
debug_stdout: false
debug_stderr: true

として、ホスト指定した結果です。

※stderrが出力されていますがエラーが起きているわけではありません。

実際に使用する場合は、

  • stdout/stderrを有効にした検証用のホストorグループに対して実行
  • エラーにならなければ残りのグループごとに実行

とするのがよいかと思います。

明日はアドベントカレンダーの最終日

いよいよ、トリをつとめる Maeda Goさんです!


  1. redmine ディレクトリのオーナー/グループを apache:apache としているため、シェルスクリプト内でsudo su - に頼らざるをえず、パスワード無しのsudo設定が必要となっています…