基于Jenkins搭建DevOps环境的学习笔记
写在前面:
这次通过公司项目的自动化部署来以小见大的介绍一下我的收获,因为涉及到公司细节所以以下所有步骤都是用空项目来演示的。
首先感谢我们美丽的算法工程师@燕妮,附上 网易云课堂的链接,是免费的 Jenkins践行持续集成与安装实战 。
内容是Git+Docker+Jenkins三剑合璧实现DevOps开发模式,从安装Jenkins到Docker配置等等都讲解的很全面,强烈安利一下~
本篇的重点只在于Jenkins使用过程中的各种配置和踩坑填坑。
一:持续自动化集成介绍
1.什么是DevOps模式
目前企业面临的产品开发周期短、需求变化大,故而软件开发模式也经历了传统瀑布模型-》敏捷开发模型-》DevOps的变化,三者的优劣一目了然。
模型名称 | 模型特点 | 模型缺陷 |
---|---|---|
传统瀑布模型 | 完整/清晰/固定的产品定义 | 不可以随时修改需求 |
敏捷开发模型 | 需求频繁变化+需求快速开发 | 流程繁琐从而导致人为执行无法严格遵守 |
DevOps | 需求频繁变化+开发需要敏捷+操作需要敏捷 | 流程处理自动化,最大限度的减少人为干预 |
Jenkins可以轻松包办从本地push后一直到成功部署的整个环节,这样对于持续集成有两大好处:
- 将测试时间提前提前再提前
- 将集成过程交给自动化管理
2.Jenkins服务器的职能
在本次项目中,我们的架构师专门调拨了一台服务器给Jenkins自动化部署,它需要实现三个功能:
1. 从远程仓库(Git)上实时拉取代码。
2. 将更新代码打包(tar包)并且推送到已经配置好Docker环境的远程服务器上。
3. 在远程服务器上基于Docker容器部署服务。
二:通过新项目介绍Jenkins
在介绍任务之前有一点不得不提:
Jenkins是在线的项目自动化部署平台,它的很多功能都是基于加载插件的形式来实现的。除初始化安装过程中的基本插件之外(文章首页的链接课程里有详细的安装流程,不再赘述),加入什么新的插件,这完全是按照项目需求来的。
Jenkins插件的增删改查都在系统管理–》插件管理来实现。如果在使用过程中有任何一个模块的某个选项没有出现,那多半是因为没有安装相关插件或者没有及时更新插件所导致的。
1.构建新任务
进入Jenkins界面—》新建任务—》构建一个自由风格的软件项目。
2. General
如题,这是从整个项目构建的层面实现某些功能的模块。根据项目的需求自行添加。
3.源码管理
我使用的是Git作为代码仓库,有项目内和项目外两种配置方式。
在项目里可以通过用户名+密码的方式来完成代码仓库的调用:
在项目外可以通过系统管理–》全局配置–》添加SSH密钥互信的方式来完成代码仓库的调用:
需要特别注意的是这两种认证方法不可以同时存在,否则会触发403。
如果在全局中配置好了就不需要在项目里再配置一次了,直接选取对应仓库就好了。
4.构建触发器
这一模块主要是为实时构建服务,钩子的创建就在这个模块里。我选取的是"Build when a change is pushed to GitLab… “,安装的插件是"Generic Webhook Trigger Plugin”:
5.构建环境
项目在构建的过程中有环境配置的需求,例如我需要部署Java Spring Cloud项目,就需要引入对应的Maven配置文件。
1.安装插件
配置文件需要先加载到全局变量中,首先需要下载相关插件 Config File Provider Plugin并安装。
2.载入配置文件
之后进入全局配置–》Managed files–》Add a new Config,复制粘贴并保存配置文件。这时候返回Config File Management内后可以看到之前保存的配置文件。
3.应用于项目中
在项目的构建环境中,我们可以选择已经添加到全局配置的配置文件。
勾选Provide Configuration files–》Add file即可
6.构建
构建模块就是生成文件包的环节,这里我使用的是shell脚本来生成tar包,优点是脚本指令暴露在外面,方便其他成员理解和修改部署环节。Jenkins也提供了相当多其他方式的构建指令实现方法,例如载入python脚本文件等。
7.构建后操作
这一模块可以实现连接远程服务器–》传输文件–》运行部署等等功能,这里我选择的是"Send build artifact over SSH",也就是通过两台服务器之间添加SSH互信来实现文件传输运行。
类比于 5.构建环境的操作流程,这里也分为三步。
1.安装插件
进入插件管理–》添加 Publish Over SSH插件
2.全局设置
进入系统配置–》Publish Over SSH,生成公钥私钥后,添加私钥来进行SSH配置。
需要注意的是最后的Remote Directory是针对目标服务器的根目录的相对路径,在后续构建话操作时Jenkins会自动进行填充,切记不要重复书写!!!
3. 项目内填充
之前的操作都正确完成后,Jenkins会自动添加对应的服务器地址。
三:参考一览
艾编程:Jenkins践行持续集成与安装实战
linxc008:Linux之间配置SSH互信(SSH免密码登录)
Jager’s Note:Linux配置SSH公钥认证与Jenkins远程登录进行自动发布
在路上的白羊:Jenkins插件下载镜像加速
Onehee:Jenkins构建完成后自动部署到指定服务器
doraman:Jenkins页面操作提示 “No valid crumb was included in the request”