vstsAgentとGradleをAnsibleで入れてみる

いつの間にか、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でバージョン管理させてるので、「動かしてみてダメだったら戻してしまえ」ができるのは大きいです。

カテゴリーOSS

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください