《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.8环境中验证

在DevOps过程中CI/CD是最主要的工具,通过它的Pipeline可以驱动整个开发、测试、交付和部署过程。在OpenShift 4.x中自带两个CI/CD引擎:Jenkins和Tekton。其中Jenkins是目前最为常用的CI/CD工具,而Tekton是是直接运行在Kubernetes上的原生CI/CD。我们在本章节介绍如何部署运行一套Jenkins的环境,进而利用Pipeline将应用在开发、测试和生产环境中进行升迁部署。

  1. 执行以下命令创建相关项目。其中一个项目用来运行Jenkins的Pipeline,其它项目用来模拟3个阶段的应用环境。
$ export USER_ID=YOUR-USER-ID
$ oc new-project ${USER_ID}-pipeline-jenkins
$ oc new-project ${USER_ID}-pipeline-dev
$ oc new-project ${USER_ID}-pipeline-test
$ oc new-project ${USER_ID}-pipeline-prod
  1. 执行以下命令,在USER-ID-cicd项目中根据OpenShift预制的模板创建Jenkins运行环境。
$ oc new-app jenkins-ephemeral -n ${USER_ID}-pipeline-jenkins
  1. 执行执行命令,查看cicd 的pod创建进度是否问running。
$ oc get pod -w -n ${USER_ID}-pipeline-jenkins
NAME               READY   STATUS      RESTARTS   AGE
jenkins-1-deploy   0/1     Completed   0          8h
jenkins-1-tpwtq    1/1     Running     0          8h
  1. 查看Jenkins的访问route,然后用浏览器访问它。
$ oc get route jenkins -o template --template '{{.spec.host}}' -n ${USER_ID}-pipeline-jenkins
  1. 执行以下命令,允许USER-ID-pipeline-jenkines项目的Jenkins系统账号可以访问其它项目,同时允许USER-ID-pipeline-test和USER-ID-pipeline-prod系统账号从USER-ID-pipeline-dev项目中拉取镜像。
$ oc policy add-role-to-user edit system:serviceaccount:${USER_ID}-pipeline-jenkins:jenkins -n ${USER_ID}-pipeline-dev
$ oc policy add-role-to-user edit system:serviceaccount:${USER_ID}-pipeline-jenkins:jenkins -n ${USER_ID}-pipeline-test
$ oc policy add-role-to-user edit system:serviceaccount:${USER_ID}-pipeline-jenkins:jenkins -n ${USER_ID}-pipeline-prod
$ oc policy add-role-to-group system:image-puller system:serviceaccounts:${USER_ID}-pipeline-test -n ${USER_ID}-pipeline-dev
$ oc policy add-role-to-group system:image-puller system:serviceaccounts:${USER_ID}-pipeline-prod -n ${USER_ID}-pipeline-dev
  1. 将https://github.com/liuxiaoyu-git/cotd.git复制一份到自己的github账号。
  2. 执行以下命令,在USER-ID-pipeline-dev项目中创建myapp测试应用,然后可通过route验证应用可访问。
$ oc new-app --name=myapp openshift/php:latest~https://github.com/MY-GITHUB/cotd.git --as-deployment-config -n ${USER_ID}-pipeline-dev
  1. 查看pod状态,当运行myapp的pod为Running状态后在创建route,最后用浏览器访问route。
$ oc get pod -w -n ${USER_ID}-pipeline-dev
NAME             READY   STATUS      RESTARTS   AGE
myapp-1-build    0/1     Completed   0          2m45s
myapp-1-deploy   0/1     Completed   0          36s
myapp-1-fgh9v    1/1     Running     0          27s
$ oc expose service myapp -n ${USER_ID}-pipeline-dev
$ oc get route myapp -o template --template '{{.spec.host}}' -n ${USER_ID}-pipeline-dev
  1. 页面会随机显示一个动物的照片。
  2. 执行命令,禁止自动deployment。
$ oc get dc myapp -o yaml -n ${USER_ID}-pipeline-dev | sed 's/automatic: true/automatic: false/g' | oc replace -f -
deploymentconfig.apps.openshift.io/myapp replaced
  1. 下载https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/jenkins-pipeline-demo1.yaml文件。
$ curl -LO https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/jenkins-pipeline-demo1.yaml
  1. 将jenkins-pipeline-demo1.yaml文件中的“USERID变量内容改为自己的用户名。另外还可确认这个Pipeline中包括2个stage,一个用来做build操作,一个用来做deploy操作。
...
def USERID  = "user1"
def devProj = "$USERID-pipeline-dev"
pipeline {agent anystages{stage("Build") {steps{script{openshift.withCluster() {openshift.withProject("${devProj}") {echo '*** Build Starting ***'openshift.selector('bc', 'myapp').startBuild("--wait").logs('-f')echo '*** Build Complete ***'}}}}}stage("Deploy and Verify in Development Env"){steps{script{openshift.withCluster() {openshift.withProject("${devProj}") {echo '*** Deployment Starting ***'openshift.selector('dc', 'myapp').rollout().latest()echo '*** Deployment Complete ***'}}}}}}
}
...
  1. 然后执行以下命令,在USER-ID-pipeline-jenkins项目中创建BuildConfig,然后启动基于Pipeline的构建。
$ oc create -f jenkins-pipeline-demo1.yaml -n ${USER_ID}-pipeline-jenkins
start-build jenkins-pipeline-dembuildconfig.build.openshift.io/jenkins-pipeline-demo created
$ oc start-build jenkins-pipeline-demo -n ${USER_ID}-pipeline-jenkins
build.build.openshift.io/jenkins-pipeline-demo-1 started
  1. 在OpenShift控制台上进入“开发者”视图的“构建”菜单,然后切换到“user1-pipeline-jenkins”项目,进入名为“jenkins-pipeline-demo”的BuildConfig,再进入到“构建”标签,最后再进入“jenkins-pipeline-demo-1”的构建。此时会显示Pipeline的构建进度。

  2. 点击上图的“View logs”链接会进入Jenkins(首次需要用OpenShift的用户登录,然后选择赋权访问),查看Pipeline的运行日志。

  3. 在构建完后在浏览器中刷新应用页面,点击右上方的灰色图标,在弹出框中会显示当前运行的应用版本,此时赢还是“Version 1”。

  4. 用浏览器访问https://github.com/MY-GITHUB/cotd.git,打开item.php页面,然后通过点击“Edit”图标编辑这个文件。在代码中找到“

    Version”并修改版本号,然后“Commit Changes”。

  5. 然后再次执行(12)中的start-build命令,在Jenkins Pipeline运行成功后可刷新并查看页面是否发生变化。

  6. 查看USER-ID-pipeline-test和USER-ID-pipeline-prod项目,确认没有任何对象。这是因为上面操作我们是通过手动部署的。

$ oc get all -n ${USER_ID}-pipeline-test
No resources found in pipeline-test namespace.
$ oc get all -n ${USER_ID}-pipeline-prod
No resources found in pipeline-prod namespace.
  1. 要将myapp部署运行到USER-ID-pipeline-test和USER-ID-pipeline-prod项目,还要执行以下命令,将名为“myapp:latest”的ImageStream新打两个标签“myapp:testready”和“myapp:prodready”。
$ oc tag myapp:latest myapp:testready myapp:prodready -n ${USER_ID}-pipeline-dev
Tag myapp:testready set to myapp@sha256:566ee55311f0cd0a80291c2345e7a1b72ca3eb84455a032433e2e3d11f39efbb.
Tag myapp:prodready set to myapp@sha256:566ee55311f0cd0a80291c2345e7a1b72ca3eb84455a032433e2e3d11f39efbb.
$ oc get is -n ${USER_ID}-pipeline-dev
NAME    IMAGE REPOSITORY                                                                             TAGS                         UPDATED
myapp   default-route-openshift-image-registry.apps.cluster.example.opentlc.com/pipeline-dev/myapp   prodready,testready,latest   9 seconds ago
  1. 执行以下命令,使用(19)的两个新ImageStreamTag在在USER-ID-pipeline-test和USER-ID-pipeline-prod项目中创建应用。
$ oc new-app ${USER_ID}-pipeline-dev/myapp:testready --name=myapp --as-deployment-config -n ${USER_ID}-pipeline-test
$ oc new-app ${USER_ID}-pipeline-dev/myapp:prodready --name=myapp --as-deployment-config -n ${USER_ID}-pipeline-prod
$ oc expose service myapp -n ${USER_ID}-pipeline-test
$ oc expose service myapp -n ${USER_ID}-pipeline-prod
$ oc get dc myapp -o yaml -n ${USER_ID}-pipeline-test | sed 's/automatic: true/automatic: false/g' | oc replace -f -
$ oc get dc myapp -o yaml -n ${USER_ID}-pipeline-prod | sed 's/automatic: true/automatic: false/g' | oc replace -f -
  1. 下载https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/jenkins-pipeline-demo2.yaml文件。此文件在jenkins-pipeline-demo1.yaml的基础让增加了将myapp部署到test和prod环境的步骤。
$ curl -LO https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/jenkins-pipeline-demo2.yaml
  1. 同样将jenkins-pipeline-demo2.yaml文件中的“USERID”变量内容改为自己的用户编号。
  2. 然后执行以下命令,在USER-ID-pipeline-jenkins项目中替换已有的BuildConfig,然后启动Pipeline构建。
$ oc replace -f jenkins-pipeline-demo2.yaml -n ${USER_ID}-pipeline-jenkins
$ oc start-build jenkins-pipeline-demo -n ${USER_ID}-pipeline-jenkins
  1. 在OpenShift控制台上查看名为“jenkins-pipeline-demo-2”的构建执行情况。当出现 “Input Required”,点击该链接进入Jenkins。
  2. 在Jenkins中点击左侧的Console Output,在右侧找到下图位置,然后点击“Promote”链接,Pipeline继续得以运行直到显示“Finished: SUCCESS”。
  3. 执行以下命令,访问3个环境的应用。
$ oc get route myapp -n ${USER_ID}-pipeline-dev -o template --template '{{.spec.host}}'
$ oc get route myapp -n ${USER_ID}-pipeline-test -o template --template '{{.spec.host}}'
$ oc get route myapp -n ${USER_ID}-pipeline-prod -o template --template '{{.spec.host}}'
  1. 根据(17)的说明修改程序中的Version,然后再次执行(17)中的start-build命令运行Pipeline。在Jenkins Pipeline运行成功后可刷新并查看三个环境的应用页面是否发生变化。

OpenShift 4 Hands-on Lab (7) - 用Jenkins Pipeline实现在不同运行环境中升迁部署应用相关推荐

  1. Jenkins 在 Tomcat 中的部署及代码静态检查工具集成

    Jenkins 的简单部署 在安装了 Jenkins 运行所需的依赖(主要是 JDK)之后,可以通过如下步骤简单快速地部署 Jenkins: 下载 Jenkins. 打开终端并切换至下载目录. 运行命 ...

  2. Jenkins Pipeline Kubernetes 如何创建 Pod

    Jenkins Pipeline & Kubernetes 如何创建 pod 文章目录 Jenkins Pipeline & Kubernetes 如何创建 pod 1. 前言 2. ...

  3. jenkins pipeline脚本_Jenkins 创建流水线 (Pipeline) 项目的脚本

    前一段时间在做接口测试自动化方面的工作.现在整理下,接口测试国中学到的知识,做到边学边用到实践了.下面,介绍下,把接口测试项目集成到Jenkins,建立PIpeline项目. Pipeline 是一套 ...

  4. Jenkins Pipeline构建流水线发布

    Jenkins Pipeline构建流水线发布 1. Jenkins Pipeline 核心概念 Jenkins Pipeline是一套插件,支持在Jenkins中实现持续集成.交付管道; Pipel ...

  5. Jenkins+Pipeline+Docker部署SpringBoot项目到远程服务器

    Jenkins部署 前言 Jenkins 安装 nginx配置 jenkins配置 Docker安装 项目部署 项目添加Dockerfile文件 Jenkins新建任务 使用Pipeline部署 结果 ...

  6. Jenkins Pipeline动态使用Git分支名称的技巧

    前言 在上一篇 Jenkins 使用环境变量 中,帮助大家使用一条 Docker 命令就可以快速玩转 Jenkins,同时用最简单的方式解释了 Jenkins 中让人混乱的环境变量,本文还是接着变量说 ...

  7. Jenkins Pipeline插件十大最佳实践!

    Jenkins Pipeline 插件对于 Jenkins 用户来说可以让用户能够改变游戏规则.基于 Groovy 中的领域特定语言(DSL),Pipeline 插件使 Pipelines 可以有脚本 ...

  8. 【Gerrit】持续集成工具Jenkins的安装配置与使用过程中遇到的问题整理

    1.下载war包 https://jenkins.io/download/ 2.安装 java -jar jenkins.war Error: Feb 21, 2019 2:17:25 AM wins ...

  9. Centos7 Docker Jenkins ASP.NET Core 2.0 自动化发布和部署

    写在前面 Docker一直很火热,一直想把原本的Jenkins自动部署工具搬到Docker上面,无奈今年一直忙于各种事情,迟迟未实施这个事情,正好迎来了dotnet core 2.0 的正式发布,升级 ...

最新文章

  1. [原创]CentOS下Mysql双机互为备份
  2. python使用matplotlib可视化间断条形图、使用broken_barh函数可视化间断条形图、可视化定性数据的相同指标在时间维度上的差异
  3. Ubuntu输入正确的用户名密码不能进入系统的原因和解决方法
  4. android 锁屏应用,创建一个Android锁屏应用。
  5. 2020人工神经网络第一次作业
  6. 【原创翻译】The Case for the Reduced Instruction Set Computer
  7. [云炬创业学笔记]第一章创业是什么测试14
  8. win10分屏快捷键无法使用_你知道哪些关于win10的快捷操作
  9. 使用 VS2005 编译 directshow sample 时链接错误
  10. 《剑指offer》数字在排序数组中出现的次数
  11. WeirdSort CodeForces - 1311B(暴力)
  12. 判断两个结构体是否相等
  13. Java笔记-JDK搭建WebService客户端其他调用方法
  14. pacemaker+mysql+drbd
  15. 基于PCA进行多光谱和全色图像融合
  16. 计算机一些常见名词解释
  17. 凸函数与Jensen不等式
  18. 【软件设计师中级】设计模式之原型模式学习笔记(c++)
  19. google服务框架 闪退_没 Google 服务闪退?教你解决手游谷歌服务问题
  20. 电路分析(电路原理)

热门文章

  1. 删除一行下方单元格上移_Excel小技巧——局部单元格的添加与删除
  2. catia怎么将特征参数化_浅谈Catia VBA与参数化建模的结合
  3. ajax上送src,使用script的src实现跨域和类似ajax效果
  4. 完美海报设计的4个技巧
  5. 干货!专治设计师没灵感没创意没素材
  6. oracle中实现分页,Oracle中实现分页的方法
  7. 操作系统饥饿现象_操作系统复习
  8. mysql java教程_mysql总结
  9. 软件调试中的断点分类
  10. C语言 *** stack smashing detected *** 问题的解决