134 lines
4.2 KiB
Groovy
134 lines
4.2 KiB
Groovy
def dockerImage
|
|
|
|
pipeline {
|
|
agent {
|
|
docker {
|
|
image 'cicd/ubuntu:22.04-docker-py312-jdk8-nodejs20-mvn389'
|
|
args '-u root:root -v /var/run/docker.sock:/var/run/docker.sock'
|
|
}
|
|
}
|
|
|
|
environment {
|
|
GIT_REPO = 'https://wdxz-gitea.best-envision.com/qiaoxinjiu/effekt-interface.git'
|
|
GIT_CREDENTIALS_ID = 'ebe42f70-146f-4a4b-8090-eded24a77173'
|
|
|
|
HARBOR_URL = '39.170.26.156:8443'
|
|
HARBOR_PROJECT = 'effekt'
|
|
IMAGE_NAME = 'effekt-interface'
|
|
IMAGE = "${HARBOR_URL}/${HARBOR_PROJECT}/${IMAGE_NAME}"
|
|
IMAGE_TAG = 'latest'
|
|
HARBOR_CREDENTIALS_ID = '3a4a4463-784d-4e91-9457-9dfd64722ecb'
|
|
|
|
APP_NAME = 'effekt-interface'
|
|
HOST_PORT = '5010'
|
|
CONTAINER_PORT = '5010'
|
|
|
|
DEPLOY_HOST = '39.170.26.156'
|
|
DEPLOY_PORT = '22'
|
|
DEPLOY_USER = 'root'
|
|
DEPLOY_CREDENTIALS_ID = '82d14a67-250f-46b0-8b13-50e874a11933'
|
|
}
|
|
|
|
options {
|
|
timestamps()
|
|
disableConcurrentBuilds()
|
|
buildDiscarder(logRotator(numToKeepStr: '20'))
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout') {
|
|
steps {
|
|
checkout([
|
|
$class: 'GitSCM',
|
|
branches: [[name: '*/master']],
|
|
userRemoteConfigs: [[
|
|
url: env.GIT_REPO,
|
|
credentialsId: env.GIT_CREDENTIALS_ID
|
|
]]
|
|
])
|
|
}
|
|
}
|
|
|
|
stage('Build Image') {
|
|
steps {
|
|
script {
|
|
dockerImage = docker.build("${env.IMAGE}:${env.IMAGE_TAG}")
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Push Image To Harbor') {
|
|
steps {
|
|
script {
|
|
docker.withRegistry("https://${env.HARBOR_URL}", env.HARBOR_CREDENTIALS_ID) {
|
|
dockerImage.push(env.IMAGE_TAG)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Deploy') {
|
|
steps {
|
|
script {
|
|
def remote = [
|
|
name: 'deploy-server',
|
|
host: env.DEPLOY_HOST,
|
|
port: env.DEPLOY_PORT as int,
|
|
user: env.DEPLOY_USER,
|
|
allowAnyHosts: true,
|
|
credentialsId: env.DEPLOY_CREDENTIALS_ID
|
|
]
|
|
|
|
withCredentials([usernamePassword(credentialsId: env.HARBOR_CREDENTIALS_ID, usernameVariable: 'HARBOR_USER', passwordVariable: 'HARBOR_PASS')]) {
|
|
sshCommand remote: remote, command: """
|
|
set -e
|
|
docker login ${env.HARBOR_URL} -u ${HARBOR_USER} -p '${HARBOR_PASS}'
|
|
docker pull ${env.IMAGE}:${env.IMAGE_TAG}
|
|
docker rm -f ${env.APP_NAME} || true
|
|
docker run -d \\
|
|
--name ${env.APP_NAME} \\
|
|
--restart always \\
|
|
-p ${env.HOST_PORT}:${env.CONTAINER_PORT} \\
|
|
${env.IMAGE}:${env.IMAGE_TAG}
|
|
docker ps --filter name=${env.APP_NAME}
|
|
""", sudo: false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Verify') {
|
|
steps {
|
|
script {
|
|
def remote = [
|
|
name: 'deploy-server',
|
|
host: env.DEPLOY_HOST,
|
|
port: env.DEPLOY_PORT as int,
|
|
user: env.DEPLOY_USER,
|
|
allowAnyHosts: true,
|
|
credentialsId: env.DEPLOY_CREDENTIALS_ID
|
|
]
|
|
|
|
sshCommand remote: remote, command: """
|
|
set -e
|
|
docker ps --filter name=${env.APP_NAME}
|
|
curl -I http://127.0.0.1:${env.HOST_PORT}
|
|
""", sudo: false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
always {
|
|
sh 'docker image prune -f || true'
|
|
}
|
|
success {
|
|
echo 'Pipeline finished successfully.'
|
|
}
|
|
failure {
|
|
echo 'Pipeline failed.'
|
|
}
|
|
}
|
|
}
|