Ansible - Semaphore

kimchigood·2024년 2월 12일
0

Ansible Study

목록 보기
8/8
post-thumbnail


https://www.semui.co/

Ansible Semaphore는 UI를 통해 Ansible의 상태를 조회하고 팀에서 Ansible 협업이 가능하게 해주는 오픈소스이고, 아래와 같은 기능들을 제공한다.

  • Build, deploy and rollback
  • Group playbooks to projects
  • Manage environments, inventories, repositories and access keys
  • Run playbooks from the browser. Responsive UI allows the use of Semaphore on mobile devices
  • Run playbooks by schedule
  • View detailed logs of any playbook runs, at any time
  • Delegate other users the running of playbooks
  • Get notifications about playbook runs
  • 지원 DB : MySQL, PostgreSQL, BoltDB(embedded key/value DB)

Installation

4가지 방식 지원 snap, package manager, docker, binary file - Link Github

# 설치
cd
pwd
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

# Setup Semaphore by using the following command
semaphore setup
1. Set up configuration for a MySQL/MariaDB database
2. Set up a path for your playbooks (auto-created)
3. Run database Migrations
4. Set up initial semaphore user & password

What database to use:
   1 - MySQL
   2 - BoltDB
   3 - PostgreSQL
 (default 1): 2

...
db filename (default /home/ubuntu/database.boltdb): 
Playbook path (default /tmp/semaphore): 
Public URL (optional, example: https://example.com/semaphore): 
Enable email alerts? (yes/no) (default no): 
Enable telegram alerts? (yes/no) (default no): 
Enable slack alerts? (yes/no) (default no): yes
Slack Webhook URL: 각자 slack webhook 만들어서 넣어준다.
Enable LDAP authentication? (yes/no) (default no): 
Config output directory (default /home/ubuntu/my-ansible):
...

> Username:  kimchigood   # 각자 자신의 닉네임
> Email: test@test.com
> Your name: kimchigood   # 각자 자신의 닉네임
> Password: qwe123

# ./semaphore server --config /home/ubuntu/config.json
# nohup ./semaphore server --config /home/ubuntu/config.json &
# You can login with admin@localhost or gasida.

# config.json 파일 확인
cat ./config.json | jq

# (터미널 2) Now you can run Semaphore : 태스크 실행 시 로그 확인 용도로 계속 터미널 열어 둠
# nohup semaphore server --config=./config.json &
semaphore service --config=./config.json


# Semaphore will be available via this URL
echo -e "Semaphore Web = http://$(curl -s ipinfo.io/ip):3000"

# CLI 확인
semaphore -h
semaphore version
semaphore user list

# tmp project home
mkdir /tmp/semaphore

Key Store

  1. sshkey
cat /home/ubuntu/.ssh/id_rsa

  1. password

  2. remote repo에 인증이 없는 경우

Repo Setting

  • Repositories : playbooks 와 roles 위치한 곳 - Link
  • 3가지 저장소 지원
    1. 로컬 Git Repo : *git://*
    2. 로컬 파일시스템 : *file://*
    3. 리모트 Git Repo : accessed over HTTPS(*https://*) , or SSH(*ssh://*)
    - 인증 필요 : SSH 사용 시 SSH Key store , 인증 없을 경우 None type Key

Environment : 인벤토리에 추가 변수 저장하는 곳으로 JSON 포맷으로 작성

https://docs.semui.co/user-guide/environment

Inventory : playbook가 실행될 호스트 목록, 변수 사용 가능, YAML/JSON/TOML 포맷

10.10.1.11
10.10.1.12
10.10.1.13

[web]
tnode1
tnode2

[db]
tnode3

[all:children]
web
db

[all:vars]
user=study

Task Templates : 플레이북 실행 정의(템플릿)

  • Task : Just runs specified playbooks with specified parameters
  • Build : This type of template should be used to create artifacts
    • The start version of the artifact can be specified in a template parameter. Each run increments the artifact version.

    • Semaphore doesn't support artifacts out-of-box, it only provides task versioning.

    • You should implement the artifact creation yourself. Read the article CI/CD to know how to do this.

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

  • Deploy : This type of template should be used to deploy artifacts to the destination servers.
    • Each deploy template is associated with a build template.
    • This allows you to deploy a specific version of the artifact to the servers.

playbook 생성

/tmp/semaphore/fact.yml

cat << EOT > /tmp/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 }}
EOT

/tmp/semaphore/user.yml

cat << EOT > /tmp/semaphore/user.yml
---

- hosts: web
  tasks:
  - name: Create User {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      state: present
EOT

[Task Templates] → NEW TEMPLATE

위 도전과제의 crontab 세팅을 Semaphore에서 할 수 있다.

확인 : facts 태스크 템플릿은 crontab에 의해 실행됨(5분 간격)

slack webhook 확인

Semaphore UI를 통해 Ansible playbook의 이력관리(성공/실패)가 가능하다.

user.yml playbook 실행(에러발생)

Environment 값 변경

user 추가

팀협업을 위해 user를 추가하여 관리도 가능하다.

Repository를 local filesystem이 아니라 remote 깃헙 저장소를 활요하여 Semaphore를 이용할 수 있다.

profile
Shout out to Kubernetes⎈

0개의 댓글