在云栖博客 阿里云容器服务Kubernetes之Jenkins X(1)-安装部署实践篇 中, 我们基于 阿里云r容器服务Kubernetes 搭建了自己的Jenkins-X-Platform, 本文将以一个Spring Boot应用为例继续演示如何使用Jenkins-X-Platform构建、发布和管理自己的应用。

在创建Spring Boot应用之前, 还需要对Jenkins-X-Platform引擎做一些定制化配置:

1. 给多分支流水线任务添加访问GitHub的凭证

登录 http://jenkins.jx.aliyunk8s.com ,用户名admin, 密码可以在 ~/.jx/jenkinsAuth.yaml 文件中查看。 登录成功后会看到Jenkins-X-Platform默认会创建两个多分支流水线项目 environment-sharkplanet-staging 和 environment-sharkplanet-production, 它们分别负责不同环境下的应用发布和管理。此时两个任务的扫描构建都处于Pending状态:

构建日志为:

创建并配置访问GitHub的凭证:

保存并重新执行扫描构建:

2. 进入 系统管理-> 系统配置,更改Kubernetes云配置

(1)找到 “Disable https certificate check” 选项并勾选

(2)找到Labels为jenkins-maven的Kubernetes Pod Template并确认Docker image使用了最新的构建镜像jenkinsxio/builder-maven:latest, 否则会在应用构建时报错“Error: unknown command "build" for "skaffold"”

3. 创建configmaps “jenkins-x-docker-registry”

此步骤的更改是为了避免创建应用时有如下报错:

error: Could not find ConfigMap jenkins-x-docker-registry in namespace jx: configmaps "jenkins-x-docker-registry" not found

从jenkins-x-docker-registry-config 导出编排文件:

# kubectl get configmaps -n jx
NAME                               DATA      AGE
exposecontroller                   1         15h
ingress-config                     5         15h
jenkins                            6         15h
jenkins-tests                      1         15h
jenkins-x-docker-registry-config   1         15h
jenkins-x-git-kinds                2         15h
jenkins-x-monocular-api-config     1         15h
jenkins-x-monocular-ui-config      1         15h
jenkins-x-monocular-ui-vhost       1         15h
jx-install-config                  2         15h
# kubectl get configmaps jenkins-x-docker-registry-config  -n jx --export -o yaml > jenkins-x-docker-registry.yaml

修改名称并创建:

%s/jenkins-x-docker-registry-config/jenkins-x-docker-registry/
# kubectl create -f jenkins-x-docker-registry.yaml
configmap/jenkins-x-docker-registry created
4. 创建Spring Boot应用

查看当前环境中的应用列表:

# jx get apps
No applications found in environments staging, production

创建Spring应用, 此步骤会自动生成一个git repo并推送至GitHub, 在Jenkins上生成与之对应的多分支流水线任务,最后生成webhook指向多分支流水线任务:

如果有报错信息如下, 则需要安装jdk:

...
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE exit status 1
5. 修改webhook

在GitHub上查看jenkins-x-demo、environment-sharkplanet-staging和environment-sharkplanet-production三个项目的webhook:

GitHub是无法解析jenkins.jx.aliyunk8s.com这个域名的, 在后续构建中用到这个webhook的地方就会报错, 我们需要做一些修改:

# kubectl edit svc jenkins -n jx

把“type: CLusterIP” 改为“type: LoadBalancer”, 保存退出后在容器服务Kubernetes控制台上查看jenkins服务的外部端点:

修改webhook的 Payload URL并保存。

6. 多分支流水线jenkins-x-demo的构建

应用创建完毕后,会自动进行多分支流水线jenkins-x-demo的构建:

查看构建日志发现有报错,先点击“Abort”终止此次构建:

此处报错为docker镜像构建和推送问题, 我们这里配置使用 阿里云容器镜像服务 来管理,本次实践构建的镜像url为:registry.cn-hangzhou.aliyuncs.com/xxx/jenkins-x-demo步骤如下:
(1)进入 系统管理->系统设置->全局属性,勾选环境变量并增加键值对:

(2)生成docker auth secret

[root@iZj6cenjoxeycpx4qfdqmkZ ~]# docker login -u xxx -p xxx registry.cn-hangzhou.aliyuncs.com
Login Succeeded
# kubectl get secret -n jx
NAME                               TYPE                                  DATA      AGE
cleanup-token-wvhp8                kubernetes.io/service-account-token   3         1d
default-token-zx5p8                kubernetes.io/service-account-token   3         1d
expose-token-qkw5l                 kubernetes.io/service-account-token   3         1d
jenkins                            Opaque                                3         1d
jenkins-docker-cfg                 Opaque                                1         21h
jenkins-git-credentials            Opaque                                1         1d
jenkins-git-ssh                    Opaque                                2         1d
jenkins-hub-api-token              Opaque                                1         1d
jenkins-maven-settings             Opaque                                1         1d
jenkins-npm-token                  Opaque                                1         1d
jenkins-release-gpg                Opaque                                4         1d
jenkins-ssh-config                 Opaque                                1         1d
jenkins-token-t2n4j                kubernetes.io/service-account-token   3         1d
jenkins-x-chartmuseum              Opaque                                2         1d
jenkins-x-docker-registry-secret   Opaque                                1         1d
jenkins-x-mongodb                  Opaque                                2         1d
jx-basic-auth                      Opaque                                1         1d
jx-install-config                  Opaque                                3         1d
jx-pipeline-git-github-github      Opaque                                2         1d
nexus                              Opaque                                1         1d
pipelinecontroller-token-tpbkj     kubernetes.io/service-account-token   3         1d
# kubectl delete secrets jenkins-docker-cfg -n jx
secret "jenkins-docker-cfg" deleted
# kubectl create secret generic jenkins-docker-cfg -n jx --from-file=/root/.docker/config.json
secret/jenkins-docker-cfg created

jenkins-x-demo应用会成功构建Helm Charts并发布到chartmuseum,
访问 http://monocular.jx.aliyunk8s.com 可以看到新增加了jenkins-x-demo的chart:

继续查看jenkins-x-demo的构建日志:

流水线会创建一个environment-sharkplanet-staging项目的PRhttps://github.com/haoshuwei/environment-sharkplanet-staging/pull/1, merge PR后, promotion动作执行成功:

7. 查看和访问应用
jx get apps
APPLICATION    STAGING PODS URL                                            PRODUCTION PODS URL
jenkins-x-demo 0.0.3   1/1  http://jenkins-x-demo.jx-staging.aliyunk8s.com

绑定hosts后访问http://jenkins-x-demo.jx-staging.aliyunk8s.com:

8. 开发jenkins-x-demo 应用并新增一个页面

步骤7中访问的应用并没有准备好发布到生产环境下, 在发布到生产环境之前,我们需要先对其进行开发和测试。

新建一个分支:

# git checkout -b feature
切换到一个新分支 'feature'
# cat src/main/resources/static/index.html
<html><head><title> Jenkins X Spring Demo </title></head><body bgcolor=white><table border="0" cellpadding="10"><tr><td><img height="300" width="300" src="https://github.com/jenkins-x/jenkins-x-website/raw/e5aae999166a67d6220aa469eed1f23e0996c1f7/images/logo.png"></td><td><h1>Jenkins X Spring Demo</h1></td></tr></table></body></html>

保存并提交:

# git add src
# git commit -m "add index.html"
[feature 5853790] add index.html1 file changed, 19 insertions(+)create mode 100644 src/main/resources/static/index.html
# git push origin feature
Counting objects: 11, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.

在GitHub上创建feature分支到master分支的PR:

PR创建成功后,会通过webhook触发流水线构建:

流水线构建成功后会为这个PR的jenkins-x-demo应用创建预览环境haoshuwei-jenkins-x-demo-pr-1并部署应用, 点击"here" 访问(注意绑定hosts):

9. 更新staging环境下的jenkins-x-demo应用

步骤8中我们验证新PR下的应用没问题后,就可以在GitHub上merge PR到master分支:

查看当前staging环境下jenkins-x-demo应用版本为0.0.3:

# jx get apps
APPLICATION    STAGING PODS URL                                            PRODUCTION PODS URL
jenkins-x-demo 0.0.3   1/1  http://jenkins-x-demo.jx-staging.aliyunk8s.com

合并PR后会自动触发新的流水线构建, 构建成功后再查看staging环境下jenkins-x-demo应用版本变为0.0.4:

# jx get apps
APPLICATION    STAGING PODS URL                                            PRODUCTION PODS URL
jenkins-x-demo 0.0.4        http://jenkins-x-demo.jx-staging.aliyunk8s.com

helm charts仓库也有新版本的更新:

可以再次访问 http://jenkins-x-demo.jx-staging.aliyunk8s.com/ 进行验证。

10. 发布应用到生产环境

步骤9中我们更新了staging环境下的jenkins-x-demo应用版本并验证没问题后, 就可以发布到生产环境中:

# git checkout master
切换到分支 'master'
# jx promote --version 0.0.4 --env production --timeout 20m
Using helmBinary helm with feature flag: none
Promoting app jenkins-x-demo version 0.0.4 to namespace jx-production

构建成功后查看应用信息:

# jx get apps
APPLICATION    STAGING PODS URL                                            PRODUCTION PODS URL
jenkins-x-demo 0.0.4   1/1  http://jenkins-x-demo.jx-staging.aliyunk8s.com 0.0.4           http://jenkins-x-demo.jx-production.aliyunk8s.com

可以看到生产环境下的应用访问url为: http://jenkins-x-demo.jx-production.aliyunk8s.com
访问 http://jenkins-x-demo.jx-production.aliyunk8s.com (注意hosts绑定):

阿里云容器服务Kubernetes之Jenkins X(2)-自动化CICD实践篇相关推荐

  1. 使用阿里云容器服务Kubernetes实现蓝绿发布功能

    背景 在发布应用时,经常需要先上线一个新版本,用较小的流量去测试一下该新版本的可用性.但是Kubernetes的ingress resource 并没有实现流量控制与切分的功能,导致针对同一个域名下的 ...

  2. CICD联动阿里云容器服务Kubernetes实践之Bamboo篇

    本文档以构建一个 Java 软件项目并部署到 阿里云容器服务的Kubernetes集群 为例说明如何使用 Bamboo在阿里云Kubernetes服务上运行Remote Agents并在agents上 ...

  3. 一小时快速搭建基于阿里云容器服务-Kubernetes的Web应用

    本文面向的读者 如果您是一个Kubernetes的初学者,本文可以帮助你快速在云上搭建一个可实际使用的集群环境,并发布自己的第一个应用.你无须提前准备任何的硬件资源或者下载任何的软件包.  如果您已经 ...

  4. 【阿里云-容器】阿里云容器服务Kubernetes版快速入门

    一.部署并公开 本步骤指导您如何在ACK集群中快速部署一个无状态应用(Deployment),即魔方游戏,并将该应用向公网公开.关于创建Deployment的详细参数描述,请参见创建无状态工作负载De ...

  5. 通过阿里云容器服务K8S Ingress Controller实现应用服务的灰度发布

    简介 日常工作中我们经常需要对服务进行版本更新升级,为此我们经常使用到的发布方式有滚动升级.分批暂停发布.蓝绿发布以及灰度发布,今天主要跟大家分享下在阿里云容器服务Kubernetes集群中如何通过I ...

  6. 阿里云容器服务cni网络插件terway非官方网络性能测试

    作者:张荣滨,酷划在线后端架构师,关注微服务治理,容器化技术,Service Mesh等技术领域 terway网络性能测试 酷划在线成立于2014年,是国内激励广告行业的领军者.酷划致力于打造一个用户 ...

  7. Istio 在阿里云容器服务的部署及流量治理实践

    目标 在阿里云容器服务 Kubernetes 集群上部署 Istio 服务网格 实践灰度发布.故障注入.熔断等 Istio 流量管理特性 准备工作 安装和设置 kubectl 客户端,请参考不同的操作 ...

  8. 区块链应用@纸贵科技:基于阿里云容器服务护航内容版权

    摘要: 区块链如何护航内容版权? 区块链已经成为业界内外家喻户晓的一门技术,很多企业已经开始尝试将区块链应用于不同场景.目前,开源的Hyperledger Fabric区块链技术与容器技术的应用组合已 ...

  9. 阿里云容器服务差异化 SLO 混部技术实践

    背景介绍 阿里巴巴在"差异化 SLO 混合部署"上已经有了多年的实践经验,目前已达到业界领先水平.所谓"差异化 SLO",就是将不同类型的工作负载混合运行在同一 ...

  10. 首批!阿里云容器服务 ACK 顺利通过信通院云原生混部项目评估

    作者:OSCAR 为了分享过去一年云原生产业联盟(CNIA)在标准建设.评估认证.技术研究.实践合作等方面的工作成果.探索行业最新趋势动态,云原生产业联盟于 2023 年 1 月举办了 2022 年度 ...

最新文章

  1. GridView直接以excel格式导出到客户端
  2. 基于函数计算的 BFF 架构
  3. idea java web运行_使用IDEA创建JavaWeb项目 部署本地tomcat并运行
  4. Android Application 对象介绍
  5. 34.rust宏.txt
  6. Lazy延迟实例对象
  7. 2020EC-final
  8. numpy拼接多维数组(numpy.concatenate命令详解)
  9. java程序(1016)
  10. android (三)、Activity工作原理
  11. 第五十一篇 仿真电路简单说明multisim12 电压表电流表
  12. 图像压缩编码码matlab实现——DM编码
  13. 一种通过 ZoomEye 捕获全新 Docker 蜜罐的案例
  14. 高考数学必考知识点数学高考常考考点
  15. javascript招式总结
  16. 打造高效研发团队 (4) —— 团队文化篇
  17. 江苏省电子税务局中文点选验证码识别研究
  18. 无法打开包括文件: “opencv2/opencv_modules.hpp”
  19. webpack 的安装与使用
  20. 【算法-枚举】淘气的青蛙 自己对解题思路的梳理

热门文章

  1. MATLAB遍历文件夹
  2. 纵坐标是横的还是竖的_通感在书法“竖”中的运用,详解竖的知识和技法(硬笔为例)...
  3. swfupload 实例 php,文件上传之SWFUpload插件(代码)_php实例
  4. 贴花纸怎么贴_地砖保护膜怎么贴—怎么贴地砖保护膜
  5. idea启动崩溃问题
  6. vi 打开文件,行末尾有^M
  7. 简单调整配置深度Linux-15迅速开始学习工作
  8. Ruby 常用的正则表达式1
  9. Knockout应用开发指南 第二章:监控属性(Observables)
  10. 微软4月13日发布Silverlight 4正式版