Jenkins 와 Ansible Tower (AWX) 연동, API 사용
jenkins Version : 2.419
Ansible Tower : 17.1.0 (Docker Version)
Jenkins Plugin
Ansible Tower Plugin https://plugins.jenkins.io/ansible-tower/dependencies/
CI / CD 파이프라인을 구성하는데 필요한 jenkins 와 Ansible 을 연동하는 과정이다.
보통 jenkins 에서 빌드 및 아티팩트 전달까지 진행한 후 Ansible 을 호출하면서 정보를 넘겨주게 되는데,
이 과정에서 jenkins - Ansible Tower (이하 AWX) 가 연동되어 있어야 한다.
Ansible Tower 는 host , group value 를 가지고 있기 때문에 ansible 을 호출하면 원하는 host 에 지정한 group 값을 가지고 배포를 진행할 수 있게 된다.
연동의 목적은 pipeline code 에서 host 정보를 받아오는 것을 목적으로 진행한다.
1. Jenkins 설정
jenkins 설정 > System > Ansible Tower 를 입력하는 공간이 존재한다. 타워의 정보를 입력하고 이름을 붙여서 jenkins 가 AWX 를 식별할 수 있도록 설정한다.
Credentials 은 Ansible Tower 에서 사용하는 계정을 만들어서 등록한 후 사용하면 정상적으로 Connection 이 성공할 것이다.
AWX 가 사용하는 IP, Port 와 방화벽 통신이 가능해야 한다.
2. Ansible Playbook
Jenkins 가 Ansible 의 IP,Port 를 식별할 수 있게 되었으면 호출하여 무엇을 실행할 것인지 AWX 에 기술되어 있어야 한다.
이것을 Playbook 이라고 하며 Resource > Template 에서 확인할 수 있다.
여기서는 project 라는 변수를 받아서 Tower 내에 project 라는 이름을 가진 group을 조회해서 host 정보를 반환한다.
---
- hosts: 'localhost'
gather_facts: no
vars:
targetlist: "{{ groups[project] }}"
tasks:
- name: Get Inventory-info
set_stats:
data:
JENKINS_EXPORT:
- TargetList: "{{ targetlist }}"
list를 반환해서 jenkins 로 전달해주는 playbook 을 수행하게 된다.
3. Pipeline Code
result = ansibleTower(
towerServer: "${awxTower}",
jobTemplate: "${plb_getHostIndex}",
importTowerLogs: false,
removeColor: false,
verbose: true,
extraVars: """
project: ${project}
""",
async: false
)
message.infoMessage("Result: " + result)
serviceList = Eval.me(result.TargetList)
Pipeline 에서는 Jenkins parameter 로 넘겨준 project 를 Tower 호출 시 포함하여 전달하고, 생성한 playbook 의 index 번호와 앞서 지정한 Tower 서버의 정보를 함께 넘긴다.
해당 코드가 실행되면 원하는 Tower 서버의 playbook 에 지정한 변수를 담아서 ansible 을 실행 시킬 수 있다.
ref) https://plugins.jenkins.io/ansible-tower/
4. Pipeline 실행 결과
Beginning Ansible Tower Run on awxtower
[WARNING]: Job type defined but prompt for job type on launch is not set in tower job
Requesting tower to run job template 7
Template Job URL: ***
Receiving from Jenkins job 'TargetList' with value '["skeleton.host1","skeleton.host2","skeleton.host3"]'
Tower completed the requested job
awxtower 라는 Tower 에서 7번 playbook이 실행 되었다.
그 결과 TargetList 라는 변수에 Tower 에 저장되어 있는 host 를 조회하여 결과 값으로 받을 수 있었다.
'⇥ DevOps Tech 🙋🏻♀️ > ✏️ Jenkins' 카테고리의 다른 글
Jenkins Pipeline 으로 git clone , build 수행하기 (0) | 2023.10.11 |
---|---|
Bitbucket 과 AWS CodeCommit Jenkins를 이용한 Mirroring (0) | 2023.10.10 |
BACKUPSET 을 이용한 JENKINS 복구 방법 (1) | 2022.12.26 |
Jenkins 완전 삭제 방법 (0) | 2022.10.28 |
젠킨스2: 슬레이브, 노드 등록 방법 (0) | 2022.09.20 |
댓글
이 글 공유하기
다른 글
-
Jenkins Pipeline 으로 git clone , build 수행하기
Jenkins Pipeline 으로 git clone , build 수행하기
2023.10.11 -
Bitbucket 과 AWS CodeCommit Jenkins를 이용한 Mirroring
Bitbucket 과 AWS CodeCommit Jenkins를 이용한 Mirroring
2023.10.10 -
BACKUPSET 을 이용한 JENKINS 복구 방법
BACKUPSET 을 이용한 JENKINS 복구 방법
2022.12.26 -
Jenkins 완전 삭제 방법
Jenkins 완전 삭제 방법
2022.10.28