Refactor Jenkinsfile to Harbor-based CI/CD with credentials
This commit is contained in:
parent
34321072d1
commit
26e48531e0
83
Jenkinsfile
vendored
83
Jenkinsfile
vendored
@ -1,18 +1,15 @@
|
|||||||
// BuildFlow CICD 流水线
|
|
||||||
// 结构对齐 rag-frontend,新增质量门禁(内嵌于 docker build)+ 部署后 HealthCheck。
|
|
||||||
// 链路:Checkout → Build(lint+check+build) → Push(私有 Registry 双 tag) → Deploy(host compose) → HealthCheck(5173)
|
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
agent any
|
agent any
|
||||||
|
|
||||||
environment {
|
environment {
|
||||||
CI_REGISTRY = '192.168.1.154:31010'
|
HARBOR = '43.134.235.58:58080'
|
||||||
REGISTRY_USER = 'docker'
|
IMAGE = "${HARBOR}/buildflow/buildflow-portal"
|
||||||
REGISTRY_PASS = credentials('docker-registry-credentials') // Jenkins 凭证;无则用下方硬编码登录
|
TAG = "${env.BUILD_NUMBER}"
|
||||||
DOCKER_IMAGE = 'docker/buildflow-web'
|
}
|
||||||
DOCKER_TAG = "${BUILD_NUMBER}"
|
|
||||||
DEPLOY_DIR = '/home/xiangning/deploy/buildflow'
|
options {
|
||||||
APP_PORT = '5173'
|
timeout(time: 30, unit: 'MINUTES')
|
||||||
|
buildDiscarder(logRotator(numToKeepStr: '10'))
|
||||||
}
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
@ -23,67 +20,41 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('Build') {
|
stage('Build Image') {
|
||||||
// docker build 内部执行 pnpm install → lint → check → build
|
|
||||||
// 任一步失败则本 stage 失败(质量门禁随构建同源,不依赖 agent 的 Node 环境)
|
|
||||||
steps {
|
steps {
|
||||||
sh """
|
sh """
|
||||||
docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} .
|
docker build -t ${IMAGE}:${TAG} .
|
||||||
docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest
|
docker tag ${IMAGE}:${TAG} ${IMAGE}:latest
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('Push') {
|
stage('Push Harbor') {
|
||||||
steps {
|
steps {
|
||||||
sh """
|
withCredentials([usernamePassword(credentialsId: 'harbor-credentials', usernameVariable: 'HARBOR_USER', passwordVariable: 'HARBOR_PASS')]) {
|
||||||
echo 'dockerxn001624.' | docker login -u docker --password-stdin ${CI_REGISTRY}
|
sh """
|
||||||
docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${CI_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_TAG}
|
echo "\$HARBOR_PASS" | docker login -u "\$HARBOR_USER" --password-stdin ${HARBOR}
|
||||||
docker tag ${DOCKER_IMAGE}:latest ${CI_REGISTRY}/${DOCKER_IMAGE}:latest
|
docker push ${IMAGE}:${TAG}
|
||||||
docker push ${CI_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_TAG}
|
docker push ${IMAGE}:latest
|
||||||
docker push ${CI_REGISTRY}/${DOCKER_IMAGE}:latest
|
docker logout ${HARBOR}
|
||||||
"""
|
"""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('Deploy') {
|
stage('Deploy') {
|
||||||
steps {
|
steps {
|
||||||
// 生成 host 网络的生产 compose:容器 5173 直接暴露在宿主,与 rag-frontend(80) 互不冲突
|
echo 'Deploy 待 Agent 就绪后启用'
|
||||||
sh """
|
|
||||||
mkdir -p ${DEPLOY_DIR}
|
|
||||||
cd ${DEPLOY_DIR}
|
|
||||||
cat > docker-compose.yml << 'DCOF'
|
|
||||||
services:
|
|
||||||
buildflow-web:
|
|
||||||
image: ${CI_REGISTRY}/${DOCKER_IMAGE}:latest
|
|
||||||
container_name: buildflow-web
|
|
||||||
network_mode: host
|
|
||||||
restart: unless-stopped
|
|
||||||
DCOF
|
|
||||||
docker compose pull
|
|
||||||
docker compose down --remove-orphans || true
|
|
||||||
docker compose up -d
|
|
||||||
docker image prune -f
|
|
||||||
docker compose ps
|
|
||||||
"""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage('HealthCheck') {
|
|
||||||
steps {
|
|
||||||
// 等待 Nginx 起来后探测本机 5173
|
|
||||||
sh """
|
|
||||||
sleep 3
|
|
||||||
wget -q --spider http://127.0.0.1:${APP_PORT}/ || exit 1
|
|
||||||
echo "=== HealthCheck OK: http://192.168.1.154:${APP_PORT} ==="
|
|
||||||
"""
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
post {
|
post {
|
||||||
success { echo '=== BuildFlow CI/CD SUCCESS ===' }
|
success { echo '=== build-flow.portal CI/CD SUCCESS ===' }
|
||||||
failure { echo '=== BuildFlow CI/CD FAILED ===' }
|
failure { echo '=== build-flow.portal CI/CD FAILED ===' }
|
||||||
always { deleteDir() }
|
always {
|
||||||
|
sh "docker rmi ${IMAGE}:${TAG} ${IMAGE}:latest || true"
|
||||||
|
deleteDir()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user