pipeline { agent any environment { REGISTRY = "uswccr.ccs.tencentyun.com" // 镜像仓库地址 NAMESPACE = "lessietest" // 命名空间 IMAGE_NAME = "lessie-sourcing-agents" // 镜像名(固定前缀) CREDENTIALS_ID = "dxin_img_hub_auth" // 容器仓库凭证ID } stages { stage('拉取代码') { steps { // 拉取指定分支代码(通过参数 params.Code_branch 动态指定) git branch: "${params.Code_branch}", credentialsId: 'fly_gitlab_auth', url: 'http://106.53.194.199/python/lessie-sourcing-agents.git' } } stage('获取提交信息') { steps { script { // 获取最近一次提交的哈希值(短格式,前8位) env.GIT_COMMIT_SHORT = sh( script: 'git rev-parse --short HEAD', returnStdout: true ).trim() // 获取最近一次提交的作者 env.GIT_AUTHOR = sh( script: 'git log -1 --pretty=format:%an', returnStdout: true ).trim() // 获取最近一次提交的时间(格式化) env.GIT_COMMIT_TIME = sh( script: 'git log -1 --pretty=format:%ct | xargs -I {} date -d @{} +%Y%m%d-%H%M%S', returnStdout: true ).trim() // 获取最近一次提交的备注信息(转义特殊字符,避免构建失败) env.GIT_COMMIT_MSG = sh( script: 'git log -1 --pretty=format:%s', // 转义双引号 returnStdout: true ).trim() // 生成唯一 Tag:时间戳 + 短哈希(确保唯一性) env.IMAGE_TAG = "${GIT_COMMIT_TIME}-${GIT_COMMIT_SHORT}" } } } stage('登录容器仓库') { steps { withCredentials([usernamePassword( credentialsId: env.CREDENTIALS_ID, usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PWD' )]) { sh ''' echo "$REGISTRY_PWD" | docker login ${REGISTRY} -u ${REGISTRY_USER} --password-stdin ''' } } } stage('构建容器镜像') { steps { script { // 构建镜像,添加标签信息 sh """ docker build -t ${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG} \ --label "git-branch='${params.Code_branch}'" \ --label "git-commit='${GIT_COMMIT_SHORT}'" \ --label "git-author='${GIT_AUTHOR}'" \ --label "git-message='${GIT_COMMIT_MSG}'" \ --label "build-time='${GIT_COMMIT_TIME}'" \ . """ } } } stage('推送镜像到仓库') { steps { script { // 推送主镜像(带唯一 Tag) sh "docker push ${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG}" // 推送 latest 标签(修正路径,包含命名空间) sh "docker tag ${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG} ${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:latest" sh "docker push ${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:latest" // 登出仓库 sh "docker logout ${REGISTRY}" } } } } post { always { // 无论成败都登出,清理凭证 sh "docker logout ${REGISTRY}" echo "容器仓库已登出,本地凭证已清理" // 清理工作(可选,避免节点磁盘占用过高) //sh "docker system prune -f" } success { // 输出构建结果 echo "镜像构建成功!" echo "镜像地址:${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG}" echo "latest 标签地址:${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:latest" echo "对应代码提交:${GIT_COMMIT_SHORT}(${GIT_COMMIT_MSG})" } } }