Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- /etc/network/interfaces
- 스프링부트핵심가이드
- 자료구조와함께배우는알고리즘입문
- 자바편
- 코드로배우는스프링웹프로젝트
- 처음 만나는 AI 수학 with Python
- resttemplate
- baeldung
- Kernighan의 C언어 프로그래밍
- 티스토리 쿠키 삭제
- 네트워크 설정
- 리눅스
- 코드로배우는스프링부트웹프로젝트
- network configuration
- 데비안
- 알파회계
- 페이징
- 처음 만나는 AI수학 with Python
- 이터레이터
- 구멍가게코딩단
- 서버설정
- 스프링 시큐리티
- d
- iterator
- 자료구조와 함께 배우는 알고리즘 입문
- 친절한SQL튜닝
- 선형대수
- ㅒ
- 목록처리
- GIT
Archives
- Today
- Total
bright jazz music
Jenkinsfile 본문
/*사용할 전역 변수 선언 */
def target = "EcertAdmin*.jar"
def target_dir = "/home/coffee/chainverse-apps/ecertificate/back-apps/icert-admin"
def backup_dir = "${target_dir}/backup"
def docker_container="icert-admin"
pipeline {
agent {
label 'docker-agent-for-node-and-java'
}
stages {
stage('kill current java process') {
/*
먼저 192.168.2.104에서 coffee를 docker 그룹에 포함하여 coffee가 도커 명령어를 실행할 수 있어야 함.
sudo usermod -aG docker coffee (104번에서 수행되어야 하며, 입력 후 logout했다가 다시 로그인 해야 적용될 수 있음.)
*/
steps {
script {
/* Java 프로세스 종료*/
sh '''
#pid=$(ssh coffee@192.168.2.104 "docker exec icert-admin bash -c 'ps -ef | grep java | grep -v grep' | awk '{print \$2}'")
#pid=$(ssh coffee@192.168.2.104 "docker exec icert-admin bash -c 'ps -ef | grep java | grep -v grep' | awk '{print \\\$2}'")
pid=$(ssh coffee@192.168.2.104 "docker exec ${docker_container} bash -c 'ps -ef | grep java | grep -v grep' | awk '{print \\\$2}'")
if [ "$pid" != "" ]; then
ssh coffee@192.168.2.104 "docker exec ${docker_container} bash -c 'kill -9 $pid'"
fi
'''
}
}
}
stage('current Jar backup and remove') {
/* 먼저 192.168.2.104에서 coffee를 docker 그룹에 포함하여 coffee가 도커 명령어를 실행할 수 있어야 함.*/
steps {
script {
/* 기존 JAR 파일 백업: /home/coffee/에 위치하는 remove_and_backup.sh 실행 *아규먼트 3개 필요 */
sh "ssh coffee@192.168.2.104 \"/home/coffee/remove_and_backup.sh ${target} ${target_dir} ${backup_dir}\""
}
}
}
stage('Set Permissions') {
steps {
sh 'chmod +x gradlew'
}
}
stage('compile') {
steps {
sh "./gradlew compileJava"
}
}
stage('Unit Test') {
steps {
sh "./gradlew test"
}
}
stage('bootJar') {
steps {
sh "./gradlew bootJar"
}
}
/*
아래 작업 전에 도커 제킨스 에이전트가 실행될 서버(192.168.2.112)에서 ssh 키 쌍 생성하여 공개키를 104에 전달하는 작업 필요
ssh-keygen -t rsa -b 4096
ssh-copy-id coffee@192.168.2.104
ssh coffee@192.168.2.104
도커 컨테이너와 도커 호스트 간 키 공유(디렉토리 마운트): jenkins의 clouds 설정의 mount 항목에서 다음의 값 입력type=bind,src=/home/coffee/.ssh,dst=/root/.ssh
작업을 수행하기 위해 생성된 도커 컨테이너를 docker inspect <dockerID 또는 이름> 으로 살펴보면 마운트 확인 가능
*/
stage('new Jar deploy') {
/*scp로 파일 전송 후, 도커 컨테이너 내부에서 해당 파일 실행*/
steps {
script {
sh """
scp ./build/libs/${target} coffee@192.168.2.104:${target_dir}/
ssh coffee@192.168.2.104 'docker exec ${docker_container} bash -c "\
nohup java -jar ${target_dir}/${target} &"'
"""
}
}
}
}
}
/* 아래는remove_and_backup.sh의 내용*/
/*
#!/bin/bash
#file에 디렉터리 경로를 포함한 파일명 담기
#basename 함수를 사용하여 경로를 제외한 파일명만 추출
#추출한 파일명에 "오늘일자.bak" 붙여서 backup 디렉터리로 이동
#변수선언
target=$1
target_dir=$2
backup_dir=$3
#아규먼트 제공여부 확인. -z : 빈 문자열 여부 확인.
if [ -z "${target}" ] || [ -z "${target_dir}" ] || [ -z "${backup_dir}" ]; then
echo "#### ERROR: Please provide three appropriate arguments! (target, target_dir, backup_dir) ####"
exit 1
fi
# target_dir가 존재하는지 확인. -d : 디렉터리 여부 확인. 디렉터리인 경우 true
if [ ! -d "${target_dir}" ]; then
echo "#### WARNING: ${target_dir} does not exist! ####"
exit 1
fi
# backup_dir가 존재하지 않으면 생성
if [ ! -d "${backup_dir}" ]; then
mkdir -p ${backup_dir}
fi
for file in ${target_dir}/${target};
do
#파일이 실제로 존재하지 않거나 일반파일이 아닌 경우 건너뜀
if [ ! -f "$file" ]; then
echo "#### WARNING: $file does not exist or is not a regular file! ####"
continue
fi
base=$(basename $file)
mv ${file} ${backup_dir}/${base}.$(date +%Y%m%d%H%M%S).bak
# ex) target.20230921095711.bak
done
#사용하기 전chmod +x remove_and_backup.sh 명령어를 사용해 실행권한 부여할 것
*/
'OS 및 기타' 카테고리의 다른 글
어댑터 설정 변경 (0) | 2024.04.02 |
---|---|
Git 병합 (0) | 2024.03.07 |
백업 스크립트 (0) | 2023.09.21 |
젠킨스 트리거 설정 (0) | 2023.09.18 |
Nginx 설정 (리액트 index.html) (0) | 2023.05.03 |
Comments