diff --git a/Jenkinsfile b/Jenkinsfile index b087834..8ddd681 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,28 +2,34 @@ pipeline { agent any parameters { - string(name: 'BRANCH', defaultValue: 'main', description: 'Git 分支名') choice(name: 'APP', choices: ['tenant-platform', 'ops-platform'], description: '要构建的 Web 应用') string(name: 'IMAGE_TAG', defaultValue: 'latest', description: '镜像 Tag') booleanParam(name: 'DEPLOY', defaultValue: true, description: '构建后是否自动部署') } environment { - ACR_REGISTRY = 'crpi-n44qjpuucgjt8e8c.cn-beijing.personal.cr.aliyuncs.com' - ACR_NAMESPACE = 'xuqmgroup' - ACR_USERNAME = 'xuqinmin12' - PROD_HOST = '106.54.23.149' - PROD_USER = 'ubuntu' - COMPOSE_FILE = '/opt/xuqm/deploy/compose.production.yaml' + ACR_REGISTRY = 'crpi-n44qjpuucgjt8e8c.cn-beijing.personal.cr.aliyuncs.com' + ACR_NAMESPACE = 'xuqmgroup' + ACR_USERNAME = 'xuqinmin12' + PROD_HOST = '106.54.23.149' + PROD_USER = 'ubuntu' + COMPOSE_FILE = '/opt/xuqm/deploy/compose.production.yaml' DOCKER_BUILDKIT = '1' } + options { + timeout(time: 20, unit: 'MINUTES') + buildDiscarder(logRotator(numToKeepStr: '20')) + disableConcurrentBuilds() + } + stages { stage('Checkout') { steps { - checkout([$class: 'GitSCM', - branches: [[name: "*/${params.BRANCH}"]], - extensions: [], + checkout([ + $class: 'GitSCM', + branches: [[name: 'main']], + extensions: [[$class: 'CleanBeforeCheckout']], userRemoteConfigs: scm.userRemoteConfigs ]) } @@ -34,16 +40,16 @@ pipeline { script { switch (params.APP) { case 'tenant-platform': - env.IMAGE_NAME = 'tenant-web' - env.DOCKERFILE = 'Dockerfile.tenant' + env.IMAGE_NAME = 'tenant-web' + env.DOCKERFILE = 'Dockerfile.tenant' env.DEPLOY_SERVICE = 'tenant-web' - env.BUILD_ARGS = '--build-arg TENANT_APP_BASE=/ --build-arg TENANT_API_BASE_URL=/api' + env.BUILD_ARGS = '--build-arg TENANT_APP_BASE=/ --build-arg TENANT_API_BASE_URL=/api' break case 'ops-platform': - env.IMAGE_NAME = 'ops-web' - env.DOCKERFILE = 'Dockerfile.ops' + env.IMAGE_NAME = 'ops-web' + env.DOCKERFILE = 'Dockerfile.ops' env.DEPLOY_SERVICE = 'ops-web' - env.BUILD_ARGS = '--build-arg OPS_APP_BASE=/ --build-arg OPS_API_BASE_URL=/api' + env.BUILD_ARGS = '--build-arg OPS_APP_BASE=/ --build-arg OPS_API_BASE_URL=/api' break default: error("Unsupported APP: ${params.APP}") @@ -59,8 +65,8 @@ pipeline { def fullImage = "${env.ACR_REGISTRY}/${env.ACR_NAMESPACE}/${env.IMAGE_NAME}:${params.IMAGE_TAG}" bat """ docker login ${env.ACR_REGISTRY} -u ${env.ACR_USERNAME} -p %ACR_PASS% - docker pull ${fullImage} || exit 0 - docker build -f ${env.DOCKERFILE} ${env.BUILD_ARGS} --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from ${fullImage} -t ${fullImage} . + docker pull --platform=linux/amd64 ${fullImage} || echo Pull failed, will build fresh + docker build --platform=linux/amd64 -f ${env.DOCKERFILE} ${env.BUILD_ARGS} --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from ${fullImage} -t ${fullImage} . docker push ${fullImage} docker rmi ${fullImage} || exit 0 """ @@ -76,7 +82,7 @@ pipeline { script { def fullImage = "${env.ACR_REGISTRY}/${env.ACR_NAMESPACE}/${env.IMAGE_NAME}:${params.IMAGE_TAG}" bat """ - ssh -i "%SSH_KEY%" -o StrictHostKeyChecking=no ${env.PROD_USER}@${env.PROD_HOST} "docker pull ${fullImage} && docker compose -f ${env.COMPOSE_FILE} up -d --no-deps ${env.DEPLOY_SERVICE} && docker image prune -f" + ssh -i "%SSH_KEY%" -o StrictHostKeyChecking=no ${env.PROD_USER}@${env.PROD_HOST} "docker pull ${fullImage} && docker compose -f ${env.COMPOSE_FILE} up -d --no-deps --force-recreate ${env.DEPLOY_SERVICE} && docker image prune -f" """ } } diff --git a/Jenkinsfile.ops-web b/Jenkinsfile.ops-web index bc7be6a..37178ba 100644 --- a/Jenkinsfile.ops-web +++ b/Jenkinsfile.ops-web @@ -2,28 +2,40 @@ pipeline { agent any parameters { - string(name: 'BRANCH', defaultValue: 'main', description: 'Git 分支名') string(name: 'IMAGE_TAG', defaultValue: 'latest', description: '镜像 Tag') booleanParam(name: 'DEPLOY', defaultValue: true, description: '构建后是否自动部署') } environment { - ACR_REGISTRY = 'crpi-n44qjpuucgjt8e8c.cn-beijing.personal.cr.aliyuncs.com' - ACR_NAMESPACE = 'xuqmgroup' - ACR_USERNAME = 'xuqinmin12' - PROD_HOST = '106.54.23.149' - PROD_USER = 'ubuntu' - COMPOSE_FILE = '/opt/xuqm/deploy/compose.production.yaml' + ACR_REGISTRY = 'crpi-n44qjpuucgjt8e8c.cn-beijing.personal.cr.aliyuncs.com' + ACR_NAMESPACE = 'xuqmgroup' + ACR_USERNAME = 'xuqinmin12' + PROD_HOST = '106.54.23.149' + PROD_USER = 'ubuntu' + COMPOSE_FILE = '/opt/xuqm/deploy/compose.production.yaml' DOCKER_BUILDKIT = '1' - IMAGE_NAME = 'ops-web' - DOCKERFILE = 'Dockerfile.ops' - DEPLOY_SERVICE = 'ops-web' - BUILD_ARGS = '--build-arg OPS_APP_BASE=/ --build-arg OPS_API_BASE_URL=/api' + IMAGE_NAME = 'ops-web' + DOCKERFILE = 'Dockerfile.ops' + DEPLOY_SERVICE = 'ops-web' + BUILD_ARGS = '--build-arg OPS_APP_BASE=/ --build-arg OPS_API_BASE_URL=/api' + } + + options { + timeout(time: 20, unit: 'MINUTES') + buildDiscarder(logRotator(numToKeepStr: '20')) + disableConcurrentBuilds() } stages { stage('Checkout') { - steps { checkout scm } + steps { + checkout([ + $class: 'GitSCM', + branches: [[name: 'main']], + extensions: [[$class: 'CleanBeforeCheckout']], + userRemoteConfigs: scm.userRemoteConfigs + ]) + } } stage('Docker Build & Push') { @@ -50,7 +62,7 @@ pipeline { script { def fullImage = "${env.ACR_REGISTRY}/${env.ACR_NAMESPACE}/${env.IMAGE_NAME}:${params.IMAGE_TAG}" bat """ - ssh -i "%SSH_KEY%" -o StrictHostKeyChecking=no ${env.PROD_USER}@${env.PROD_HOST} "docker pull ${fullImage} && docker compose -f ${env.COMPOSE_FILE} up -d --no-deps ${env.DEPLOY_SERVICE} && docker image prune -f" + ssh -i "%SSH_KEY%" -o StrictHostKeyChecking=no ${env.PROD_USER}@${env.PROD_HOST} "docker pull ${fullImage} && docker compose -f ${env.COMPOSE_FILE} up -d --no-deps --force-recreate ${env.DEPLOY_SERVICE} && docker image prune -f" """ } } diff --git a/Jenkinsfile.tenant-web b/Jenkinsfile.tenant-web index fa7b1b3..d627bd0 100644 --- a/Jenkinsfile.tenant-web +++ b/Jenkinsfile.tenant-web @@ -2,28 +2,40 @@ pipeline { agent any parameters { - string(name: 'BRANCH', defaultValue: 'main', description: 'Git 分支名') string(name: 'IMAGE_TAG', defaultValue: 'latest', description: '镜像 Tag') booleanParam(name: 'DEPLOY', defaultValue: true, description: '构建后是否自动部署') } environment { - ACR_REGISTRY = 'crpi-n44qjpuucgjt8e8c.cn-beijing.personal.cr.aliyuncs.com' - ACR_NAMESPACE = 'xuqmgroup' - ACR_USERNAME = 'xuqinmin12' - PROD_HOST = '106.54.23.149' - PROD_USER = 'ubuntu' - COMPOSE_FILE = '/opt/xuqm/deploy/compose.production.yaml' + ACR_REGISTRY = 'crpi-n44qjpuucgjt8e8c.cn-beijing.personal.cr.aliyuncs.com' + ACR_NAMESPACE = 'xuqmgroup' + ACR_USERNAME = 'xuqinmin12' + PROD_HOST = '106.54.23.149' + PROD_USER = 'ubuntu' + COMPOSE_FILE = '/opt/xuqm/deploy/compose.production.yaml' DOCKER_BUILDKIT = '1' - IMAGE_NAME = 'tenant-web' - DOCKERFILE = 'Dockerfile.tenant' - DEPLOY_SERVICE = 'tenant-web' - BUILD_ARGS = '--build-arg TENANT_APP_BASE=/ --build-arg TENANT_API_BASE_URL=/api' + IMAGE_NAME = 'tenant-web' + DOCKERFILE = 'Dockerfile.tenant' + DEPLOY_SERVICE = 'tenant-web' + BUILD_ARGS = '--build-arg TENANT_APP_BASE=/ --build-arg TENANT_API_BASE_URL=/api' + } + + options { + timeout(time: 20, unit: 'MINUTES') + buildDiscarder(logRotator(numToKeepStr: '20')) + disableConcurrentBuilds() } stages { stage('Checkout') { - steps { checkout scm } + steps { + checkout([ + $class: 'GitSCM', + branches: [[name: 'main']], + extensions: [[$class: 'CleanBeforeCheckout']], + userRemoteConfigs: scm.userRemoteConfigs + ]) + } } stage('Docker Build & Push') { @@ -50,7 +62,7 @@ pipeline { script { def fullImage = "${env.ACR_REGISTRY}/${env.ACR_NAMESPACE}/${env.IMAGE_NAME}:${params.IMAGE_TAG}" bat """ - ssh -i "%SSH_KEY%" -o StrictHostKeyChecking=no ${env.PROD_USER}@${env.PROD_HOST} "docker pull ${fullImage} && docker compose -f ${env.COMPOSE_FILE} up -d --no-deps ${env.DEPLOY_SERVICE} && docker image prune -f" + ssh -i "%SSH_KEY%" -o StrictHostKeyChecking=no ${env.PROD_USER}@${env.PROD_HOST} "docker pull ${fullImage} && docker compose -f ${env.COMPOSE_FILE} up -d --no-deps --force-recreate ${env.DEPLOY_SERVICE} && docker image prune -f" """ } } diff --git a/ops-platform/src/views/services/ServiceRequestsView.vue b/ops-platform/src/views/services/ServiceRequestsView.vue index 2050c3c..b2447b0 100644 --- a/ops-platform/src/views/services/ServiceRequestsView.vue +++ b/ops-platform/src/views/services/ServiceRequestsView.vue @@ -10,7 +10,6 @@ - - - -