嗨,我正在研究Openshift 3.9。下面是一段詹金斯管道代码
stage('Build Image') {
openshift.withCluster() {
openshift.withProject(env.DEV_PROJECT) {
def bcSelector = openshift.selector("bc", "jboss")
def bcExists = bcSelector.exists()
if (!bcExists) {
openshift.newBuild("--name=jboss", "--image-stream=jboss-eap70-openshift:1.5", "--binary=true")
} else {echo "The specified image already exists"}
}}
}
stage('Build Image with app') {
sh "rm -rf oc-build && mkdir -p oc-build/deployments"
sh "cp /var/lib/jenkins/jobs/devpipeline/jobs/devpipeline-tasks-pipeline/workspace/target/hello-1.0.war oc-build/deployments/ROOT.war"
openshift.withCluster() {
openshift.withProject(env.DEV_PROJECT) {
openshift.selector("bc", "jboss").startBuild("--from-dir=oc-build", "--wait=true")
}
}
}
stage('deploy to Dev') {
openshift.withCluster() {
openshift.withProject(env.DEV_PROJECT) {
if (openshift.selector('dc', 'jboss').exists()) {
openshift.selector('dc', 'jboss').delete()
openshift.selector('svc', 'jboss').delete()
openshift.selector('route', 'jboss').delete()
}
def app = openshift.newApp("jboss:latest")
app.narrow("svc").expose();
def dc = openshift.selector("dc", "jboss")
openshift.tag("${env.DEV_PROJECT}/jboss:latest", "${env.DEV_PROJECT}/jboss:${build_number}")
}
}
}
在Build
阶段,iam采取jboss容器。在Build Image with app
阶段,我将获取构建的war文件,并使用war文件构建jboss的映像。在deploy to dev
中,我将应用程序映像部署到dev中,并使用jenkins内部版本号{{ 1}}。我正在研究管道中的回滚机制,其中我想将特定的内部版本号映像部署到开发环境中。假设我的詹金斯内部版本号是14,并且我想部署10,那么我该如何将特定的标记图像部署到dev中。在openshift的图像中,我可以看到从1到14的所有标记图像。现在,我想将特定的标记图像部署到dev中。有可能吗?
答案 0 :(得分:1)
您可以做的是,将DeploymentConfig更改为要部署的映像的另一个版本(:latest)。您可以在Web控制台中使用EDIT部署来执行此操作,然后从图像流jboss中选择另一个:tag。
或使用oc patch命令更改DC
oc patch dc --patch ='{“ spec”:{“ template”:{“ spec”:{“ containers”:[{“ name”:“”,“ image”:“ image-name:tag “}]}}}}'