// Jenkinsfile for Project A pipeline { agent any parameters { // 项目特定的默认值 string(name: 'GIT_REPO_URL', defaultValue: 'https://your-git-server.com/project-a.git', description: 'Git仓库URL') string(name: 'GIT_BRANCH', defaultValue: 'main', description: '要拉取的Git分支') credentials(name: 'GIT_CREDENTIALS_ID', defaultValue: 'your-git-credentials-id', description: 'Git凭证ID', required: false) string(name: 'BUILD_COMMAND', defaultValue: 'mvn clean package -DskipTests', description: '项目A打包命令') // project-a 的打包命令 string(name: 'DOCKER_REGISTRY_URL', defaultValue: 'your-docker-registry.com', description: 'Docker镜像仓库URL') string(name: 'DOCKER_IMAGE_NAME', defaultValue: 'project-a-app', description: 'Docker镜像名称') // project-a 的镜像名 string(name: 'IMAGE_BASE_TAG', defaultValue: '1.0', description: '基础镜像标签') credentials(name: 'DOCKER_CREDENTIALS_ID', defaultValue: 'your-docker-registry-credentials-id', description: 'Docker镜像仓库凭证ID', required: true) booleanParam(name: 'PUSH_LATEST_TAG', defaultValue: true, description: '是否同时推送 latest 标签?') } environment { FULL_IMAGE_NAME = "${params.DOCKER_REGISTRY_URL}/${params.DOCKER_IMAGE_NAME}" IMAGE_TAG = "" // 将在 Checkout 后动态设置 } // tools { ... } // 如果需要 stages { stage('1. Checkout Code') { steps { echo "拉取代码从 ${params.GIT_REPO_URL}, 分支: ${params.GIT_BRANCH}" cleanWs() checkout([ $class: 'GitSCM', branches: [[name: params.GIT_BRANCH]], userRemoteConfigs: [[ url: params.GIT_REPO_URL, credentialsId: params.GIT_CREDENTIALS_ID ]], extensions: [ [$class: 'CloneOption', shallow: true, noTags: true, depth: 1, timeout: 20], [$class: 'PruneStaleBranch'] ] ]) script { def shortCommit = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() env.IMAGE_TAG = "${params.IMAGE_BASE_TAG}-${BUILD_NUMBER}-${shortCommit}" echo "生成的镜像TAG: ${env.IMAGE_TAG}" } } } stage('2. Build and Package Application') { steps { echo "开始打包应用: ${params.BUILD_COMMAND}" sh "${params.BUILD_COMMAND}" echo "应用打包完成." } } stage('3. Build Docker Image') { steps { echo "开始构建Docker镜像: ${env.FULL_IMAGE_NAME}:${env.IMAGE_TAG}" script { docker.build("${env.FULL_IMAGE_NAME}:${env.IMAGE_TAG}", "-f Dockerfile .") // 假设 Dockerfile 在根目录 } echo "Docker镜像构建完成: ${env.FULL_IMAGE_NAME}:${env.IMAGE_TAG}" } } stage('4. Push Docker Image') { steps { echo "开始推送Docker镜像到 ${params.DOCKER_REGISTRY_URL}" script { docker.withRegistry(params.DOCKER_REGISTRY_URL, params.DOCKER_CREDENTIALS_ID) { docker.image("${env.FULL_IMAGE_NAME}:${env.IMAGE_TAG}").push() echo "镜像 ${env.FULL_IMAGE_NAME}:${env.IMAGE_TAG} 推送成功." if (params.PUSH_LATEST_TAG) { docker.image("${env.FULL_IMAGE_NAME}:${env.IMAGE_TAG}").push('latest') echo "镜像 ${env.FULL_IMAGE_NAME}:latest 推送成功." } } } } } } post { always { echo 'Pipeline 结束.' cleanWs() } // success { ... } // failure { ... } } }