Search
Duplicate

모듈 모음

수업
Ansible
주제
5 more properties

APT 모듈

# 1. apt 업데이트 sudo apt-get update # 2. JDK 17 설치 # Tps-Jenkins-Master-1 기준 (OpenJDK 17.0.11 64-bit - dpkg 조회) sudo apt install openjdk-17-jre:amd64 -y java -version # 3. Jenkins 설치 # 3.1 공개 키 다운로드 sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \ https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key # 3-2. URL + 공개 키 저장 # 패키지 관리를 위해 APT 소스 리스트(/etc/apt/source.list, etc/apt/sources.list.d 디렉토리) # 해당 소스 리스트에 패키지 다운로드를 위한 URL 저장 echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \ "https://pkg.jenkins.io/debian-stable binary/" | sudo tee \ /etc/apt/sources.list.d/jenkins.list > /dev/null # 4. 패키지 업데이트 sudo apt-get update # 5. jenkins 설치 sudo apt-get install jenkins=2.426.1 -y sudo systemctl status jenkins # jenkins 상태확인 sudo systemctl enable jenkins # jenkins 활성화 sudo systemctl start jenkins # jenkins 시작 # 6. jenkins 패스워드 확인 sudo cat /var/lib/jenkins/secrets/initialAdminPassword # 602ec1f720ed4caebdb236a362a38939 # 이후 플러그인 설치여부 및 내부설정 작업 진행
Bash
복사
# Apt 모듈(apt-get update) - name: APT 테스트 apt: update_cached: yes # yes인 경우, apt-get update 실행 # Apt 모듈(name, state_ - name: APT 테스트 2 apt: # 설치 패키지 이름 name: openjdk-17-jdk # 패키지 상태 ## present(패키지 설치확인), absent(패키지 제거 확인), latest(최신상태 확인), build-dep(빌드 의존성 확인) state: present - name: 젠킨스 저장소 추가 # 새로운 apt 패키지 저장소 추가/제거 apt_repository: # 추가 저장소 URL # deb(Debian 패키지 관리 시스템에서 사용되는 소스리스트 항목형식) repo: "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] http://pkg.jenkins.io/debian-stable binary/" state: present # 저장소를 정의하는 파일 이름 기본(/etc/apt/sources.list.d/ 디렉토리에 저장) filename: jenkins - name: apt upgrade apt: # yes(apt-upgrade와 동일), safe(기존을 유지하고 안전하게), # full(safe보다는 공격적), dist(전체적 수행, 모든작업 수행) upgrade: dist
YAML
복사
YAML
복사

systemd

name: 관리 서비스 이름
state: 서비스 상태(started, stopped, restarted, reloaded)
enabled: 부팅시 자동시작여부 (yes, no)
masked: 서비스를 마스킹하여 실행여부(yes, no)
daemon_reload: 변경된 유닛 파일 시스템을 반영하기 위해 명령실행(yes, no)
- name: 젠킨스 시작 # systemctl 명령어 systemd: name: jenkins state: started enabled: yes - name: 젠킨스 중지 systemd: name: jenkins state: stopped - name: 젠킨스 재시작 systemd: name: jenkins state: restarted - name: 젠킨스 재로딩 systemd: name: jenkins state: reloaded
YAML
복사

Register

register로 저장된 변수는 다음과 같은 구조를 가집니다:
changed: 작업이 시스템을 변경했는지 여부를 나타냅니다.
failed: 작업이 실패했는지 여부를 나타냅니다.
stdout: 표준 출력 결과입니다.
stderr: 표준 오류 결과입니다.
rc: 명령의 반환 코드입니다.
cmd: 실행된 명령입니다.
stdout_lines: 표준 출력을 줄 단위로 나눈 목록입니다.
stderr_lines: 표준 오류 출력을 줄 단위로 나눈 목록입니다.
msg: 작업에 대한 추가 메시지입니다.

TAR (압축/압축해제)

--- - name: Jenkins 백업 플레이북 hosts: old_jenkins_server become: yes tasks: - name: Jenkins 데이터 백업 archive: path: /var/lib/jenkins dest: /tmp/jenkins_backup.tar.gz tags: backup - name: Jenkins 백업 파일 복사 fetch: src: /tmp/jenkins_backup.tar.gz dest: ./jenkins_backup.tar.gz flat: yes tags: backup
YAML
복사
--- - name: Jenkins 복원 플레이북 hosts: new_jenkins_server become: yes vars: jenkins_backup_src: ./jenkins_backup.tar.gz jenkins_home: /var/lib/jenkins tasks: - name: APT 업데이트 apt: update_cache: yes - name: 자바17 설치 apt: name: openjdk-17-jre state: present - name: 젠킨스 설치 apt: name: jenkins state: present - name: Jenkins 서비스 중지 systemd: name: jenkins state: stopped - name: 백업 파일 복사 copy: src: "{{ jenkins_backup_src }}" dest: /tmp/jenkins_backup.tar.gz - name: Jenkins 홈 디렉토리 정리 file: path: "{{ jenkins_home }}" state: absent force: yes - name: Jenkins 데이터 복원 unarchive: src: /tmp/jenkins_backup.tar.gz dest: / extra_opts: [--strip-components=2] - name: Jenkins 서비스 시작 systemd: name: jenkins enabled: yes state: started
YAML
복사
YAML
복사

태그

플레이북 태그, 전체 플레이북을 실행하지 않는다.

login_userlogin_password 옵션

login_user: 데이터베이스에 접속하는 데 사용할 MariaDB 사용자 이름입니다.
login_password: 데이터베이스에 접속하는 데 사용할 MariaDB 사용자 비밀번호입니다.
이 옵션들이 필요한 이유는 MariaDB 사용자 계정을 수정하거나 삭제하기 위해서는 해당 데이터베이스에 접속할 권한이 필요하기 때문입니다.

첫 번째 작업: 루트 비밀번호 설정

yaml코드 복사 - name: Set root password mysql_user: name: root password: "{{ root_db_password }}" host_all: yes state: present
YAML
복사
이 작업에서는 root 사용자의 비밀번호를 설정합니다. 처음에는 데이터베이스에 접속하는 데 비밀번호가 필요 없기 때문에 login_userlogin_password 옵션을 사용하지 않습니다. 이는 처음 MariaDB를 설치한 후 비밀번호가 설정되지 않은 상태일 때 적용됩니다.

두 번째 작업: 익명 사용자 제거

yaml코드 복사 - name: Remove anonymous users mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ root_db_password }}"
YAML
복사
이 작업에서는 익명 사용자를 제거합니다. 이 작업을 수행하기 위해서는 이미 설정된 root 사용자의 비밀번호를 사용하여 데이터베이스에 접속해야 합니다. 따라서 login_userlogin_password 옵션이 필요합니다.

shell 모듈

기능: 명령을 /bin/sh를 통해 실행합니다.
장점:
파이프(|), 리다이렉션(>), 조건부 실행(&&), 서브쉘($()) 등 쉘 확장을 사용할 수 있습니다.
사용 예: 복잡한 명령이나 쉘 확장이 필요한 경우.

command 모듈

기능: 지정된 명령을 직접 실행합니다.
장점:
더 안전하고 예측 가능하며, 쉘이 필요하지 않은 단순한 명령을 실행하는 데 적합합니다.
제한 사항:
쉘 확장을 사용할 수 없습니다.
사용 예: 단순한 명령 실행.

예시 URL 분석

yaml코드 복사 - name: MariaDb 저장소 설치 apt_repository: repo: "deb [arch=amd64,arm64,ppc64el] http://mirror.mariadb.org/repo/{{ mariadb_version }}/ubuntu $(lsb_release -cs) main" state: present
YAML
복사
이 URL을 자세히 분석해 보겠습니다:
1.
deb:
이 저장소가 Debian 기반 시스템(예: Ubuntu)에서 사용할 수 있는 바이너리 패키지를 제공한다는 것을 의미합니다.
2.
[arch=amd64,arm64,ppc64el]:
이 부분은 저장소가 제공하는 패키지의 아키텍처를 지정합니다.
amd64: 64비트 x86 아키텍처.
arm64: 64비트 ARM 아키텍처.
ppc64el: 리틀 엔디안 64비트 PowerPC 아키텍처.
3.
http://mirror.mariadb.org/repo/{{ mariadb_version }}/ubuntu:
패키지를 다운로드할 저장소의 기본 URL입니다.
{{ mariadb_version }}: Ansible 변수로서, 설치할 MariaDB의 버전을 나타냅니다. 예를 들어, 10.11.7.
ubuntu: 이 저장소가 Ubuntu용 패키지를 제공한다는 것을 의미합니다.
4.
$(lsb_release -cs):
현재 시스템의 코드명을 동적으로 삽입합니다.
예를 들어, Ubuntu 20.04 LTS는 focal, Ubuntu 18.04 LTS는 bionic 등.
이는 저장소가 다양한 Ubuntu 릴리스에 맞춰져 있음을 의미합니다.
5.
main:
저장소의 섹션을 지정합니다. 일반적으로 main, restricted, universe, multiverse 등이 있습니다.
여기서는 주로 사용되는 패키지가 포함된 main 섹션을 사용합니다.