« 2016年5月 | トップページ | 2016年7月 »

2016年6月

2016年6月23日 (木)

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

2016年6月 4日 (土)

CentOS7にGitbucketをインストール

結構いろいろ悩んだのでメモとして。

<対象バージョン>
CentOS:7
Apache httpd:2.4.6
Java:OpenJDK 1.8
GitBucket:4.1

<手順>
毎回sudo打ちたくないので、suでrootで実行。
※自ホストを「server1.local」にしてますが、実際に作成したホスト名に変えてくださいね。

○アプリのインストール
# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
# yum -y install tomcat
# yum -y install httpd
# cd /var/lib/tomcat/webapps
# wget https://github.com/takezoe/gitbucket/releases/download/4.1/gitbucket.war

○サービス化/起動
# systemctl enable httpd
# systemctl start httpd
# systemctl enable tomcat
# systemctl start tomcat
ここまでで、自ホスト内で「http://server1.local:8080/gitbucket」でアクセスできるが、他ホストからは接続できない。

○ポート変更
「http://server1.local/gitbucket」でアクセスできるように変更します。
# vi /etc/tomcat/server.xml
・ServerNameを自ホストに変更します。
 ServerName server1.local:80
・httpdの8080ポートを閉じます。
 以下の部分を「<!-- -->」でコメントアウト。
 <Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443" />

#vi /etc/httpd/conf.d/gitbucket.conf
・AJPを使ったProxyPassを設定します。
 ProxyPass /gitbucket ajp://server1.local:8009/gitbucket

# systemctl restart httpd
ここまでで、自ホスト内で「http://server1.local/gitbucket」でアクセスできるが、他ホストからは接続できない。

○Firewallの設定変更
他ホストから接続できるようにhttpポートを通すようにします。
# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload
ここまで変更すると、他ホストからも「http://server1.local/gitbucket」でアクセス可能。

<補足>
○デフォルトでAJPのConnectorは有効になっています。
 (<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />)
○ネットで検索すると、「LoadModule proxy_module modules/mod_proxy.so」とかをhttpd.confに追加する手順がよく出てくるのですが、デフォルトだとhttpd.confに「Include conf.modules.d/*.conf」があって、「conf.modules.d/00-proxy.conf」に「LoadModule proxy_module modules/mod_proxy.so」「LoadModule proxy_ajp_module modules/mod_proxy_ajp.so」があるので追加しなくても大丈夫。
○ProxyPassの設定で、VirtualHostディレクティブを使うパターンとLocationディレクティブを使うパターンがよく出てくるのですが、バーチャルホストしないのであればVirtualHostは指定したくないですし、Locationディレクティブは公式ドキュメントを見ると「<Location>ディレクティブは ファイルシステム外のコンテンツにディレクティブを適用するときに 使用してください。」とあるのでこれも指定したくないということで、今回は両方とも使わず、直接ProxyPassディレクティブを使ってます。

« 2016年5月 | トップページ | 2016年7月 »