공부하기싫어
article thumbnail

코드 수정이 많이 없을줄 알았는데 하다보니 계속 건드리게 되서 pipeline 을 만들어보려고 한다.

 

Pipeline - EC2

2023.04.12

1. Jenkins Container -TradeServer - Ansible

새로 젠킨스 컨테이너를 띄우고 ec2 로 동작하는 TradeServer(Prod) 를 Ansible 로 연결해줄꺼다

 

Jenkins container

docker run -itd --name -p 8080:8080 -p 50000:50000 -v /jenkins:/var/jenkins_home -u root jenkins/jenkins:latest

 

필요한 툴 설치

#ansible
apt install python3-pip
pip install ansible

#docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

#vim
apt install vim -y

 

인벤토리 파일

[TradeServer]
172.31.41.145


[TradeServer:vars]
ansible_connection=ssh
ansible_port=22
ansible_user=ubuntu 
ansible_private_key_file=/home/keypairs/dev-all.pem

 

동작확인

root@cb8455c93f27:/var/jenkins_home/workspace# ansible TradeServer -i /home/Inventory.ini -a "pwd"
172.31.41.145 | CHANGED | rc=0 >>
/home/ubuntu
root@cb8455c93f27:/var/jenkins_home/workspace#

jenkins container 에서 TradeServer 로 ad-hoc 테스트

 

 

2. Jenkins pipeline

Jenkins 콘솔로 진입 후 pipeline 생성

깃 리포지토리와 훅 연결

pipeline 을 만들고 webhook 이 작동을 안했는데 한번 빌드하고 나니 push 했을때 webhook 을 잘 잡아냈다

시간이 문제인지 잘 모르겠는데 일단 됨

 

 

3. Jenkinsfile

Jenkinsfile

pipeline {
    agent any
    stages{
        stage('kill proccess'){
            steps{
                script{
                    try {
                        sh "ansible TradeServer -i /home/Inventory.ini -a 'python3 CICDpipeline-Pord-Autotrade-EC2-TradeServer/kill_proccess.py'"
                    } catch (e) {
                        sh "echo proccess killed"
                    } 
                }
            }
            /*post {
                failure {
                    echo 'kill proccess failure'
                }
                success {
                    echo 'kill proccess success'
                }
            }*/
        }

        stage('git pull'){
            steps {
                sh "ansible TradeServer -i /home/Inventory.ini -a 'rm -rf CICDpipeline-Pord-Autotrade-EC2-TradeServer/'"
                sh "ansible TradeServer -i /home/Inventory.ini -a 'git clone https://github.com/cyaninn-entj/CICDpipeline-Pord-Autotrade-EC2-TradeServer.git'"
            }
            post {
                failure {
                    echo 'Git pull failure'
                }
                success {
                    echo 'Git pull success'
                }
            }
        }

        stage('restart proccess'){
            steps {
                sh "ansible TradeServer -i /home/Inventory.ini -a 'chdir=/home/ubuntu/CICDpipeline-Pord-Autotrade-EC2-TradeServer sh run.sh'"
            }
            post {
                failure {
                    echo 'restart proccess failure'
                }
                success {
                    echo 'restart proccess success'
                }
            }
        }
    }//stages end
}//pipeline end

 

kill_proccess.py

import psutil

def kill_python():
    for proc in psutil.process_iter():
        if proc.name() == "python3":
            proc.kill()

kill_python()

 

pyutil 모듈로 프로세스 이름을 찾아 종료시킨 후

기존 디렉토리를 삭제

git clone 으로 새 코드를 불러오고

run.sh 로 다시 프로세스를 실행하도록 했다.

 

 

3. 테스트

jenkins
log , ps -ax

 

 

 

 

Pipeline - Container Image for Lambda

 

 

 

 

참고 블로그

프로세스 이름으로 종료시키기

https://appia.tistory.com/780

 

파이썬[Python] 실행파일 이름으로 프로세스 죽이기

파이썬[Python] 실행파일 이름으로 프로세스 죽이기 이번 포스팅은 프로세스 이름으로 프로세스 죽이는 방법에 대해서 이야기를 해보고자 합니다. 실제로 저의 경우 파이썬으로 엑셀 차트를 그리

appia.tistory.com