GVKun编程网logo

Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议(jenkins kubernetes 配置集群)

24

如果您想了解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 配置集群)

Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议(jenkins kubernetes 配置集群)




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



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

当你在网上搜索 Jenkins 持续集成 dockers/kubernetes 时,80% 答案是在 Kubernetes 集群中容器化 Jenkins ,在我看来,对于业务服务数量有限的互联网公司,前期的话,不是特别建议把 Jenkins 直接安装到 kubernetes 集群当中,特别是在没有使用 Kubernetes 容器云平台之前已经有了自动化构建工具,有以下原因:

首先早阶段开发、测试、生产环境已经部署了 Jenkins,已经习惯了这种使用方式,Jenkins 本身呢,只是执行一些命令,本身不会耗费太多资源,不需要多个副本和横向扩展的能力,把需要持续交付的服务实现容器化再说吧。

再者如果你把 Jenkins 放到 Kubernetes 集群中执行,你需要把 Jenkins 打成镜像,放到 Pod 中执行,而一般情况下根据镜像的最小化原则,镜像里面不会包含 docker 组件,所以如果你在宿主机上打包可以正常执行,而放到 Pod 中可能会出现无法 docker build ,当然这也是可以解决的,因为 docker 本身是 B/S 架构,你可以通过在镜像内部挂载 docker 命令,调用宿主机 docker socket 端口;更简单方法,直接远程到一台包含 docker 基础服务的服务器上执行,但无论如何,你可能都要折腾一下,改变现有使用方式。


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


整体流程如下图所示:
简单分为五个过程
1、需求原型开发完成,开发人员介入开发;
2、开发人员将代码提交到代码仓库 git/SVN;
3、钩子触发 jenkins master 启动一次构建,或者开发人员自行点击构建,根据情况自行选择,jenkins 拉取代码、maven 编译;

这里假设你已经完成 Jenkins 安装、远程工具、java 编译环境配置等。如果没有配置,网上找找,资料特别多。这部分其实相对来说和之前使用 Jenkins 的方式区别不大,如果你使用 git,这里还是 git 拉取代码,之前是 maven/ant 进行打包,那么这里还是 maven/ant 进行打包。

4、docker 镜像构建、镜像提交到仓库;
docker 镜像在构建需要区别与以前的形式,如果你已经在 Jenkins 上安装了 docker 插件,直接在当前机器构建即可,如果没,也没问题,远程 SSH 到一台能够构建 docker 镜像的服务器进行镜像打包。

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)

5、Kubernetes yaml 运行过程到仓库拉取 docker 镜像构建产物,从而启动整个服务,测试人员开始全方位功能、性能测试。
kubectl apply -f config.yamlsed -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 每次镜像构建 tag 不一样,如何传递到 k8s yaml 中?

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实现持续集成的完整实例

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)

Jenkins + Gitee + .Net6 实现持续集成与持续交付(CI/CD)

目标

image


创建一个.Net6项目,结合Jenkins、Gitee实现CI/CD (当编写完代码,并提交到Gitee仓库之后,Jenkins自动帮我们测试,打包,发布项目)

关于Jenkins,Docker 的环境搭建可以参考我的上一篇文章
https://www.cnblogs.com/kizuna1314/p/15660880.html

步骤

  1. Gitee创建一个.Net6项目的仓库
  2. Jenkins创建一个自由风格的软件项目
  3. 配置Jenkins和.Net6项目的关联
  4. 创建.Net6项目,编写接口代码,本文重点主要CI/CD,所以选择创建轻量的Minimal API项目
  5. 提交Gitee,查看CI/CD效果

创建项目

Gitee准备一个项目

image

新建一个自由风格的软件项目

image

配置构建需要的参数

image


若出现操作过程中出现下图问题,并且Gitee信息填写正确,原因可能是项目需要开源才能访问到

image


image

image

选择添加的用户凭证

image

配置webHooks

勾选并复制URL

image

Gitee配置webHooks

image

填写上一步骤拷贝的URL

image

点击生成Gitee WebHook 密码

image

粘贴到WebHook 密码/签名密钥文本框中

image

验证Jenkins是否能拉取提交的内容

提交了一段代码

image

成功拉同步了Gitee的更改,接下来只需要把每次同步过来的代码发布即可

image

下载.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

image

查看安装
dotnet --list-sdks

image

安装supervisor
yum install -y supervisor

image

查看所有 supervisor服务状态
supervisorctl status

image

编写一个后台进程(.ini)文件
# 创建并编辑一个.ini文件,我这里以 "net6demo" 为例
 vim /etc/supervisord.d/net6demo.ini
文件内容
# ![image](https://www.icode9.com/i/l/?n=20&i=blog/1289480/202112/1289480-20211210165543840-343976883.png)

[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

image

创建/pub、/logs 文件夹,并给予读写权限
mkdir /pub /logs
chmod -R 777  /pub /logs
启动supervisor后台进程
supervisord -c /etc/supervisord.conf

image


查看后台后台守护进程状态

supervisorctl status

进程名称需要记下来,因为后面我们重新发布的时候需要重启这个守护进程

image

配置ssh构建实现自动拉取并部署项目

image

选择增加构建步骤

image

编写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
编辑完内容之后,保存

image

立即构建,看看是否拉取并发布了

image

查看构建明细

image

我们可以看到,项目已经自动发布到/pub文件夹下面了

image

访问接口

服务器本机访问

image

web访问

image

更改项目内容,提交Gitee后看看是否会自动发布

image


几秒钟以后,服务器上的程序已经自动更新了

image

查看一下控制台

image

以上就是.Net6结合Jenkins实现CI/CD的全过程,由于是重点介绍CI/CD 为了让大家更好的上手,所以项目编写的比较简陋,大家可以根据实际情况自由扩展

Jenkins Kubernetes插件添加 云

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官方子项目!

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

参考资料

[1]

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基金会及其项目通过共同努力形成了非凡成功的投资。请长按以下二维码进行关注。

本文分享自微信公众号 - LFAPAC(gh_8442c14fe49e)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

今天关于Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议jenkins kubernetes 配置集群的分享就到这里,希望大家有所收获,若想了解更多关于ASP.NET Core+Docker+Jenkins实现持续集成的完整实例、Jenkins + Gitee + .Net6 实现持续集成与持续交付(CI/CD)、Jenkins Kubernetes插件添加 云、Jenkins Kubernetes操作器成为Jenkins官方子项目!等相关知识,可以在本站进行查询。

本文标签:

上一篇Kubernetes 发布 SpringBoot 项目过程总结(kubernetes部署springcloud)

下一篇Kubernetes排障指南(kubernetes排错)