728x90
728x90
GitLab 접속 후 Access Tokens 생성
- http://192.168.22.128:9876/devops/ > Settings > Access Tokens
- Token name : Token1
- Expiration date : 2023-12-31
- Select scpes : api
Jenkins 접속 후 Credential 생성
- http://192.168.22.128:30040/jenkins/ > Jenkins 관리 > 아래로 스크롤하여 Manage Credentials > Stores scoped to Jenkins > Jenkins > Global credentials (unrestricted) > Add Credentials
- ID/PW : admin/admin
- Username, Password, ID, Description 작성 후 OK
Jenkins 접속 후 Project 생성
새로운 Item > 정보 입력 > OK > 저장
- Enter an item name : 프로젝트 이름 (DevOps_Project)
- 종류 : Pipeline
좌측 메뉴에서 '구성' 클릭하고 Project 정보 수정 (DevOps_Project > 구성 > Pipeline)
- Template : ProObject21
- Script
pipeline {
agent any
environment {
GIT_BRANCH = 'main'
CREDENTIALS_ID = 'kbinsure'
GIT_URL = 'http://192.168.190.176:9000/devops/devops1.git'
BUILD_DIRECTORY = 'ChaeApp1'
WAR_FILE_NAME = 'ChaeApp1-21'
JEUS_IP = '192.168.190.176'
JEUS_PORT = '10000'
TARGET_SERVER = 'ProObjectSvr1'
TARGET_SERVER_IP = '192.168.190.176'
TARGET_SERVER_PORT = '10040'
APPLICATION_ID = 'ChaeApp1-21'
}
stages {
stage('Git Clone'){
steps{
git branch: "${GIT_BRANCH}", credentialsId: "${CREDENTIALS_ID}", url: "${GIT_URL}"
}
}
stage('Configure Properties'){
steps{
dir("$BUILD_DIRECTORY") {
sh'''
PROPERTIES_FILE=./src/main/resources/application.yml
echo \
'
frame:
proobject:
manager:
service-url: http://'${TARGET_SERVER_IP}':'${TARGET_SERVER_PORT}'/'${WAR_FILE_NAME}'
application-id: '${APPLICATION_ID}'
manager-service-url: '${JEUS_IP}':'${JEUS_PORT} >> $PROPERTIES_FILE
'''
}
}
}
stage('Build Project'){
steps{
dir("$BUILD_DIRECTORY") {
sh'''
mvn clean install
'''
}
}
}
stage('Register Application'){
steps{
sh'''
touch input.json
echo \
'{
"id" : "'${APPLICATION_ID}'",
"serviceUrl" : "http://'${TARGET_SERVER_IP}':'${TARGET_SERVER_PORT}'/'${WAR_FILE_NAME}'",
"managedServerId" : "'${TARGET_SERVER}'"
}' > input.json
'''
script {
httpRequest(
httpMode: 'POST', contentType: 'APPLICATION_JSON', validResponseCodes: '200,409',
url: "http://${JEUS_IP}:${JEUS_PORT}/api/proobject/applications/register",
requestBody: readJSON(file: 'input.json').toString()
)
httpRequest(
httpMode: 'POST', contentType: 'TEXT_PLAIN', validResponseCodes: '200,409',
url: "http://${JEUS_IP}:${JEUS_PORT}/api/proobject/applications/${APPLICATION_ID}/xmls?name=proobject.xml",
requestBody: readFile(file: "${BUILD_DIRECTORY}/src/main/webapp/WEB-INF/proobject/proobject.xml").toString()
)
}
}
}
stage('Copy Artifacts'){
steps{
script {
try {
copyArtifacts(
projectName: currentBuild.projectName, selector: lastSuccessful(), filter: '**/*.war', target: 'copy'
)
} catch (e) {
}
}
sh'''
DIR="$WORKSPACE/copy/${BUILD_DIRECTORY}/target/"
if [ -d "$DIR" ]; then
cd copy/${BUILD_DIRECTORY}/target && mv *.war backup.war
fi
'''
}
}
stage('Deploy Application'){
steps{
script {
sh'''
#!/bin/bash
cd $JEUS_HOME/bin
./jeusadmin -host ${JEUS_IP} -port ${JEUS_PORT} -u jeus -p jeus \
'"install-application -id '${APPLICATION_ID}' '$WORKSPACE'/'${BUILD_DIRECTORY}'/target/'${WAR_FILE_NAME}'.war -f"'
DEPLOY=$(./jeusadmin -host ${JEUS_IP} -port ${JEUS_PORT} -u jeus -p jeus '"deploy-application '${APPLICATION_ID}' -servers '${TARGET_SERVER}'"')
if echo "$DEPLOY" | grep 'already RUNNING'; then
REDEPLOY=$(./jeusadmin -host ${JEUS_IP} -port ${JEUS_PORT} -u jeus -p jeus '"redeploy-application '${APPLICATION_ID}'"')
if echo "$REDEPLOY" | grep 'failed'; then
DIR="$WORKSPACE/copy/${BUILD_DIRECTORY}/target/"
if [ -d "$DIR" ]; then
./jeusadmin -host ${JEUS_IP} -port ${JEUS_PORT} -u jeus -p jeus \
'"install-application -id '${APPLICATION_ID}' '$WORKSPACE'/copy/'${BUILD_DIRECTORY}'/target/backup.war -f"'
./jeusadmin -host ${JEUS_IP} -port ${JEUS_PORT} -u jeus -p jeus '"deploy-application '${APPLICATION_ID}' -servers '${TARGET_SERVER}'"'
rm -rf $WORKSPACE/copy
exit 1
else
exit 1
fi
fi
else
if echo "$DEPLOY" | grep 'failed'; then
DIR="$WORKSPACE/copy/${BUILD_DIRECTORY}/target/"
if [ -d "$DIR" ]; then
./jeusadmin -host ${JEUS_IP} -port ${JEUS_PORT} -u jeus -p jeus \
'"install-application -id '${APPLICATION_ID}' '$WORKSPACE'/copy/'${BUILD_DIRECTORY}'/target/backup.war -f"'
./jeusadmin -host ${JEUS_IP} -port ${JEUS_PORT} -u jeus -p jeus '"deploy-application '${APPLICATION_ID}' -servers '${TARGET_SERVER}'"'
rm -rf $WORKSPACE/copy
exit 1
else
exit 1
fi
fi
fi
rm -rf $WORKSPACE/copy
'''
script {
archiveArtifacts artifacts: "${BUILD_DIRECTORY}/target/${WAR_FILE_NAME}.war"
}
}
}
}
}
}
WebHook 설정 (DevOps_Project > 구성 > Pipeline)
- Build when a change is pushed to GitLab : Check
- Push Events : Check
- Opened Merge Request Events : Check
- Rebuild open Merge Requests : Never
- Approved Merge Requests : Check
- Comments : Check
- Comment (regex) for triggering a buld: Jenkins please retry a build
- 고급 > Secret token > Generate
- URL : http://192.168.22.128:30040/jenkins/project/DevOps_Project
- Secret Token : ca2672d20e74714b716ecf99694a1e5d
정보 입력 끝났다면 Apply > 저장
GitLab에서 WebHook 등록
GitLab 접속 > 로그인 > DevOps 프로젝트 선택 > Settings > Webhooks > 정보 기입 > Add webhook
- http://192.168.22.128:30040/jenkins/project/DevOps_Project
728x90
320x100