如果您想了解Jenkins配合Kubernetes实现服务持续集成的实践和建议的相关知识,那么本文是一篇不可错过的文章,我们将对jenkinskubernetes配置集群进行全面详尽的解释,并且为您提
如果您想了解Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议的相关知识,那么本文是一篇不可错过的文章,我们将对jenkins kubernetes 配置集群进行全面详尽的解释,并且为您提供关于ASP.NET Core+Docker+Jenkins实现持续集成的完整实例、Jenkins + Gitee + .Net6 实现持续集成与持续交付(CI/CD)、Jenkins Kubernetes插件添加 云、Jenkins Kubernetes操作器成为Jenkins官方子项目!的有价值的信息。
本文目录一览:- Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议(jenkins kubernetes 配置集群)
- ASP.NET Core+Docker+Jenkins实现持续集成的完整实例
- Jenkins + Gitee + .Net6 实现持续集成与持续交付(CI/CD)
- Jenkins Kubernetes插件添加 云
- Jenkins Kubernetes操作器成为Jenkins官方子项目!
Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议(jenkins kubernetes 配置集群)



Kubernetes 本身是一个以服务扩容见长的容器编排系统,如果不能跟其它 CI/CD 工具结合起来,从根本上说还是不能提升开发部署效率,达到持续集成,持续交付的目的,本文以 Jenkins 配合 Kubernetes 完成 Java 服务持续集成和部署过程碰到一些问题,进行说明和总结。

是否需要把 Jenkins 集成 Kubernetes 集群中进行统一管理?

Jenkins 如何搭配 Kubernetes 实现持续集成?

docker build -t docker.hub.com/dev/tomcat-webapps:$version .
docker push docker.hub.om/dev/tomcat-webapps:$version
-
第一点,docker 构建镜像需要 tag ,这个 tag 可以通过 Jenkins 参数化构建,在构建之前输入版本号,如果没有输入,填写默认值即可。
第二点、历史镜像如何处理?比较建议每次镜像构建完成之后,通过 Jenkins 配置命令删除没有运行的镜像。
具体根据使用场景处理这些中间产物。
docker rm $(docker ps -a -q)
kubectl apply -f config.yaml
sed -i ''s/image-replace-webapps/tomcat-webapps:${version}/'' tomcat_deployment.yaml;
kubectl apply -f tomcat_deployment.yaml

「麻雀虽小五脏俱全」一个项目功能不多,但是少不了 configmap、deployment、甚至 service,Jenkins 在打包过程肯定要涉及到对这些文件的修改,问题来了,这些文件如何存放呢?
如果你有强大的 helm 包管理工具,当然可以解决这些问题;如果你的项目没有大到使用 helm 进行文件管理,可以考虑把 yaml 配置直接放到源代码某个目录下面,利用 SVN/GIT 进行管理,也可以直接放到服务器某个路径下面,Jenkins 每次构建时 SSH 到这台服务器进行备份、修改运行 yaml 文件。

3、在构建过程中需要注意问题
docker 镜像构建过程中通过参数化构建已经可以修改版本号,同样的,首先在 k8s 编排文件镜像部分添加能够已知占位符;
然后把这个版本号动态传递并替换到 k8s yaml 中;
sed -i ''s/image-replace-webapps/tomcat-webapps:${version}/'' tomcat_deployment.yaml;
在现实使用场景中,可能会存在多个 Kubernetes 环境,如何处理?
这时可以根据情况进行处理,比如线上环境和开发测试环境镜像仓库、集群环境、Jenkins 都是严格隔离的,那就可以等到开发测试完成之后把上述流程重新走一遍。如果使用同一个 Jenkins 通过不同的用户权限构建到不同环境也是类似道理。其实看你怎么用,因为镜像已经集中存储到仓库,正式线上环境直接拿着 yaml 就可以跑起来,比以前上传 war 更清爽。

4、总结
本文主要以 Jenkins 为中心介绍了持续集成 Kubernetes 过程,Jenkins 本身是持续集成,持续交付工具链过程非常重要的一个部分,它是开源的并且提供了大量可用的插件,入门使用非常简单,但是真正掌握好 Jenkins 使用并不是一件轻松的事情,如何使用 Jenkins 创建出高效稳定、灵活的流水线是所有从事 DevOps 开发人员所亟待解决的问题。
推荐
Kubernetes 排障指南
DevOps 实践带来的好处和挑战
DevOps 成就卓越
云计算交付模型知多少 - IaaS、PaaS、SaaS
docker bridge 到 k8s pod 跨节点网络通信机制演进
Kubernetes 入门培训(内含 PPT)
从 Ice 到 Kubernetes 容器技术,微服务架构经历了什么?
原创不易,随手关注或者” 在看 “,诚挚感谢!
本文分享自微信公众号 - 云原生技术爱好者社区(programmer_java)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。
ASP.NET Core+Docker+Jenkins实现持续集成的完整实例
前言
在前后端分离开发的项目当中为了避免重复构建发布,我们需要部署一个持续发布环境,而目前的开发环境服务器都是基于 CentOS 的,因此每次在本地发布之后还需要打包,上传,部署,十分繁琐。故这里采用了比较成熟的Jenkins 作为持续部署环境。
方法如下:
1.新建一个ASP.NET Core MVC应用程序:
需要勾选Docker支持
2.将其上传到git:
3.建立Jenkins任务
(1)选择“新建任务”,输入任务名称,选择“自由风格项目”,然后点击确定:
(2)选择“源代码管理”,填入我们的git地址
输入H/2 * * * *设置两分钟拉取一次
(3)构建环境
勾上 Delete workspace before build start 是设置构建前删除工作区
勾上 Abort the build if it''s stuck 是设定构建的超时时间,如果构建使用的时间超过设定的时间,那么就认为这次的构建是失败的。笔者这里超时设置的是10分钟
(4)增加一个Execute Shell 脚本,并填写以下脚本内容
#!/bin/bash # 获取短版本号 GITHASH=`git rev-parse --short HEAD` echo ---------------Remove-Orphans------------------ docker-compose -f ./docker-compose.yml -f ./docker-compose.override.yml -p webapplication6 down --rmi local --remove-orphans echo ------------------Config----------------------- docker-compose -f ./docker-compose.ci.build.yml -p webapplication6 config echo ------------------Build------------------------ docker-compose -f ./docker-compose.ci.build.yml -p webapplication6 up --build echo ---------------Publishing...------------------ docker-compose -f "./docker-compose.yml" -f "./docker-compose.override.yml" -p webapplication6 up -d --build echo ---------------Clear-Images...------------------ docker rmi $(docker images -f "dangling=true" -q) echo ---------------Clear-Containers...------------------ docker rm webapplication6_ci-build_1
2018.4.24 加入镜像和容器清理命令,所以上面的脚本和下图不一样,以上面的shell脚本为准
应用保存,回到项目界面上。点击立即构建进行部署工作
我们可以查看控制台输出:
待构建成功以后访问url(你的ip:端口)试试效果。
不知道端口的可以通过命令docker ps
查看
参考资料:
https://www.jb51.net/article/139553.htm
https://www.jb51.net/article/139555.htm
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
- docker部署Asp.net core应用的完整步骤
- Docker容器运行ASP.NET Core的实现步骤
- Asp.net Core Jenkins Docker实现一键化部署的实现
- Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的实现
- 详解ASP.NET Core Docker部署
- .Net Core自动化部署之利用docker版jenkins部署dotnetcore应用的方法
- 关于Jenkins + Docker + ASP.NET Core自动化部署的问题(避免踩坑)
Jenkins + Gitee + .Net6 实现持续集成与持续交付(CI/CD)
目标
创建一个.Net6项目,结合Jenkins、Gitee实现CI/CD (当编写完代码,并提交到Gitee仓库之后,Jenkins自动帮我们测试,打包,发布项目)
关于Jenkins,Docker 的环境搭建可以参考我的上一篇文章
https://www.cnblogs.com/kizuna1314/p/15660880.html
步骤
- Gitee创建一个.Net6项目的仓库
- Jenkins创建一个自由风格的软件项目
- 配置Jenkins和.Net6项目的关联
- 创建.Net6项目,编写接口代码,本文重点主要CI/CD,所以选择创建轻量的Minimal API项目
- 提交Gitee,查看CI/CD效果
创建项目
Gitee准备一个项目
新建一个自由风格的软件项目
配置构建需要的参数
若出现操作过程中出现下图问题,并且Gitee信息填写正确,原因可能是项目需要开源才能访问到
选择添加的用户凭证
配置webHooks
勾选并复制URL
Gitee配置webHooks
填写上一步骤拷贝的URL
点击生成Gitee WebHook 密码
粘贴到WebHook 密码/签名密钥文本框中
验证Jenkins是否能拉取提交的内容
提交了一段代码
成功拉同步了Gitee的更改,接下来只需要把每次同步过来的代码发布即可
下载.Net6 运行时(由于我之前安装过,所以直接显示100%)
官网下载地址:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos
Centos7系列版本可直接运行下面命令下载
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
查看安装
dotnet --list-sdks
安装supervisor
yum install -y supervisor
查看所有 supervisor服务状态
supervisorctl status
编写一个后台进程(.ini)文件
# 创建并编辑一个.ini文件,我这里以 "net6demo" 为例
vim /etc/supervisord.d/net6demo.ini
文件内容
# 
[program:net6demo]
command=dotnet net6test.dll --urls http://0.0.0.0:5000 # 这里改成实际的.dll文件 以及需要暴露的端口
directory=/pub # 这里是发布的文件路径,所以 需要在外面再创建pub文件夹
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/logs/net6test.out.log
stderr_logfile=/logs/net6test.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=root
priority=999
numprocs=1
process_name=%(program_name)s_%(process_num)02d
创建/pub、/logs 文件夹,并给予读写权限
mkdir /pub /logs
chmod -R 777 /pub /logs
启动supervisor后台进程
supervisord -c /etc/supervisord.conf
查看后台后台守护进程状态
supervisorctl status
进程名称需要记下来,因为后面我们重新发布的时候需要重启这个守护进程
配置ssh构建实现自动拉取并部署项目
选择增加构建步骤
编写shell脚本
echo------------stopapp------------------
supervisorctl stop net6demo:net6demo_00
echo------------publish------------------
cd /app/net6test/net6test
dotnet publish -o /pub
echo------------delcode------------------
cd /app
rm -rf *
echo------------online------------------
supervisorctl start net6demo:net6demo_00
编辑完内容之后,保存
立即构建,看看是否拉取并发布了
查看构建明细
我们可以看到,项目已经自动发布到/pub文件夹下面了
访问接口
服务器本机访问
web访问
更改项目内容,提交Gitee后看看是否会自动发布
几秒钟以后,服务器上的程序已经自动更新了
查看一下控制台
以上就是.Net6结合Jenkins实现CI/CD的全过程,由于是重点介绍CI/CD 为了让大家更好的上手,所以项目编写的比较简陋,大家可以根据实际情况自由扩展
Jenkins Kubernetes插件添加 云
Th Jenkins Kubernetes插件是一个很棒的工具,可以将Jenkins从属设备动态配置为Kubernetes集群上的pod。您需要做的就是添加和配置Kubernetes Cloud作为Jenkins配置的一部分。
要求
你需要的东西:
1.Kubernetes的配置文件 即 admin.conf,安装Kubernetes时KUBERCONfig
~]# echo $KUBECONfig
/etc/kubernetes/admin.conf
2.安装Jenkins Kubernetes插件
安装插件
首页 --- 系统管理 --- 管理插件 --- 可选插件 -- Kubernetes plugin 安装即可,安装后如图
配置Kubernetes 云
首页---系统管理 --- 系统设置 ---最下面 新增一个云
本地集群,即jenkins master 托管在同一个kubernetes集群上,那么只需要为本地集群提供kubernetes url
如:https://kubernetes:6443
kubernetes namespace 填写你需要运行slave的namespace default
测试连接
远程集群
用到上面提到的kubernetes的配置文件
文件中有三个值 certificate-authority-data 、client-certificate-data 、 client-key-data
解码它们获得证书 ,注意将上面的值替换称自己的一大长传字符串
echo certificate-authority-data | base64 -d > ca.crt
echo client-certificate-data | base64 -d > client.crt
echo client-key-data | base64 -d > client.key
根据这三个文件生成一个PKCS12格式的客户端证书文件
openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
注意生成证书的时候,一定要填写密码,后面会用到
回到Jenkins添加一个云的界面
将ca.crt中的内容填写到 Kubernetes server certificate key 字段
添加客户端证书
如图所示,上传证书,填写密码等相关值,即可
完成后点击测试连接查看是否成功
Jenkins Kubernetes操作器成为Jenkins官方子项目!
作者:Bartek Antoniak 和 Sylwia Brant
我们很高兴地宣布,Jenkins 操作器[1]正式成为正式的 Jenkins 子项目。
对这个项目意味着什么?
成为 Jenkins 项目的正式成员是与 Jenkins 整体路线图更好地对接的重要一步,也为增加 Jenkins 操作器项目的应用提供了更多机会。
最后,在VirtusLab[2]有一个专门的团队积极维护项目,我们可以与更广泛的社区接触,并参与一些云原生 SIG 会议[3]。这为每个人提供了一个表达意见或开始支持项目的空间。
我们坚信,这个社区的参与将对 Jenkins 操作器以及 Jenkins 生态系统本身产生重大的改善。
弥合 Jenkins 和 Kubernetes 之间的鸿沟
在像 Kubernetes 这样的云原生环境中运行 Jenkins 并不是一项微不足道的任务。通过 Jenkins 操作器项目,我们希望社区能够充分利用 Kubernetes 和公有云功能:
-
与公有云服务在可观察性、存储和云安全领域的原生集成 -
Kubernetes 的自动缩放和自愈机制 -
对 Jenkins 实例的安全访问 -
使用 Kubernetes 自定义资源的声明式配置 -
完整的生命周期管理,最终将其转换为自动驾驶(操作)
参与走向世界的征程
开始贡献[4]和发挥重要作用,创建自动化 Jenkis 的体验!不要犹豫,积极参与社区活动。加入我们的工作,创建你认为有益的功能。欢迎你创建问题和拉取请求。我们正在积极解决社区问题,并在专用的Slack[5]频道上提供答案。
由于该项目已经由 VirtusLab 进行了初步开发,并仍在积极维护,因此我们开始讨论[6]开放治理模型,以促进交流和协作。
通过提供反馈来引导我们前进
为了庆祝我们的项目正在打开的新的可能性,我们想邀请你参加一个简短的调查[7],这将帮助我们在正确的轨道上。如果你一直在使用 Jenkins 操作器或运行 Jenkins 在任何其他环境,请花一点时间填写我们的快速调查。我们将选择至少三个信息最丰富的答案,并发给你一件很棒的 Jenkins 操作器 t 恤,有我们可爱的地鼠管家。记住,最真诚的回答是最好的。
如果你还没有使用过 Jenkins Kubernetes 操作器,那么非常欢迎你使用。试试吧,发现一种管理 Jenkins 的新方法。
这里有入门指南[8]。
关于作者
Bartek Antoniak
-
云原生世界的工程经理,管理中型跨职能团队,并在 VirtusLab 中负责云相关计划。 -
https://github.com/antoniaklja -
https://twitter.com/antoniaklja
Sylwia Brant
-
VirtusLab 软件工程师,从事云本地技术领域的工作。 -
Jenkins Kubernetes Operator 维护者。 -
https://github.com/SylwiaBrant
参考资料
Jenkins 操作器: https://www.jenkins.io/projects/jenkins-operator/
[2]VirtusLab: http://virtuslab.com/
[3]云原生 SIG 会议: https://www.jenkins.io/sigs/cloud-native/#meetings
[4]贡献: https://github.com/jenkinsci/kubernetes-operator/blob/master/CONTRIBUTING.md
[5]Slack: https://github.com/jenkinsci/kubernetes-operator#community
[6]讨论: https://groups.google.com/g/jenkinsci-dev/c/OA5nb_SAgh0/m/OoBS2o8nAwAJ:
[7]调查: https://docs.google.com/forms/d/1doIkgnm3_WbjtlwWSU4sOoiI7QoneHlYIjXEJOVMrfQ/edit?usp=sharing
[8]入门指南: https://www.jenkins.io/projects/jenkins-operator/#getting-started
点击【阅读原文】阅读网站原文。
联系关于Linux基金会
Linux基金会是非营利性组织,是技术生态系统的重要组成部分。
Linux基金会通过提供财务和智力资源、基础设施、服务、活动以及培训来支持创建永续开源生态系统。在共享技术的创建中,Linux基金会及其项目通过共同努力形成了非凡成功的投资。请长按以下二维码进行关注。