BZPT.JKFZJC_FrontEnd/Jenkinsfile

97 lines
3.9 KiB
Groovy

// 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 { ... }
}
}