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을 어떻게 사용할 수 있는지 예시를 한번 알아보도록 하겠습니다.