いつの間にか、VSTS/TFSのLinux/OSX用ビルドエージェントの名前が「vsoAgent」から「vstsAgent」に変わってたので、改めて入れてみようと思い立ち、やるなら巷で噂のAnsibleも使ってみようとしました。
前回のGitBucketに続き、環境はCentOS7、Ansible:2.0.2.0になります。
古いAnsibleのバージョンでのサンプルが結構あったので、新しいバージョンでどう変わったかも確認してみました。
とりあえず作ってみたレベルなので、vstsAgentの設定変更やRoles分けはできてません。
<hosts>
[buildagent-servers]
192.168.xxx.xxx
[buildagent-servers:vars]
ansible_ssh_user=ansiuser
ansible_ssh_pass=xxxxxxxx
ansible_sudo_pass=xxxxxxxx
<playbook>
—
– hosts: buildagent-servers
remote_user: ansiuser
vars:
download_agent_archive: vsts-agent-rhel.7.2-x64-2.101.1.tar.gz
base_dir: "{{ ansible_env.HOME }}/buildagent"
tasks:
– name: Create base directory
file:
args:
path: "{{ base_dir }}"
state: directory
mode: 0755
– name: Create download directory
file:
args:
path: "{{ base_dir }}/download"
state: directory
mode: 0755
– name: Download vstsAgent
get_url:
args:
url: "http://github.com/Microsoft/vsts-agent/releases/download/v2.101.1/{{ download_agent_archive }}"
dest: "{{ base_dir }}/download"
force: no
– name: Deployment vstsAgent
unarchive:
args:
copy: no
src: "{{ base_dir }}/download/{{ download_agent_archive }}"
dest: "{{ base_dir }}"
creates: "{{ base_dir }}/run.sh"
– name: Download gradle archive
get_url:
args:
url: "https://services.gradle.org/distributions/gradle-2.13-bin.zip"
dest: /tmp
force: no
– name: Deployment gradle
unarchive:
args:
copy: no
src: /tmp/gradle-2.13-bin.zip
dest: /opt
creates: /opt/gradle-2.13
become: yes
– name: Create gradle symbolic link
file:
args:
src: /opt/gradle-2.13
path: /opt/gradle
state: link
become: yes
– name: export GRADLE_HOME
lineinfile:
args:
dest: /etc/profile.d/gradle.sh
line: export GRADLE_HOME=/opt/gradle
create: yes
become: yes
– name: export gradle path
lineinfile:
args:
dest: /etc/profile.d/gradle.sh
line: export PATH=$PATH:$GRADLE_HOME/bin
become: yes
<補足>
・相手先ホストでssh接続を設定する必要がある
・相手先ホストが複数の場合、ssh接続ユーザ/rootのパスワードを揃えた方が楽。(まとめて指定できる)
・OS環境変数は「ansible_env:~」で参照可能
・「Create ~ directory」は、pathに指定されたディレクトリが存在したらスキップ
・get_urlでforce: noの場合、ダウンロード対象が存在したらスキップ
・unarchiveでCopy: noとすることで、相手先ホスト内のファイルを解凍対象にできる
たしか、古いバージョンだとAnsibleのホストサーバから強制ダウンロードだったはず
・unarchiveでcreates:~に指定したファイルが存在したらスキップ
解凍後のファイルを指定すれば、再解凍せずにすむ
・sudo実行時は「become: yes」 ← 昔のバージョンだと「sudo: yes」
・gradleの実行パスは、バージョン切り替えできるようにsymbolic linkを使ってみた
・環境変数の変更は、CentOSだと「etc/profile.d」ディレクトリにあるシェルスクリプトを自動で取り込んでくれるので、今回は「gradle.sh」を個別作成した
Ansibleを全然使ったことがなかったので四苦八苦しましたが、一度作成したら離れられませんね。あとは接続先ホストでAnsibleが使えるようになるまでの初期設定(ホスト名/ネットワーク設定/ssh設定など)をどうにかできないかなと。それとWindows対応か・・・。
あ、yumを使うパターンがないw
ちなみに、相手先ホストはHyper-V仮想マシン、Playbookは前回書いたGitBucketでバージョン管理させてるので、「動かしてみてダメだったら戻してしまえ」ができるのは大きいです。