From 26e48531e097b123820fb6c96a5c7a59aa3688e4 Mon Sep 17 00:00:00 2001 From: xiangning Date: Thu, 2 Jul 2026 13:59:06 +0800 Subject: [PATCH] Refactor Jenkinsfile to Harbor-based CI/CD with credentials --- Jenkinsfile | 83 +++++++++++++++++------------------------------------ 1 file changed, 27 insertions(+), 56 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 443c809..0b2d186 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -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 { agent any environment { - CI_REGISTRY = '192.168.1.154:31010' - REGISTRY_USER = 'docker' - REGISTRY_PASS = credentials('docker-registry-credentials') // Jenkins 凭证;无则用下方硬编码登录 - DOCKER_IMAGE = 'docker/buildflow-web' - DOCKER_TAG = "${BUILD_NUMBER}" - DEPLOY_DIR = '/home/xiangning/deploy/buildflow' - APP_PORT = '5173' + HARBOR = '43.134.235.58:58080' + IMAGE = "${HARBOR}/buildflow/buildflow-portal" + TAG = "${env.BUILD_NUMBER}" + } + + options { + timeout(time: 30, unit: 'MINUTES') + buildDiscarder(logRotator(numToKeepStr: '10')) } stages { @@ -23,67 +20,41 @@ pipeline { } } - stage('Build') { - // docker build 内部执行 pnpm install → lint → check → build - // 任一步失败则本 stage 失败(质量门禁随构建同源,不依赖 agent 的 Node 环境) + stage('Build Image') { steps { sh """ - docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} . - docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest + docker build -t ${IMAGE}:${TAG} . + docker tag ${IMAGE}:${TAG} ${IMAGE}:latest """ } } - stage('Push') { + stage('Push Harbor') { steps { - sh """ - echo 'dockerxn001624.' | docker login -u docker --password-stdin ${CI_REGISTRY} - docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${CI_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_TAG} - docker tag ${DOCKER_IMAGE}:latest ${CI_REGISTRY}/${DOCKER_IMAGE}:latest - docker push ${CI_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_TAG} - docker push ${CI_REGISTRY}/${DOCKER_IMAGE}:latest - """ + withCredentials([usernamePassword(credentialsId: 'harbor-credentials', usernameVariable: 'HARBOR_USER', passwordVariable: 'HARBOR_PASS')]) { + sh """ + echo "\$HARBOR_PASS" | docker login -u "\$HARBOR_USER" --password-stdin ${HARBOR} + docker push ${IMAGE}:${TAG} + docker push ${IMAGE}:latest + docker logout ${HARBOR} + """ + } } } stage('Deploy') { steps { - // 生成 host 网络的生产 compose:容器 5173 直接暴露在宿主,与 rag-frontend(80) 互不冲突 - 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} ===" - """ + echo 'Deploy 待 Agent 就绪后启用' } } } post { - success { echo '=== BuildFlow CI/CD SUCCESS ===' } - failure { echo '=== BuildFlow CI/CD FAILED ===' } - always { deleteDir() } + success { echo '=== build-flow.portal CI/CD SUCCESS ===' } + failure { echo '=== build-flow.portal CI/CD FAILED ===' } + always { + sh "docker rmi ${IMAGE}:${TAG} ${IMAGE}:latest || true" + deleteDir() + } } }