阿里云容器服务Kubernetes之Jenkins X(2)-自动化CICD实践篇
在云栖博客 阿里云容器服务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实践篇相关推荐
- 使用阿里云容器服务Kubernetes实现蓝绿发布功能
背景 在发布应用时,经常需要先上线一个新版本,用较小的流量去测试一下该新版本的可用性.但是Kubernetes的ingress resource 并没有实现流量控制与切分的功能,导致针对同一个域名下的 ...
- CICD联动阿里云容器服务Kubernetes实践之Bamboo篇
本文档以构建一个 Java 软件项目并部署到 阿里云容器服务的Kubernetes集群 为例说明如何使用 Bamboo在阿里云Kubernetes服务上运行Remote Agents并在agents上 ...
- 一小时快速搭建基于阿里云容器服务-Kubernetes的Web应用
本文面向的读者 如果您是一个Kubernetes的初学者,本文可以帮助你快速在云上搭建一个可实际使用的集群环境,并发布自己的第一个应用.你无须提前准备任何的硬件资源或者下载任何的软件包. 如果您已经 ...
- 【阿里云-容器】阿里云容器服务Kubernetes版快速入门
一.部署并公开 本步骤指导您如何在ACK集群中快速部署一个无状态应用(Deployment),即魔方游戏,并将该应用向公网公开.关于创建Deployment的详细参数描述,请参见创建无状态工作负载De ...
- 通过阿里云容器服务K8S Ingress Controller实现应用服务的灰度发布
简介 日常工作中我们经常需要对服务进行版本更新升级,为此我们经常使用到的发布方式有滚动升级.分批暂停发布.蓝绿发布以及灰度发布,今天主要跟大家分享下在阿里云容器服务Kubernetes集群中如何通过I ...
- 阿里云容器服务cni网络插件terway非官方网络性能测试
作者:张荣滨,酷划在线后端架构师,关注微服务治理,容器化技术,Service Mesh等技术领域 terway网络性能测试 酷划在线成立于2014年,是国内激励广告行业的领军者.酷划致力于打造一个用户 ...
- Istio 在阿里云容器服务的部署及流量治理实践
目标 在阿里云容器服务 Kubernetes 集群上部署 Istio 服务网格 实践灰度发布.故障注入.熔断等 Istio 流量管理特性 准备工作 安装和设置 kubectl 客户端,请参考不同的操作 ...
- 区块链应用@纸贵科技:基于阿里云容器服务护航内容版权
摘要: 区块链如何护航内容版权? 区块链已经成为业界内外家喻户晓的一门技术,很多企业已经开始尝试将区块链应用于不同场景.目前,开源的Hyperledger Fabric区块链技术与容器技术的应用组合已 ...
- 阿里云容器服务差异化 SLO 混部技术实践
背景介绍 阿里巴巴在"差异化 SLO 混合部署"上已经有了多年的实践经验,目前已达到业界领先水平.所谓"差异化 SLO",就是将不同类型的工作负载混合运行在同一 ...
- 首批!阿里云容器服务 ACK 顺利通过信通院云原生混部项目评估
作者:OSCAR 为了分享过去一年云原生产业联盟(CNIA)在标准建设.评估认证.技术研究.实践合作等方面的工作成果.探索行业最新趋势动态,云原生产业联盟于 2023 年 1 月举办了 2022 年度 ...
最新文章
- GridView直接以excel格式导出到客户端
- 基于函数计算的 BFF 架构
- idea java web运行_使用IDEA创建JavaWeb项目 部署本地tomcat并运行
- Android Application 对象介绍
- 34.rust宏.txt
- Lazy延迟实例对象
- 2020EC-final
- numpy拼接多维数组(numpy.concatenate命令详解)
- java程序(1016)
- android (三)、Activity工作原理
- 第五十一篇 仿真电路简单说明multisim12 电压表电流表
- 图像压缩编码码matlab实现——DM编码
- 一种通过 ZoomEye 捕获全新 Docker 蜜罐的案例
- 高考数学必考知识点数学高考常考考点
- javascript招式总结
- 打造高效研发团队 (4) —— 团队文化篇
- 江苏省电子税务局中文点选验证码识别研究
- 无法打开包括文件: “opencv2/opencv_modules.hpp”
- webpack 的安装与使用
- 【算法-枚举】淘气的青蛙 自己对解题思路的梳理
热门文章
- MATLAB遍历文件夹
- 纵坐标是横的还是竖的_通感在书法“竖”中的运用,详解竖的知识和技法(硬笔为例)...
- swfupload 实例 php,文件上传之SWFUpload插件(代码)_php实例
- 贴花纸怎么贴_地砖保护膜怎么贴—怎么贴地砖保护膜
- idea启动崩溃问题
- vi 打开文件,行末尾有^M
- 简单调整配置深度Linux-15迅速开始学习工作
- Ruby 常用的正则表达式1
- Knockout应用开发指南 第二章:监控属性(Observables)
- 微软4月13日发布Silverlight 4正式版