更新Redmine/RedMica在多個環境中
2019年12月20日,祝贺!Redmine4.1发布!
这是为了 Redmine 星空日历 2019 年 24 日而写的文章。
如果对 Redmine 服务器管理员有所帮助,我会感到幸福。
※本文无法处理从 4.0 升级到 4.1 的更新,请手动操作。
这个问题的背景和意图
我们在AWS、内部服务器和本地共部署了超过10台Redmine。不管怎样,我们希望将Redmine和插件都升级到最新版本,但升级全部需要一定的工作量。
在服务器数量增加之前,我们在每台服务器上放置了用于维护的shell脚本。
-
- スクリプト改修時に全台に配置し直すのが面倒
-
- 環境によってRedmineのパスや導入プラグインが違って、微妙にシェルスクリプトを変更するのが面倒
- 複数のRedmineを1サーバに配置してる環境で実行する際にパスの書き換えで事故ったことも…
因此,
-
- 環境依存の値を変数定義
- 変数を埋め込んだスクリプトを転送し、リモートで実行
我制作了一个用于实施这种方式的操作手册。
我还创建了一个不使用Shell脚本的方案。
https://github.com/ryouma-nagare/redmine-update2.git
引入
假设已经安装了Git/Ansible。
获取存储库
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. 编辑库存/主机
我們將按照以下格式進行編輯。
[グループ名]
ホスト名 ansible_host=ホスト情報 認証情報
这次我们将AWS组设置为两台密钥认证,intra组设置为两台密码认证。
[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 Systems Manager Session Manager + Session Manager Plugin,AWS将ansible_host设置为实例ID。
将钥匙文件放置在3.keys中。
|-- keys
| `-- aws.pem
如果只有密码登录,就不需要这个。
4. 将变量定义文件放置在host_vars/文件夹中。
请将在hosts文件中记录的主机名=文件名,从host1、host2重命名复制。
|-- 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_stdout和debug_stderr设置为true,以查看脚本输出。
执行示例 lì)
debug_stdout: false
debug_stderr: true

※stderr生成了输出,但并不代表发生了错误。
※stdout 正常输出,不代表发生错误。
如果实际使用的话,
-
- stdout/stderrを有効にした検証用のホストorグループに対して実行
- エラーにならなければ残りのグループごとに実行
我认为应该这样做。
明天是圣诞节日历的最后一天。
终于轮到担任主持人的是Maeda Go先生!