营销数据网站,关于网页制作的网站,手机人才网,设计联盟一、jenkins 是什么#xff1f;
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具#xff0c;起源于Hudson#xff0c;主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写#xff0c;可在Tomcat等流行的servlet容器中运行#…一、jenkins 是什么
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具起源于Hudson主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写可在Tomcat等流行的servlet容器中运行也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT构建工具有Maven、Ant、Gradle。
二、CI/CD是什么
CI(Continuous integration中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后立刻进行构建、单元测试。根据测试结果我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。 CI
CD(Continuous Delivery 中文意思持续交付)是在持续集成的基础上将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如我们完成单元测试后可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。 CI/CD
三、使用Jenkins进行PHP代码(单元)测试、打包。
Jenkins是一个强大的CI工具虽然本身使用Java开发但也能用来做其他语言开发的项目CI。下面讲解如何使用Jenkins创建一个构建任务。
登录Jenkins 点击左侧的新建创建新的构建任务。 跳转到如下界面。任务名称可以自行设定但需要全局唯一。输入名称后选择构建一个自由风格的软件项目(其他选项不作介绍)。并点击下方的确定按钮即创建了一个构建任务。之后会自动跳转到该job的配置页面。 新建自由风格的软件项目
下图是构建任务设置界面可以看到上方的几个选项General, 源码管理 构建触发器构建环境 构建 构建后操作。下面逐一介绍。 1.General
General是构建任务的一些基本配置。名称描述之类的。 General
项目名称: 是刚才创建构建任务步骤设置的当然在这里也可以更改。
描述: 对构建任务的描述。
丢弃旧的构建 服务器资源是有限的有时候保存了太多的历史构建会导致Jenkins速度变慢并且服务器硬盘资源也会被占满。当然下方的保持构建天数 和 保持构建的最大个数是可以自定义的需要根据实际情况确定一个合理的值。
其他几个选项在这里不做介绍有兴趣的可以查看Jenkins帮助信息 会有一个大概的介绍。不过这些帮助信息都是英文的。 点击右方的这些问号查看帮助信息
2.源码管理
源码管理就是配置你代码的存放位置。 源码管理
Git: 支持主流的github 和gitlab代码仓库。因我们的研发团队使用的是gitlab所以下面我只会对该项进行介绍。
Repository URL仓库地址
Credentials凭证。可以使用HTTP方式的用户名密码也可以是RSA文件。 但要通过后面的ADD按钮添加凭证。
Branches to build构建的分支。*/master表示master分支也可以设置为其他分支。
源码浏览器你所使用的代码仓库管理工具如github, gitlab.
URL填入上方的仓库地址即可。
Version: 8.7 这个是我们gitlab服务器的版本。
Subversion就是SVN这里不作介绍。
****
3.构建触发器
构建触发器顾名思义就是构建任务的触发器。 触发远程构建(例如使用脚本): 该选项会提供一个接口可以用来在代码层面触发构建。这里不做介绍后期可能会用到。
Build after other projects are built 该选项意思是在其他projects构建后构建。这里不作介绍后期可能会用到该选项。
Build periodically 周期性的构建。很好理解就是每隔一段时间进行构建。日程表类似 linux crontab书写格式。如下图的设置表示每隔30分钟进行一次构建。 周期构建
Build when a change is pushed to GitLab当有更改push到gitlab代码仓库即触发构建。后面会有一个触发构建的地址一般被称为webhooks。需要将这个地址配置到gitlab中webhooks如何配置后面介绍。这个是常用的构建触发器。
Poll SCM该选项是配合上面这个选项使用的。当代码仓库发生改动jenkins并不知道。需要配置这个选项周期性的去检查代码仓库是否发生改动。 十分钟检查一次
4.构建环境
构建环境就是构建之前的一些准备工作如指定构建工具(在这里我使用ant)。 构建环境中的构建工具
With Ant选择这个工具并指定ant版本和jdk版本。这两个工具的版本我都事先在服务器上安装并且在jenkins全局工具中配置好了。
其他选项不作介绍同样可以查看帮助信息 获得使用帮助。
5.构建
选择下方的增加构建步骤。 增加构建步骤
可以选择的项很多。这里就介绍Invoke Ant 和Execute shell.
Eexcute shell 执行shell命令该工具是针对linux环境的windows环境也有对应的工 具Execute Windows batch command。 在构建之前可能我们需要执行一些命令比如压缩包的解压之类的。为了演示我就简单的执行 echo $RANDOM 这样的linux shell下生产随机数命令。
Invoke AntAnt是一款java项目构建工具当然也能用来构建php。 Ant Version 选择Ant版本。这个ant版本是安装在jenkins服务器上的版本并且需要在jenkins系统工具中设置好。
Targets要执行的操作一行一个操作任务。以上图为例build是构建tar是打包。
Build File: 是Ant构建的配置文件如果不指定则是在项目路径下的workspace目录中的build.xml。build.xml文件具体怎么配置后面再细讲。
properties: 设定一些变量这些变量可以在build.xml 中被引用。
Send files or execute commands over SSH发送文件到远程主机或执行命令(脚本) Name: SSH Server的名称。SSH Server可以在jenkins-系统设置中配置。
source files: 需要发送给远程主机的源文件。
Remove prefix: 移除前面的路径。如果不设置这个参数则远程主机会自动创建构建源 source files 包含的那个路径。
Remote directory: 远程主机目录。
Exec command在远程主机上执行的命令或者执行的脚本。
6.构建后操作
构建后操作就是对project构建完成后的一些后续操作比如生成相应的代码测试报告。 **** 邮件通知
Publish Clover PHP Coverage Report发布代码覆盖率xml格式的文件报告。路径会在build.xml文件中定义
Publish HTML reports发布代码覆盖率的HTML报告。
Report Crap: 发布crap报告。
E-mail Notification: 邮件通知构建完成后发邮件到指定的邮箱。
以上配置完成后点击保存。
7.其他相关配置
SSH Server配置
登录jenkins -- 系统管理 -- 系统设置
配置请看下图 SSH SERVER
SSH Servers: 由于jenkins服务器公钥文件我已经配置好所以之后新增SSH Servers 只需要配置这一项即可。
Name 自定义需要全局唯一。
HostName: 主机名直接用ip地址即可。
Username: 新增Server的用户名这里配置的是root。
Remote Directory: 远程目录。jenkins服务器发送文件给新增的server默认是在这个目录。
Ant 配置文件 build.xml
接下来讲解Ant 构建配置文件build.xml。 之所以是build.xml 这是因为官方惯例。就好比任何编程语言的入门都会是打印Hello world. 你也可以用其他名称代替build.xml .
下面针对配置文件build.xml 关键配置进行说明。 project name就是项目名称和jenkins所创建的对应。
target namebuild 就是构建的名称和jenkins构建步骤 那里的targets对应。depends指明构建需要进行的一些操作。
property 用来设置变量。
fileset 这一行指明了一个文件夹用include来指明需要包含的文件exclude指明不包含的文件tar即是打包这个文件夹中匹配到的文件。
下面的这些target都是一些实际的操作步骤比如make_runtime这个target 就是创建了一些目录。phpcs就是利用PHP_CodeSniffer这个工具 对PHP代码规范与质量检查工具。 最后这个target tar 就是打包文件。因为上面的build 并没有包含这个target所以默认情况下执行build是不会打包文件的所以在jenkins project配置界面Ant构建那一步的targets我们才会有build 和 tar 这两个targets。如果build.xml 中 build这个target depends中已经包含tar , 就不需要在jenkins中增加tar了。
其他一些target 都是利用一些工具对php代码的操作比如phpunit是进行php单元测试。这一些方面我没有深入的研究只是进行了一些简单的配置毕竟不是这方面的专业人士。
配置 Gitlab webhooks
在gitlab的project页面 打开settings再打开 web hooks 。点击ADD WEB HOOK 添加webhook。把之前jenkins配置中的那个url 添加到这里添加完成后点击TEST HOOK进行测试如果显示SUCCESS 则表示添加成功。 配置phpunit.xml
phpunit.xml是phpunit这个工具用来单元测试所需要的配置文件。这个文件的名称同样也是可以自定义的但是要在build.xml中配置好名字就行。默认情况下用phpunit.xml, 则不需要在build.xml中配置文件名。 build.xml中phpunit配置
fileset dir 指定单元测试文件所在路径include指定包含哪些文件支持通配符匹配。当然也可以用exclude关键字指定不包含的文件。 四、进行jenkins project 构建
第一次配置好jenkins project之后会自动触发一次构建。此后每当有commit 提交到master分支前面设置的是master分支也可以设置为其他分支就会触发一次构建。当然也可以在project页面手动触发构建。点击左边的立即构建 手动触发构建。 手动触发构建
五、构建结果说明
构建状态
Successful蓝色构建完成并且被认为是稳定的。
Unstable黄色构建完成但被认为是不稳定的。
Failed红色构建失败。
Disable灰色构建已禁用
构建稳定性
构建稳定性用天气表示晴、晴转多云、多云、小雨、雷阵雨。天气越好表示构建越稳定反之亦然。
构建历史界面
console output 输出构建的日志信息
六、jenkins权限管理
由于jenkins默认的权限管理体系不支持用户组或角色的配置因此需要安装第三发插件来支持角色的配置本文将使用Role Strategy Plugin。基于这个插件的权限管理设置请参考这篇文章:jenkins配置基于角色的项目权限管理设置步骤_russ44的博客-CSDN博客这里不作详细介绍。
至此就可以用jenkins周而复始的进行CI了当然jenkins是一个强大的工具功能绝不仅仅是以上这些其他方面要是以后用到我会更新到这篇文章中。有疑问欢迎在下方留言。
最后放上一张Jenkins的思维导图 2、Docker、Kubernetes的 CICD实现思路
代码变更→触发jenkins build→拉取代码到jenkins节点→mvn打war包→测试→dockerfile打成镜像→docker tag →docker push到harbor → k8s部署
Jenkins是一个比较流行的持续集成工具 GitLab是存储镜像的镜像仓库
由客户端将代码push推送到git仓库gitlab上配置了一个webHook的东西可以触发Jenkins的构建。进入到Jenkins虚线范围内它所做的事情非常多从mvn构建代码对代码进行静态分析做单元测试测试通过之后就可以build镜像镜像构建成功后就把镜像push推送到Harbor镜像仓库中镜像push推送到镜像仓库后我们就可以调用kubernetes集群的restAPI更新服务而后kubernetes接收到了更新的指令从Harbor镜像仓库pull拉取镜像从而完成服务的更新与重启最后我们从客户端来访问kubernetes集群的服务
1.开发从镜像库里获取基础镜像对应用进行容器化开发
2.开发提交代码到Gitlab在Kubernetes中实现Gitlab服务并通过持久化存储保存用户数据
3.Gitlab收到代码提交请求后通过webhook触发Jenkins master
4.Jenkins master收到请求后在slave节点中对源码进行打包
5.在源码打包完成后根据流水线从Gitlab中获取dockerfile在slave节点中生成docker images
6.Docker镜像生成之后上传到Docker 私有仓库harbor
8.通过Jenkins流水线在Kubernetes测试环境拉取镜像部署应用
9.测试成功之后通过Jenkins流水线在Kubernetes生产环境进行应用的部署上线。
其中build镜像过程还可以细分为两部
1、构建可执行的程序包Java为tar包
2、将tar包导入基础镜像Java程序的基础镜像可以理解为一个包含了JDK的linux系统其实现可以通过dockerfile导入tar包到基础镜像从而构建为应用镜像也可以通过openshift的s2i启动一个名为build的pod将tar包的二进制流导入基础镜像然后通过docker commit构建为应用镜像