Jenkins 와 Ansible Tower (AWX) 연동, API 사용

2023. 10. 10. 12:29·DevOps/✏️ CICD
반응형

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/

 

Ansible Tower

This plugin connects Jenkins with Ansible Tower

plugins.jenkins.io

 

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 > ✏️ CICD' 카테고리의 다른 글

Jenkins Pipeline 으로 git clone , build 수행하기  (0) 2023.10.11
Bitbucket 과 AWS CodeCommit Jenkins를 이용한 Mirroring  (0) 2023.10.10
SSH , 리눅스 서버 비밀번호 없이 접속하기  (0) 2022.12.29
BACKUPSET 을 이용한 JENKINS 복구 방법  (1) 2022.12.26
Jenkins 완전 삭제 방법  (0) 2022.10.28
'DevOps/✏️ CICD' 카테고리의 다른 글
  • Jenkins Pipeline 으로 git clone , build 수행하기
  • Bitbucket 과 AWS CodeCommit Jenkins를 이용한 Mirroring
  • SSH , 리눅스 서버 비밀번호 없이 접속하기
  • BACKUPSET 을 이용한 JENKINS 복구 방법
자동화를 꿈꿉니다.
자동화를 꿈꿉니다.
DevOps 개발자
  • 자동화를 꿈꿉니다.
    데봅스 성장기
    자동화를 꿈꿉니다.
  • 전체
    오늘
    어제
    • 분류 전체보기 (29)
      • DevOps (29)
        • ✏️ Cloud (12)
        • ✏️ CICD (11)
        • ✏️ Mac (6)
      • 경제 (0)
      • 운동 (0)
  • 블로그 메뉴

    • 홈
  • hELLO· Designed By정상우.v4.10.3
자동화를 꿈꿉니다.
Jenkins 와 Ansible Tower (AWX) 연동, API 사용
상단으로

티스토리툴바