fix(ci): 串行化生产部署防止并发 docker pull 竞争
多服务同时构建时 Deploy 阶段并发向同一台生产机 docker pull,
containerd content store 写入共享 layer 产生文件竞争导致 rename 失败。
加 lock('prod-deploy') 确保所有服务按序部署,并加 retry(3) 容忍偶发抖动。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
父节点
25e9bef745
当前提交
af922ae420
4
Jenkinsfile
vendored
4
Jenkinsfile
vendored
@ -55,9 +55,11 @@ pipeline {
|
|||||||
stage('Deploy to Production') {
|
stage('Deploy to Production') {
|
||||||
when { expression { return params.DEPLOY } }
|
when { expression { return params.DEPLOY } }
|
||||||
steps {
|
steps {
|
||||||
|
lock('prod-deploy') {
|
||||||
withCredentials([sshUserPrivateKey(credentialsId: 'PROD_SSH_KEY', keyFileVariable: 'SSH_KEY')]) {
|
withCredentials([sshUserPrivateKey(credentialsId: 'PROD_SSH_KEY', keyFileVariable: 'SSH_KEY')]) {
|
||||||
script {
|
script {
|
||||||
def imageName = "${ACR_REGISTRY}/${ACR_NAMESPACE}/${params.SERVICE}:${params.IMAGE_TAG}"
|
def imageName = "${ACR_REGISTRY}/${ACR_NAMESPACE}/${params.SERVICE}:${params.IMAGE_TAG}"
|
||||||
|
retry(3) {
|
||||||
bat """
|
bat """
|
||||||
ssh -i "%SSH_KEY%" -o StrictHostKeyChecking=no ${PROD_USER}@${PROD_HOST} "docker pull ${imageName} && docker compose -f ${COMPOSE_FILE} up -d --no-deps --force-recreate ${params.SERVICE} && docker image prune -f"
|
ssh -i "%SSH_KEY%" -o StrictHostKeyChecking=no ${PROD_USER}@${PROD_HOST} "docker pull ${imageName} && docker compose -f ${COMPOSE_FILE} up -d --no-deps --force-recreate ${params.SERVICE} && docker image prune -f"
|
||||||
"""
|
"""
|
||||||
@ -66,6 +68,8 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
post {
|
post {
|
||||||
success { echo "✅ ${params.SERVICE}:${params.IMAGE_TAG} 构建部署成功" }
|
success { echo "✅ ${params.SERVICE}:${params.IMAGE_TAG} 构建部署成功" }
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户