加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

基于Docker的Jenkins持续交付实践

发布时间:2021-01-13 21:15:27 所属栏目:电商 来源:网络整理
导读:《基于Docker的Jenkins持续交付实践》要点: 本文介绍了基于Docker的Jenkins持续交付实践,希望对您有用。如果有疑问,可以联系我们。 讲师介绍 : 叶峰 有容云资深前端开发工程师 现负责有容云容器云平台Web架构设计和CI(持续集成)产品的研发 拥有丰富的Web

  1. 这里将docker.sock和docker的可执行文件挂载到Jenkins容器中,这样我们就可以在容器中使用docker了.
  2. Jenkins容器,默认的用户是Jenkins.因为我们需要使用Docker,所以我们需要使用root用户.
  3. /var/jenkins_home的挂在卷是可选的,Jenkins_home存放了所有任务、日志、认证、插件等jenkins运行后的文件.可做数据恢复使用.

配置Jenkins

  • 解锁jenkins

解锁的密码在容器的log中可以查看,或者直接查看jenkins_home指定文件

  • 选择插件

创建Pipeline

下面我们创建一个的Jenkins的Pipeline完成简单的cicd流程.

  1. 新建pipeline,在左侧新建选择pipeline.
  2. 在左侧的Credentials中新建git和镜像仓库的credentials
  3. 配置pipeline,例如定时触发,代码更新触发,webhook触发等.
  4. 在pipeline script中填入下面的demo.

以下是伪代码,仅提供思路

Jenkins pipeline的脚本语法是groovy的语法,其中docker 、Git是插件提供的能力.代码的执行流程如下:

  1. 通过Git插件获取最新代码到jenkins的工作区,例如`/var/jenkins_home/workspace/pipelineDemo.
  2. docker.image().inside是如何编译我们的代码呢,通过查看Jenkins的console 可以看到如下log.
  3. [Pipeline] withDockerContainer

  4. 熟悉Docker命令的朋友应该很容易理解了,原来是docker.image().inside启动的时候会将当前的目录挂在到容器中,然后在容器中执行./script/build.sh,这样我们就完成了利用容器中存在的环境做单元测试或构建编译了.
  5. 通过docker插件提供的能力构建镜像,Dockerfile存放在代码目录中.构建镜像后push到镜像仓库,私有仓库需要自行配置镜像仓库.
  6. 镜像构建完成之后就可以删掉旧版本,并重新运行一个新的版本.

通过简单的例子,可见Jenkins和Docker的结合给CICD带来了足够的便利和强大.我们需要准备的只是一个编译的脚本,在编译脚本中可以使用任何的环境和任何的版本.

Pipeline 介绍

Jenkins的任务两个主要版本.

free style只是一个自动化的脚本,脚本类型为shell.所有的脚本在一台机器上运行,需要的环境需要提前准备.配置不集中,混乱.但是一般情况下还是够用的.

pipeline 是jenkins2的版本使用了一个基于groovy脚本的任务类型,通过一系列的stage将构建的不同部分组合成一个pipline.而且配合step可以完成异步操作.因为基于groovy可编程性更加强大,而且脚本可以存放在源码中,脚本的更改不需要直接到jenkins中修改.

pipeline的一些使用经验和技巧

1.Jenkins的资料较少,官网可以查看的内容也不多,一般的需求Jenkins内置的pipeline-syntax里面就有常用的命令生成器.可以满足大多数需求.

2.在pipeline脚本调试完成之后应该将脚本以文件的形式放在源码目录中,这样子方便修改.和多分支需要编译的情况下进行互相隔离.

3.应该多查找下相应的插件,而不是使用sh用执行脚本的方式来解决问题.

4.应该将jenkins_home目录挂在出来,如果遇上了Jenkins崩溃了可以及时的恢复数据.

5.应该新建一个定时的pipeline用来清理生成的镜像,减少硬盘资源的占用.

6.页面新建的pipeline,在页面删除之后,jenkins_home/workspace中对应的项目文件并不会被删除.

总结

持续发布很多团队想有这样的工具达到这个效果,有些团队觉得不需要.任何工具、流程都需要符合自身团队的实际.从我开始参与团队内的这个和持续发布有关的项目,查看了许多资料,结合团队项目内的实践.给出的一些经验的和见解和大家一起分享,如有错误或者建议,欢迎大家及时沟通.

Q&A

Q1:请问Kubernetes怎么结合Jenkins做持续集成呢?

A1:部署到Kubernetes.Kubernetes除了可以通过API调用还可以在Jenkins中配置kubectl的方式创建或更新deployments.

Q2:必须通过pipeline才能实现Jenkins把代码构建成Docker镜像么?

A2:不一定,使用Docker主要是方便进行编译环境的隔离,也可以配置好NFS,构建完成之后复制到固定的服务器上,这个我们一般叫制品库.

Q3:Pipeline如何通过Docker容器部署应用到不同的节点上去?发布遇到问题如何回滚版本的?

A3:Jenkins的能力更多的是做持续集成(CI)的功能,部署和回滚都需要容器管理平台并不是Jenkins的强项,特别是回滚单依靠Jenkins很难做到完美的方案.但是部署到不同的Docker的节点上,可以使用第三方的管理平台,例如Appsoar和k8s提供的API能力,可以进行部署.Jenkins直接调用curl命令执行容器管理平台提供的API.

Q4:pipeline的每个环节的报告如何快速获取?比如代码静态检查,工程构建,测试报告等等.

A4:?http://jenkins:8080/job/clearImages/86/wfapi/,通过Jenkins这个API,可以获取一些状态和时间信息,至于详细的代码静态检查,每种语言都有不同的语法检查.需要自行配置.当然详细的需要查看输出日志.

Q5:关于测试驱动开发,在开发之前写好的用例一定要是自动化的吗?为什么?

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读