如何通过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
相关产品推荐
相关产品推荐

