Open Liberty の Ansible + Jenkins による自動構築・構成管理を試す


はじめに

AnsibleやJenkinsを使ったDevOpsのプロセスを学習することになったので、Open Libertyを導入・構成管理するユースケースで実際に動かして見たときのメモです。
完全初学者のメモなので、間違ってる箇所・こうした方がいい箇所などあると思うので、気になるところがありましたらコメントいただけると幸いです。

前提条件

  • ホスト:

    • Mac OS High Sierra
    • VirtualBox
    • Vagrant
  • ゲスト:

    • コントローラーVM
      • CentOS 7.1
      • Ansible 2.6.2
      • Jenkins 2.135
    • ターゲットVM
      • CentOS 7.1
      • Open Liberty 18.0.0.2
      • Eclipse OpenJ9: 1.8.0_162

手順

ホスト側の準備

  1. VirtualBox + Vagrantの導入は他記事を参考に。また以下は打鍵したコマンドを記していますが、実行途中・結果のログは割愛しています。
AddCentOS7.1box
vagrant box add centos71 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box

2. vagrant initでVM設定

vagrant init centos71
Vagrant.configure(2) do |config|
  config.vm.define "controller" do |node|
        node.vm.box = "centos71"
        node.vm.hostname = "controller"
        node.vm.network :private_network, ip: "192.168.100.10"
        node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2210
    node.vm.network :forwarded_port, id: "jenkins", guest:8080, host: 18080
  end
  config.vm.define "target" do |node|
        node.vm.box = "centos71"
        node.vm.hostname = "target"
        node.vm.network :private_network, ip: "192.168.100.20"
        node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2220
  end
end

3. vagrant upでVMが2つ上がってくることを確認

vagrant up
vagrant status
Current machine states:

controller                running (virtualbox)
target                    running (virtualbox)

4. 2つのVMで通信できるように鍵作って交換

ssh root@localhost -p 2210
ssh-keygen -t rsa
ssh-copy-id [email protected]

5. Open LibertyとOpenJ9を入手

ゲスト(コントローラー)側の準備

1. Ansible導入は他記事を参考に

  • 前提のPythonはCentOSには最初から入ってるので略
python --version
Python 2.7.5
sudo yum install ansible

ansible --version
ansible 2.6.2

2. Jenkins導入は他記事を参考に

  • 前提のJavaとwget入れる
  • jenkinsがsudoできるようにしておく
sudo yum install java-1.8.0-openjdk wget
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install -y jenkins
service jenkins start
chkconfig jenkins on
sudo /usr/sbin/visudo

#Defaults requiretty
Defaults:jenkins !requiretty
jenkins ALL=(ALL) NOPASSWD:ALL

ゲスト(ターゲット)側の準備

  1. unzip導入(unarchiveモジュールの前提)
sudo yum install unzip

コントローラーのAnsibleからOpen Liberty + OpenJ9の導入

  1. OpenLibertyとOpenJ9のファイルをコピー
mkdir ansible
cp openliberty-18.0.0.2.zip /ansible/
cp OpenJDK8-OPENJ9_x64_Linux_jdk8u162-b12_openj9-0.8.0.tar.gz /ansible/

2. roles作成

mkdir roles
cd roles
mkdir common
mkdir OpenJ9
mkdir OpenLiberty
  • common
roles/common/tasks/main.yml
---
- name: create group oladmin
  group:
    name: oladmin

- name: create user oladmin
  user:
    name: oladmin
    group: oladmin

- name: create directories
  file:
    group: oladmin
    owner: oladmin
    mode: 0770
    path: "{{ item }}"
    state: directory
  with_items:
    - "/opt/IBM/OpenJ9"
    - "/opt/IBM/OpenLiberty"
  • OpenJ9
roles/OpenJ9/tasks/main.yml
---
- name: unarchive OpenJ9
  unarchive:
    copy: yes
    src: /ansible/OpenJDK8-OPENJ9_x64_Linux_jdk8u162-b12_openj9-0.8.0.tar.gz
    dest: /opt/IBM/OpenJ9
    owner: oladmin
    group: oladmin
    keep_newer: no
    list_files: no
    mode: 0770
  • OpenLiberty
roles/OpenLiberty/tasks/main.yml
---
- name: unarchive Open Liberty
  unarchive:
    copy: yes
    src: /ansible/openliberty-18.0.0.2.zip
    dest: /opt/IBM/OpenLiberty/
    owner: oladmin
    group: oladmin
    keep_newer: no
    list_files: no
    mode: 0770

3. inventory/hosts作成

[targets]
192.168.100.20

4. install.yml作成

install.yml
---
- name: install liberty
  become: true
  hosts: targets

  roles:
    - common
    - OpenJ9
    - OpenLiberty

  tasks:

5. Playbook全体ディレクトリ構成は以下:

ansible 
     L install.yml
     L roles
      L common
       L task
        L main.yml
      L OpenJ9
       L task
        L main.yml
      L OpenLiberty
       L task
        L main.yml
     L inventory
      L hosts

6. Jenkinsでジョブ作成(Ansibleコマンド実行)

7. Jenkinsからジョブ実行して成功するのを確認(以下は初回実行して導入後に再実行してるので冪等性が保たれ、okが出ている)

Open Liberty + OpenJ9の導入@ターゲット

  1. Open LibertyとOpenJ9が入ってることを確認

まとめ

最低限のAnsibleのPlaybookと、Jenkinsのジョブを使って、OpenJ9とOpenLibertyを導入しました。
server.envファイルにJavaのパスを設定して、サーバー(JVM)作成&起動するtaskは次回に追加したいと思います。
またAnsibleのディレクトリ設計やJenkinsのジョブ構成についても最低限なので今後改善をしていきたいと思います。