코드 수정이 많이 없을줄 알았는데 하다보니 계속 건드리게 되서 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. 테스트
Pipeline - Container Image for Lambda
참고 블로그
프로세스 이름으로 종료시키기
'1인개발 메이킹로그 > [Infra+k8s+App] 가상화폐 자동매매' 카테고리의 다른 글
[테스트] image 생성 및 pod 생성 (0) | 2023.06.15 |
---|---|
[AWS-Server] Troubleshooting - ModuleNotFoundError: No module named 'pyupbit' (0) | 2023.05.20 |
[AWS-Server] 6. S3 bucket 에 프로세스 로그 저장 (0) | 2023.04.07 |
[AWS-Server] 5. 람다함수에서 EC2 로 명령 전달 (0) | 2023.04.04 |
[AWS-Server] 4. 람다 코드 수정 - dynamoDB 테이블 수정 (0) | 2023.04.04 |