You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Jenkins pipeline将Artifactory的Spring Boot镜像部署到Openshift

从Artifactory拉取镜像部署到OpenShift的Jenkins Pipeline实现方案

前置准备

  • 安装Jenkins OpenShift Client插件,在全局工具配置中添加对应版本的oc命令行工具
  • 在OpenShift侧创建具备目标项目部署权限的服务账号,生成API Token,将OpenShift集群地址、服务账号Token、Artifactory镜像拉取凭证全部存入Jenkins凭据管理
  • 在OpenShift目标项目中创建Artifactory私有仓库的拉取密钥,执行命令示例:oc create secret docker-registry artifactory-pull-secret --docker-server=<你的Artifactory镜像仓库地址> --docker-username=<Artifactory账号> --docker-password=<Artifactory密码> --docker-email=<任意邮箱>,创建完成后绑定到部署用服务账号:oc secrets link default artifactory-pull-secret --for=pull

Pipeline示例

pipeline {
    agent any
    tools {
        // 名称对应Jenkins全局工具配置里的oc客户端自定义名称
        oc 'openshift-client' 
    }
    environment {
        OPENSHIFT_SERVER = 'https://<你的OpenShift集群地址>:6443'
        OPENSHIFT_PROJECT = '<目标部署的OpenShift项目名>'
        DEPLOYMENT_NAME = 'spring-boot-demo'
        ARTIFACTORY_REGISTRY = '<你的Artifactory镜像仓库地址>'
        IMAGE_REPO = '你推送的镜像仓库路径'
        // 镜像标签可从上游构建Job传递,比如用构建号、Git commit id作为唯一标识
        IMAGE_TAG = "${BUILD_NUMBER}"
        FULL_IMAGE_PATH = "${ARTIFACTORY_REGISTRY}/${IMAGE_REPO}:${IMAGE_TAG}"
        // 对应Jenkins凭据中存储的OpenShift Token凭据ID
        OPENSHIFT_TOKEN = credentials('openshift-token')
    }
    stages {
        stage('登录OpenShift集群') {
            steps {
                sh '''
                oc login ${OPENSHIFT_SERVER} --token=${OPENSHIFT_TOKEN} --insecure-skip-tls-verify=true
                oc project ${OPENSHIFT_PROJECT}
                '''
            }
        }
        stage('部署镜像到OpenShift') {
            steps {
                script {
                    // 检查Deployment是否存在,存在则更新镜像,不存在则首次创建
                    def deploymentExists = sh(script: "oc get deployment ${DEPLOYMENT_NAME}", returnStatus: true) == 0
                    if (deploymentExists) {
                        sh '''
                        oc set image deployment/${DEPLOYMENT_NAME} ${DEPLOYMENT_NAME}=${FULL_IMAGE_PATH}
                        # 等待部署完成,超时时间可自定义
                        oc rollout status deployment/${DEPLOYMENT_NAME} --timeout=5m
                        '''
                    } else {
                        sh '''
                        # 首次部署创建应用
                        oc new-app ${FULL_IMAGE_PATH} --name=${DEPLOYMENT_NAME}
                        # 暴露服务,端口替换为你的Spring Boot实际暴露端口
                        oc expose service ${DEPLOYMENT_NAME} --port=8080
                        # 等待部署完成
                        oc rollout status deployment/${DEPLOYMENT_NAME} --timeout=5m
                        '''
                    }
                }
            }
        }
        stage('验证部署结果') {
            steps {
                sh 'oc get pods -l app=${DEPLOYMENT_NAME}'
            }
        }
    }
    post {
        always {
            sh 'oc logout'
        }
    }
}

注意事项

  • 如果OpenShift集群使用合法SSL证书,可删除oc login命令中的--insecure-skip-tls-verify=true参数
  • Spring Boot应用的配置端口需要和Deployment、Service中暴露的端口保持一致,避免访问异常
  • 镜像标签建议使用唯一值,避免镜像标签覆盖导致的部署版本错误
  • 镜像标签可以和上游构建推送镜像的Job做参数联动,确保部署的是刚构建完成的对应版本镜像

内容的提问来源于stack exchange,提问作者ABC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:24:03