Jenkins BlueOcean部署k8s应用
https://www.qikqiak.com/k8s-book/docs/38.Jenkins%20BlueOcean.html
BlueOcean 是 Jenkins 团队从用户体验角度出发,专为 Jenkins Pipeline 重新设计的一套 UI 界面,仍然兼容以前的 fressstyle 类型的 job,BlueOcean 具有以下的一些特性:
- 连续交付(CD)Pipeline 的复杂可视化,允许快速直观的了解 Pipeline 的状态
- 可以通过 Pipeline 编辑器直观的创建 Pipeline
- 需要干预或者出现问题时快速定位,BlueOcean 显示了 Pipeline 需要注意的地方,便于异常处理和提高生产力
- 用于分支和拉取请求的本地集成可以在 GitHub 或者 Bitbucket 中与其他人进行代码协作时最大限度提高开发人员的生产力。
BlueOcean 可以安装在现有的 Jenkins 环境中,也可以使用 Docker 镜像的方式直接运行,我们这里直接在现有的 Jenkins 环境中安装 BlueOcean 插件:登录 Jenkins Web UI -> 点击左侧的 Manage Jenkins -> Manage Plugins -> Available -> 搜索查找 BlueOcean -> 点击下载安装并重启
一般来说 Blue Ocean 在安装后不需要额外的配置,现有 Pipeline 和 Job 将继续照常运行。但是,Blue Ocean 在首次创建或添加 Pipeline的时候需要访问您的存储库(Git或GitHub)的权限,以便根据这些存储库创建 Pipeline。
安装完成后,我们可以在 Jenkins Web UI 首页左侧看到会多一个 Open Blue Ocean 的入口,我们点击就可以打开,如果之前没有创建过 Pipeline,则打开 Blue Ocean 后会看到一个Create a new pipeline的对话框:
然后我们点击开始创建一个新的 Pipeline,我们可以看到可以选择 Git、Bitbucket、GitHub,我们这里选择 GitHub,可以看到这里需要一个访问我们 GitHub 仓库权限的 token,在 GitHub 的仓库中创建一个 Personal access token:
点击你的GitHub头像,选择下拉框中的“settings”:
选择左侧菜单的“Developer settings”一项:
选择“Personal access tokens”:
7ff67c700000fe84e6ac057f333f82076a95c72f
Blue Ocean 会自动扫描仓库中的每个分支,会为根文件夹中包含Jenkinsfile的每个分支创建一个 Pipeline,比如我们这里有 master 和 dev 两个分支,并且两个分支下面都有 Jenkinsfile 文件,所以创建完成后会生成两个 Pipeline:
可以看到有两个任务在运行了,我们可以把 master 分支的任务停止掉,我们只运行 dev 分支即可,然后我们点击 dev 这个 pipeline 就可以进入本次构建的详细页面:
注意GitHub的配置文件
图中每个阶段我们都可以点击进去查看对应的构建结果,比如我们可以查看 Push 阶段下面的日志信息:
我们可以看到本次构建的 Docker 镜像的 Tag 为dev-029dd4e,是符合我们在 Jenkinsfile 中的定义的吧
现在我们更改下 k8s.yaml 将 环境变量的值的标记改成 BRANCH_NAME,当然 Jenkinsfile 也要对应的更改,然后提交代码到 dev 分支并且 push 到 Github 仓库,我们可以看到 Jenkins Blue Ocean 里面自动触发了一次构建工作,最好同样我们可以看到本次构建能够正常完成,最后我们查看下本次构建的结果:
[root@k8s-master ~]# kubectl get pod jenkins-demo-b7c58f4fb-jq2tm
NAME READY STATUS RESTARTS AGE
jenkins-demo-b7c58f4fb-jq2tm 0/1 CrashLoopBackOff 4 2m55s
[root@k8s-master ~]# kubectl logs jenkins-demo-b7c58f4fb-jq2tm
Hello, Kubernetes!I'm from Jenkins CI!
BRANCH: dev
[root@k8s-master ~]#
可以看到打印了一句 BRANCH: dev ,证明我本次 CI/CD 是正常的。
现在我们来把 dev 分支的代码合并到 master 分支,然后来触发一次自动构建:
然后我们回到 Jenkins 的 Blue Ocean 页面中,可以看到一个 master 分支下面的任务,同样我们进入详情页可以查看 Push 阶段下面的日志:
我们可以查看到此处推送的镜像 TAG 为 9851bdf,没有分支的前缀,是不是和我们前面在 Jenkinsfile 中的定义是一致的,镜像推送完成后,进入 Deploy 阶段的时候我们可以看到出现了一个暂停的操作,让我们选择是否需要部署到线上,我们前面是不是定义的如果是 master 分支的话,在部署的阶段需要我们人工确认:
然后我们点击继续才会继续后面的部署工作,确认后,我们同样可以去 Kubernetes 环境中查看下部署的结果:
[root@k8s-master ~]# kubectl get pod | grep jenkins
jenkins-demo-77986dd498-5jrd4 0/1 Completed 2 33s
[root@k8s-master ~]# kubectl logs jenkins-demo-77986dd498-5jrd4
Hello, Kubernetes!I'm from Jenkins CI!
BRANCH_NAME: master
[root@k8s-master ~]#
现在我们可以看到打印出来的信息是 master,证明部署是没有问题的。
GitHub可以通过webhook提交之后触发发布,Jenkins也可以定时扫描仓库,有更新触发发布
我只是添加了这几个字