150 lines
5.1 KiB
Plaintext
150 lines
5.1 KiB
Plaintext
pipeline {
|
|
agent any
|
|
|
|
options {
|
|
timestamps()
|
|
disableConcurrentBuilds()
|
|
}
|
|
|
|
parameters {
|
|
choice(
|
|
name: 'DEPLOY_MODE',
|
|
choices: ['BUILD_AND_DEPLOY', 'DEPLOY_ONLY'],
|
|
description: 'BUILD_AND_DEPLOY builds and deploys a new image; DEPLOY_ONLY deploys an existing Harbor image tag'
|
|
)
|
|
string(
|
|
name: 'IMAGE_TAG',
|
|
defaultValue: '',
|
|
description: 'Image tag to deploy. Required for DEPLOY_ONLY; empty BUILD_AND_DEPLOY uses current commit'
|
|
)
|
|
}
|
|
|
|
environment {
|
|
APP_NAME = 'big-party-rpc-script'
|
|
REGISTRY_HOST = '192.168.2.160:8088'
|
|
REGISTRY_NAMESPACE = 'zhoubao'
|
|
IMAGE_REPOSITORY = "${REGISTRY_HOST}/${REGISTRY_NAMESPACE}/${APP_NAME}"
|
|
DEPLOY_HOST = 'root@192.168.2.226'
|
|
DEPLOY_DIR = "/opt/${APP_NAME}"
|
|
GITLAB_PROXY_HOST = '192.168.2.160'
|
|
DOCKER_BUILDKIT = '1'
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout') {
|
|
steps {
|
|
checkout scm
|
|
}
|
|
}
|
|
|
|
stage('Prepare') {
|
|
steps {
|
|
script {
|
|
env.GIT_COMMIT_SHORT = sh(script: 'git rev-parse --short=12 HEAD', returnStdout: true).trim()
|
|
env.VERSION = sh(script: 'git describe --tags --always --dirty', returnStdout: true).trim()
|
|
|
|
if (params.DEPLOY_MODE == 'DEPLOY_ONLY') {
|
|
if (!params.IMAGE_TAG?.trim()) {
|
|
error('IMAGE_TAG is required when DEPLOY_MODE=DEPLOY_ONLY')
|
|
}
|
|
env.DEPLOY_IMAGE_TAG = params.IMAGE_TAG.trim()
|
|
} else {
|
|
env.DEPLOY_IMAGE_TAG = params.IMAGE_TAG?.trim() ? params.IMAGE_TAG.trim() : env.GIT_COMMIT_SHORT
|
|
}
|
|
|
|
echo "Deploy mode: ${params.DEPLOY_MODE}"
|
|
echo "Image: ${env.IMAGE_REPOSITORY}:${env.DEPLOY_IMAGE_TAG}"
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Test') {
|
|
when {
|
|
expression { params.DEPLOY_MODE == 'BUILD_AND_DEPLOY' }
|
|
}
|
|
steps {
|
|
withCredentials([sshUserPrivateKey(credentialsId: 'gitlab-go-deps-ssh-key', keyFileVariable: 'GIT_SSH_KEY')]) {
|
|
sh '''
|
|
git config --global url."git@gitlab.fuhua91.com:".insteadOf "https://gitlab.fuhua91.com/"
|
|
git config --global url."git@gitlab.fuhua91.com:".insteadOf "http://gitlab.fuhua91.com/"
|
|
export GIT_SSH_COMMAND="ssh -i ${GIT_SSH_KEY} -o StrictHostKeyChecking=no"
|
|
go env -w GOPROXY=https://goproxy.cn,direct
|
|
go env -w GOPRIVATE=gitlab.fuhua91.com
|
|
go env -w GOINSECURE=gitlab.fuhua91.com
|
|
go test ./...
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Build Image') {
|
|
when {
|
|
expression { params.DEPLOY_MODE == 'BUILD_AND_DEPLOY' }
|
|
}
|
|
steps {
|
|
withCredentials([sshUserPrivateKey(credentialsId: 'gitlab-go-deps-ssh-key', keyFileVariable: 'GIT_SSH_KEY')]) {
|
|
sh '''
|
|
docker build \
|
|
--file deploy/Dockerfile \
|
|
--add-host gitlab.fuhua91.com:${GITLAB_PROXY_HOST} \
|
|
--secret id=git_ssh_key,src=${GIT_SSH_KEY} \
|
|
--build-arg VERSION=${VERSION} \
|
|
--tag ${IMAGE_REPOSITORY}:${DEPLOY_IMAGE_TAG} \
|
|
--tag ${IMAGE_REPOSITORY}:latest \
|
|
.
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Push Image') {
|
|
when {
|
|
expression { params.DEPLOY_MODE == 'BUILD_AND_DEPLOY' }
|
|
}
|
|
steps {
|
|
withCredentials([usernamePassword(credentialsId: 'docker-registry', usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')]) {
|
|
sh '''
|
|
echo "${REGISTRY_PASS}" | docker login "${REGISTRY_HOST}" -u "${REGISTRY_USER}" --password-stdin
|
|
docker push ${IMAGE_REPOSITORY}:${DEPLOY_IMAGE_TAG}
|
|
docker push ${IMAGE_REPOSITORY}:latest
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Deploy') {
|
|
steps {
|
|
withCredentials([usernamePassword(credentialsId: 'docker-registry', usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')]) {
|
|
sshagent(credentials: ['deploy-server-ssh-key']) {
|
|
sh '''
|
|
ssh -o StrictHostKeyChecking=no ${DEPLOY_HOST} "mkdir -p ${DEPLOY_DIR}/deploy ${DEPLOY_DIR}/configs ${DEPLOY_DIR}/logs"
|
|
scp -O -o StrictHostKeyChecking=no deploy/docker-compose.yaml ${DEPLOY_HOST}:${DEPLOY_DIR}/deploy/docker-compose.yaml
|
|
scp -O -o StrictHostKeyChecking=no configs/config.yaml ${DEPLOY_HOST}:${DEPLOY_DIR}/configs/config.yaml
|
|
printf '%s' "${REGISTRY_PASS}" | ssh -o StrictHostKeyChecking=no ${DEPLOY_HOST} "docker login '${REGISTRY_HOST}' -u '${REGISTRY_USER}' --password-stdin"
|
|
ssh -o StrictHostKeyChecking=no ${DEPLOY_HOST} "
|
|
cd ${DEPLOY_DIR}/deploy &&
|
|
printf '%s\\n' \
|
|
'IMAGE_REPOSITORY=${IMAGE_REPOSITORY}' \
|
|
'IMAGE_TAG=${DEPLOY_IMAGE_TAG}' \
|
|
'HTTP_PORT=20200' \
|
|
'GRPC_PORT=20201' \
|
|
'CONFIG_FILE=../configs/config.yaml' \
|
|
'LOG_DIR=../logs' > .env &&
|
|
docker-compose pull &&
|
|
docker-compose up -d &&
|
|
docker image prune -f
|
|
"
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
success {
|
|
echo "Deployed ${IMAGE_REPOSITORY}:${DEPLOY_IMAGE_TAG}"
|
|
}
|
|
}
|
|
}
|