IM_NEW/Jenkinsfile

141 lines
3.6 KiB
Groovy

pipeline {
agent { label '构建机1' }
environment {
IMAGE_PREFIX = "im"
IMAGE_TAG = "${BUILD_NUMBER}"
DOCKER_CREDS = 'im_harbor_key'
DOCKER_BUILDKIT = "1"
// Harbor 示例:
// REGISTRY = "harbor.xxx.com/im"
REGISTRY_HOST = "reg.nxsir.cn"
REGISTRY = "reg.nxsir.cn/im"
}
stages {
stage('拉取代码') {
steps {
checkout scm
}
}
stage('Login Registry') {
steps {
withCredentials([
usernamePassword(
credentialsId: "${DOCKER_CREDS}",
usernameVariable: 'DOCKER_USERNAME',
passwordVariable: 'DOCKER_PASSWORD'
)
]) {
sh """
set -e
echo "\$DOCKER_PASSWORD" | sudo docker login ${REGISTRY_HOST} -u "\$DOCKER_USERNAME" --password-stdin
"""
}
}
}
stage('构建 UserService') {
steps {
script {
buildImage(
"user-service",
"User.WebApi/Dockerfile"
)
}
}
}
stage('构建 ContactService') {
steps {
script {
buildImage(
"contact-service",
"ContactService.WebApi/Dockerfile"
)
}
}
}
stage('构建 GroupService') {
steps {
script {
buildImage(
"group-service",
"GroupService.WebApi/Dockerfile"
)
}
}
}
stage('构建 MessageService') {
steps {
script {
buildImage(
"message-service",
"MessageService.WebApi/Dockerfile"
)
}
}
}
stage('构建 ConnectorService') {
steps {
script {
buildImage(
"connector-service",
"ConnectorService/Dockerfile"
)
}
}
}
}
post {
success {
echo "全部镜像构建完成"
}
failure {
echo "镜像构建失败"
}
}
}
def buildImage(serviceName, dockerfilePath) {
def imageName = "${env.IMAGE_PREFIX}-${serviceName}:${env.IMAGE_TAG}"
def latestName = "${env.IMAGE_PREFIX}-${serviceName}:latest"
sh """
sudo docker build \
--pull \
-t ${imageName} \
-t ${latestName} \
-f ${dockerfilePath} .
"""
if (env.REGISTRY?.trim()) {
sh """
sudo docker tag ${imageName} ${env.REGISTRY}/${serviceName}:${env.IMAGE_TAG}
sudo docker tag ${latestName} ${env.REGISTRY}/${serviceName}:latest
sudo docker push ${env.REGISTRY}/${serviceName}:${env.IMAGE_TAG}
sudo docker push ${env.REGISTRY}/${serviceName}:latest
sudo docker rmi ${env.REGISTRY}/${serviceName}:${env.IMAGE_TAG} || true
sudo docker rmi ${env.REGISTRY}/${serviceName}:latest || true
"""
}
sh """
sudo docker rmi ${imageName} || true
sudo docker rmi ${latestName} || true
sudo docker builder prune -f || true
"""
}