该文主要介绍如何从零开始利用Jenknis实现自动化构建项目镜像,并创建且启动相关容器。预备知识(git,docker,shell)。全文分两部分,分别采用无参数自动化构建和含用户指定参数的两种构建方式进行部署举例说明。
一、根据解析git提交日志内容实现自动化部署
1、整体实现流程概述
大致为首先git提交代码更新,提交更新后触发jenknis(这里为执行指定脚本),从提交注释中解析本次提交是否发版,提交注释规则此处约定为: ,提交说明,版本号,是否发版(是:1,否:0), 注:‘,’为分隔符。根据解析出的发版标识,如果发版则执行构建镜像,并利用docker-compose创建并启动容器,否则则退出。
2、方案具体实现
- 为了做到每次更新只需要拉取代码部分,所以先将项目需要用到的软件包,工具类等构建到基础镜像中,之后在更新时只需要下载最新版代码,引用之前构建好的基础包即可构建出可用的完整项目镜像。在此例中以构建的kettle基本运行环境作为基础镜像:
kettle:basic
- 编写执行构建镜像的shell脚本
脚本整体思想:
- 根据jenknis的更新日志获取git提交注释内容,并解析本次提交是否发版,版本号等信息,核心代码如下:
- 利用拉取下来的Dockerfile文件,进行镜像构建,核心代码如下:
- 将制作好的镜像上传到私有库,核心代码如下:
- 停止现有容器,并启动新容器,核心代码如下:
至此构建脚本编写完成。
- 通过浏览器登录Jenknis主页
- 新建任务,选择构建一个自由风格的软件项目
- 输入项目名称和相关描述,选择所需的额外配置,如丢弃旧的构建等
在这里的高级选项下, 可以指定自定义的工作空间,如本例需要构建镜像,则此处应该填写构建镜像的根目录
- 配置源码管理:
这里是有git管理源码,配置相应的远程仓库地址、用户名与密码、分支节点
- 构建触发器(即触发任务运行的动作)
这里使用Poll SCM(为定时控件,规则为 * * * * * 依次对应分钟、小时、日、星期、月),事例为每分钟执行一次
- 构建
点击增加构建步骤(构建动作完成时所做的动作),运行指定脚本,本例为利用shell脚本进行镜像的构建以及对应容器的创建和启动。
- 构建后操作(整个构建终止后所做的动作)
常见的可选择在构建失败后发送邮件到指定地址。
至此整个任务构建完成。
3、任务维护
通过面板左侧提供的功能对任务进行跟踪,查看。
修改记录:记录了所有的修改历史明细
工作空间:查看项目路径下的所有文件
构建历史:构建历史选择任意一次构建,可以查看构建日志
通过点开的历史构建面板,点选终端输出,可以查看构建的详细过程。(如果构建失败,会包含构建的具体错误)