Ansible Playbook CI를 GitLab을 사용하여 VMware의 VM 인스턴스로 시도
환경
품목
버전
Ansible
2.8.1
GitLab
11.11.0-ce
VMware vCenter
6.7.0
VMware ESXi
6.7.0
CI 흐름
그건 그렇고, 여기서 CI 용 VM 인스턴스는 DHCP에서 IP를 얻고 있습니다.
사용할 Playbook
구조
리포지토리의 구조는 다음과 같습니다.
.
├── .gitlab-ci.yml
├── ci
│ ├── operation_ci_vm.yml
│ ├── playbook_ci.yml
│ └── vars
│ └── main.yml
└── main.yml
파일 설명
operation_ci_vm.yml
CI용 VM 인스턴스를 만들거나 삭제하는 Playbook입니다.
---
- name: Operation of VM for CI
hosts: localhost
gather_facts: no
vars_files:
- vars/main.yml
tasks:
- name: Operation the virtual machine for CI.
vmware_guest:
hostname: "{{ vcenter }}"
username: "{{ username }}"
password: "{{ password }}"
validate_certs: no
datacenter: "{{ datacenter }}"
name: "{{ vm_name }}"
template: "{{ template }}"
folder: "{{ datacenter }}/vm"
state: "{{ item }}"
loop: "{{ state }}"
playbook_ci.yml
CI용 VM 인스턴스가 시작되기를 기다리고 시작한 후 VMware Tools를 통해 IP를 검색하고add_host
인벤토리에 추가하는 Playbook입니다.
VM 인스턴스가 시작되면 테스트를 원하는 Playbook을 로드하고 실행합니다.
---
- name: Add host for CI to inventory
hosts: localhost
gather_facts: no
vars_files:
- vars/main.yml
tasks:
- name: Wait for VMware tools.
vmware_guest_tools_wait:
hostname: "{{ vcenter }}"
username: "{{ username }}"
password: "{{ password }}"
validate_certs: no
name: "{{ vm_name }}"
- name: Gather facts from vm.
vmware_guest_facts:
hostname: "{{ vcenter }}"
username: "{{ username }}"
password: "{{ password }}"
validate_certs: no
datacenter: "{{ datacenter }}"
name: "{{ vm_name }}"
register: gather_facts_from_vm_result
retries: 60
delay: 5
until: gather_facts_from_vm_result.instance.ipv4 is not none
- name: Add ci host.
add_host:
hostname: "{{ vm_name }}"
ansible_host: "{{ gather_facts_from_vm_result.instance.ipv4 }}"
ansible_user: root
ansible_password: secret
groups:
- all
- name: Playbook test
import_playbook: "{{ test_playbook_path }}"
vars/main.yml
CI용 VM 인스턴스를 작성하기 위한 변수를 정리한 파일입니다.
---
vcenter: 192.168.0.111
username: [email protected]
password: secret
datacenter: DC
vm_name: CentOS7-CI
template: CentOS7_TMP
변수
설명
vcenter
vCenter IP 또는 호스트 이름을 지정합니다.
username
vCenter에 로그인할 사용자 이름을 지정합니다.
password
vCenter에 로그인할 암호를 지정합니다.
datacenter
CI용 VM 인스턴스를 만들 데이터 센터를 지정합니다.
vm_name
만들 VM 이름을 지정합니다.
template
복제 원본 VM을 지정합니다.
main.yml
여기에서는 테스트에서 Apache를 설치하고 시작하는 Playbook을 만들어 보았습니다.
이것은 VM 인스턴스에서 실행되는 Playbook입니다.
---
- name: test playbook
hosts: all
gather_facts: no
tasks:
- name: install apache.
yum:
name: httpd
state: present
- name: start apache.
systemd:
name: httpd
state: started
gitlab-ci.yml
GitLab CI 파일은 다음과 같이 만들었습니다.
---
image: centos:7
stages:
- test
variables:
ANSIBLE_HOST_KEY_CHECKING: "False"
before_script:
- yum -y install openssh-clients sshpass epel-release
- yum -y install python2-pip
- pip install ansible requests pyvmomi
- "ansible-playbook ci/operation_ci_vm.yml -e \"{'state': ['poweredon']}\""
after_script:
- "ansible-playbook ci/operation_ci_vm.yml -e \"{'state': ['poweredoff', 'absent']}\""
playbook_test:
stage: test
script:
- "ansible-playbook ci/playbook_ci.yml -e \"{'test_playbook_path': '../main.yml'}\""
GitLab CI/CD 파이프라인 구성 참조
CI 실행
CI를 실행하면 다음과 같습니다.
이제 VM 인스턴스를 사용하여 Playbook의 CI를 만들었습니다 :)
Reference
이 문제에 관하여(Ansible Playbook CI를 GitLab을 사용하여 VMware의 VM 인스턴스로 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sky_jokerxx/items/4f5a8c9dfd8d59e9806f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
.
├── .gitlab-ci.yml
├── ci
│ ├── operation_ci_vm.yml
│ ├── playbook_ci.yml
│ └── vars
│ └── main.yml
└── main.yml
---
- name: Operation of VM for CI
hosts: localhost
gather_facts: no
vars_files:
- vars/main.yml
tasks:
- name: Operation the virtual machine for CI.
vmware_guest:
hostname: "{{ vcenter }}"
username: "{{ username }}"
password: "{{ password }}"
validate_certs: no
datacenter: "{{ datacenter }}"
name: "{{ vm_name }}"
template: "{{ template }}"
folder: "{{ datacenter }}/vm"
state: "{{ item }}"
loop: "{{ state }}"
---
- name: Add host for CI to inventory
hosts: localhost
gather_facts: no
vars_files:
- vars/main.yml
tasks:
- name: Wait for VMware tools.
vmware_guest_tools_wait:
hostname: "{{ vcenter }}"
username: "{{ username }}"
password: "{{ password }}"
validate_certs: no
name: "{{ vm_name }}"
- name: Gather facts from vm.
vmware_guest_facts:
hostname: "{{ vcenter }}"
username: "{{ username }}"
password: "{{ password }}"
validate_certs: no
datacenter: "{{ datacenter }}"
name: "{{ vm_name }}"
register: gather_facts_from_vm_result
retries: 60
delay: 5
until: gather_facts_from_vm_result.instance.ipv4 is not none
- name: Add ci host.
add_host:
hostname: "{{ vm_name }}"
ansible_host: "{{ gather_facts_from_vm_result.instance.ipv4 }}"
ansible_user: root
ansible_password: secret
groups:
- all
- name: Playbook test
import_playbook: "{{ test_playbook_path }}"
---
vcenter: 192.168.0.111
username: [email protected]
password: secret
datacenter: DC
vm_name: CentOS7-CI
template: CentOS7_TMP
---
- name: test playbook
hosts: all
gather_facts: no
tasks:
- name: install apache.
yum:
name: httpd
state: present
- name: start apache.
systemd:
name: httpd
state: started
---
image: centos:7
stages:
- test
variables:
ANSIBLE_HOST_KEY_CHECKING: "False"
before_script:
- yum -y install openssh-clients sshpass epel-release
- yum -y install python2-pip
- pip install ansible requests pyvmomi
- "ansible-playbook ci/operation_ci_vm.yml -e \"{'state': ['poweredon']}\""
after_script:
- "ansible-playbook ci/operation_ci_vm.yml -e \"{'state': ['poweredoff', 'absent']}\""
playbook_test:
stage: test
script:
- "ansible-playbook ci/playbook_ci.yml -e \"{'test_playbook_path': '../main.yml'}\""
CI를 실행하면 다음과 같습니다.
이제 VM 인스턴스를 사용하여 Playbook의 CI를 만들었습니다 :)
Reference
이 문제에 관하여(Ansible Playbook CI를 GitLab을 사용하여 VMware의 VM 인스턴스로 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sky_jokerxx/items/4f5a8c9dfd8d59e9806f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)