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_user와 login_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_user와 login_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_user와 login_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 섹션을 사용합니다.