새소식

카테고리 없음

[A101 Study 4주차] Semaphore 활용

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 A101 Study 4주차 스터디 내용 정리

 

 

해당 스터디는 '앤서블로 시작하는 인프라 자동화' 책을 기반으로 진행하였습니다.
실습 환경은 'Control Node 1 대 + Target Node 3대' 로 구성하였습니다.

 

 

1. Semaphore

 

1.1. 개요

 

Semaphore 는 Ansible Tower(AWX) 처럼 Ansible Playbook 을 관리해주고 GUI 환경을 제공해주는 오픈소스 도구입니다.

출처: https://docs.semui.co/

 

 

Semaphore 기능

  • CI/CD 환경에 사용할 수 있도록 Build, Deploy, Rollback 기능 제공
  • Project 단위로 Playbook 격리 가능
  • Access Key, Repository, Inventory, Envrionment 등 관리
  • Web UI 에서 Playbook 실행
  • Playbook Schedule 설정 가능
  • Playbook 로그 확인 가능
  • 알림 기능

 

 

1.2. 설치

 

Semaphore 는 4가지 설치 방식을 지원 합니다. - Link

  1. snap
  2. package manager
  3. docker
  4. binary file

 

여기서는 package manager 로 설치할 예정입니다.

 

# 설치를 위한 패키지 다운로드
wget https://github.com/ansible-semaphore/semaphore/releases/download/v2.9.45/semaphore_2.9.45_linux_amd64.deb
sudo dpkg -i semaphore_2.9.45_linux_amd64.deb

# Semaphore 설치
semaphore setup

# Database 는 Test 기 때문에 Semaphore 내장 BoltDB 를 사용합니다.
What database to use:
   1 - MySQL
   2 - BoltDB
   3 - PostgreSQL
 (default 1): 2

# 그 외는 모두 Default 설정으로 하되, Slack 알림 테스트를 위해 Webhook URL 을 설정해줍니다.
Enable slack alerts? (yes/no) (default no): yes
Slack Webhook URL: <개인 WEBHOOK URL>

# 접근할 유저 입력
> Username:  kimalarm
> Email: kimalarm@localhost
> Your name: kimalarm
> Password: <password>

# 설치 완료 시, Config.json 파일 생성
cat ./config.json | jq

 

 

1.3. Semaphore 실행

 

앞서 생성된 Config.json 파일을 가지고 Semaphore 를 실행합니다.

semaphore service --config=./config.json

 

 

 

이후 Semaphore 가 설치된 서버의 3000번 포트로 접근하면 GUI 환경이 나옵니다.

 



 

2. Semaphore 활용

 

2.1. Key Store

 

Semaphore 에서 대상 노드를 관리하기 위해서는 Ansible 과 마찬가지로 ssh 접근이 필요합니다.
이 때 사용되는 것이 key store 입니다.

 

Semaphore 에서는 다음과 같은 3가지 Key 를 지원합니다.

 

  • SSH

Remote Hosts, Remote Repo 에 SSH 접속 시 사용

 

  • Login With Password

로그인 계정에 대한 암호와 토큰

 

  • None

Remote Repo 에 인증이 없는 경우

 

 

 

 

2.2. Repositories

 

PlaybookRole 이 위치한 곳을 의미합니다.

 

Semaphore 에서는 다음과 같은 3가지 저장소를 지원합니다.

 

  • 로컬 Git Repo - git://

  • 로컬 파일시스템 - file://

  • 리모트 Git Repo - ssh:// , https://

 

 

 

 

 

2.3. Environment

 

Ansible 추가 변수를 저장하는 곳으로 JSON 포맷으로 작성합니다.

 

 

 

2.4. Inventory

 

Playbook 이 실행될 호스트 목록입니다.

 

 

 

2.5. Task Templates

 

플레이북의 실행을 정의한 템플릿입니다.

 

Task : Playbook

Task Template : Playbook 을 어떻게 실행할 것인가 정의

 

우선, Ansible Server 에 Playbook 을 하나 생성해놓습니다.
이 때 Playbook 은 Semaphore 설치 시 설정한 디렉터리에 넣습니다.

 

- fact.yml

---

- hosts: all

  tasks:
  - name: Print all facts
    ansible.builtin.debug:
      msg: >
        The default IPv4 address of {{ ansible_facts.fqdn }}
        is {{ ansible_facts.default_ipv4.address }}

 

해당 플레이북을 활용하는 Task Template 을 생성해보겠습니다.

 

 

이후 Task 에서 직접 RUN 을 눌러주거나 5분이 지나면 자동으로 Playbook 이 실행됩니다.

 

앞서 설정했던 Slack 에서도 알림을 확인하실 수 있습니다.

 

 


 

 

참고 문서

  • Semaphore - Introduction

https://docs.semui.co/

 

  • Semaphore - Insatallation

https://docs.semui.co/administration-guide/installation

 

  • Semaphore - GitHub

https://github.com/ansible-semaphore/semaphore

Contents

포스팅 주소를 복사했습니다