DevOps/Ansible
Ansible - 3. 서버 기본 세팅 & CICD
Camouflage129
2020. 9. 7. 15:35
저는 아래와 같이 구성하여 EC2서버들에 대해 기본세팅을 구성합니다.
1. ansible.cfg
[defaults]
host_key_checking = False
command_warnings = False
2. inventory.ini
[node:vars]
ansible_ssh_private_key_file=/var/lib/jenkins/key/abcd.pem
ansible_user=ec2-user
[node]
10.0.1.150
10.0.1.155
3. playbook.yaml
필요한 패키지가 더 있다면, 맨 아래의 telnet을 설치하는 부분에 이어서 작성하여 사용하시면 됩니다.
---
- name: set up
hosts: node
become_user: root
become: yes
tasks:
# Asia 시간 세팅
- name: Set OS Time
timezone:
name: Asia/Seoul
# 시간 동기화
- name: Sync OS Time
shell: systemctl restart rsyslog
shell: systemctl restart chronyd
# Redhat 패키지 설치
- name: Install epel
shell: amazon-linux-extras install -y epel
args:
executable: /bin/bash
# Python3 설치
- name: Install Python3
yum:
state: installed
name:
- python3
# awscli / boto3
- name: Install Python lib
pip:
executable: pip3
name:
- awscli
- boto3
# 기타 필요한 패키지 설치
- name: Install software requirements
yum:
state: installed
name:
- telnet
Jenkins Pipeline 코드는 아래와 같습니다.
def CodeCommit_URL = "{{codecommit url}}"
pipeline {
environment {
PATH = "$PATH:/usr/local/bin/"
}
agent any
stages {
stage('Git Clone') {
steps {
script {
try {
git url: "${CodeCommit_URL}", branch: "master", credentialsId: "jenkins_code_commit"
env.cloneResult=true
} catch (error) {
print(error)
cleanWs()
env.cloneResult=false
currentBuild.result = 'FAILURE'
}
}
}
}
stage('Set-Nodes') {
when {
expression {
return env.cloneResult ==~ /(?i)(Y|YES|T|TRUE|ON|RUN)/
}
}
steps {
script {
try {
path = "/var/lib/jenkins/workspace/${env.JOB_NAME}/nodes"
sh """
ansible-playbook ${path}/playbook.yaml -i ${path}/inventory.ini
"""
env.nodesResult=true
} catch (error) {
print(error)
cleanWs()
env.nodesResult=false
currentBuild.result = 'FAILURE'
}
}
}
}
}
}
Ansible Repo를 아래와 같이 구성하여 사용한다면,
Stage를 계속해서 추가해주기만 하면 다른 패키지도 손쉽게 관리하여 사용할 수 있습니다.
다음 게시글에서는 Ansible을 통해 Sonarqube 설치를 통해 variable을 어떻게 사용할 수 있는지 예시를 한번 알아보도록 하겠습니다.