这几天在给公司内部做一个jenkins的培训,讲解一些基本的Jenkins的功能和使用。顺便把培训的内容整理一下,写成了这个教程。
下面的教程都是使用的Jenkins 2.32.1 如果你使用的是其他的版本,可能会有差别。
1 Jenkins安装与配置
1.1 安装
Jenkins最简单的安装方式就是使用预先编译好的war包。从 https://jenkins.io/download/ 页面下载Generic Java Package包就可以了。
下载完毕后,运行命令
java -jar jenkins.war
就可以运行jenkins了。简单明了!
在第一次运行Jenkins的时候,需要注意日志中会出现如下的信息:
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
9ad5910ea6c0406291f960bb10a10691
This may also be found at: /Users/afrag/.jenkins/secrets/initialAdminPassword
上面的日志里就是Jenkins自动生成的初始管理密码,在后续的配置过程中要用到。
1.2 初始配置
打开浏览器,输入地址 http://localhost:8080 就可以进入jenkins。 第一次使用jenkins的时候,需要输入jenkins密码并进行初始配置,页面如下:
输入初始管理密码之后,点击Continue按钮,进入下一页,选择要安装的插件。Jenkins的大部分的功能都是由插件来实现的,具体的我们在后面会讲解。
可以默认安装推荐的插件,也可以自行选择要安装的插件。这里我选择的是 Select plugins to install,自行选择要安装的插件。在这里可以根据项目的需要,安装不同的插件。当日也可以在以后添加新的插件。
在选择插件页面,除了默认的插件外,我添加了:
- Throttle Concurrent Builds Plug-in
- Checkstyle Plug-in
- JUnit Plugin
- Build Pipeline Plugin
- Conditional BuildStep
- Role-based Authorization Strategy
- Publish Over SSH
- SSH plugin
选择完插件之后,点击install,进入插件安装页面。插件安装需要一段时间(视网速而定,在国内通常不会太快,你懂的),大家可以去喝杯水,活动活动。
安装过程中,可能有些plugin会失败,多retry几次把。
插件安装完之后,会进入创建管理员用户的界面,没有什么好说的。到这里,Jenkins的初始配置就完成了,可以正式使用了。
2 Jenkins的项目配置基础
后续的构建中,我们要使用到Maven和Git。关于Maven和Git的安装,不在本教程的范围之内。
2.1 创建项目
在Jenkins首页页面左上角,点击新建菜单,如下图所示:
在新创建的项目中
- 输入新项目的名称HelloWorld(这个不能和其他的项目重名)。
- 选择构建项目的类型,我们这里使用“构建一个Maven项目”
- 点击OK,创建新的构建项目
2.2 配置构建项目
新的构建项目创建好之后,会自动进入项目配置的页面。这个页面总共分为9个部分,可以通过页面上方的tab快速进入不同的部分,如下图所示:
2.2.1 General配置
- 项目名称:可以修改项目的名称
- 描述:描述项目的作用和需要说明的东西
其他的选项都有相应的说明,可以点击相应的问号(?)图标查看说明(说明都是英文,但是都不太困难)。目前我们暂时用不到,在后面的进阶部分会对其中部分做讲解。
2.2.2 源码管理
源码管理用来配置从哪里获取要构建的源代码。这里我们选择Git。选择Git后,需要填入如下的信息:
- Repository URL:Git的Repository的地址
- Credential:访问Git的身份认证的凭证,可以点击右侧的Add按钮添加一个新的凭证,也可以选择已有的凭证。我们这里通过Add添加一个新的凭证。关于添加凭证的详细内容,可以参考后面的进阶部分的凭证相关的内容。
-Branches to build: 这里可以选择要拉取代码的分支、tag等信息,从而获取指定版本的代码。默认使用master分支。
2.2.3 构建触发器
构建触发器中的配置决定了我们的构建项目什么时候会执行。在使用Maven项目的时候,我们最常用的构建触发器有以下几种:
- Build whenever a SNAPSHOT dependency is built:当前项目所依赖的其他的SNAPSHOT组件构建成功的时候。
- Build after other projects are built : 当指定的project构建之后,构建当前project
- Build periodically:定时构建
- Poll SCM:定时查询是否有更新,有更新则进行构建
如果希望没错人工进行构建,可以什么都不选。
我们这里选择Poll SCM,设置如下图所示:
上面的设置中,每15分钟查询一次代码仓库,如果有代码变化的话,就重新进行构建。
2.2.4 构建
在maven项目中,我们采用maven来进行编译、测试和打包。只需要指定pom文件,以及相应的maven参数就可以了。
2.2.5 部署
可以采用执行shell命令的方式来进行部署。如下图所示:
2.3 总结
在日常工作中,jenkins用来做持续集成,包括从源码仓库获取代码、编译、测试、打包、部署。这些步骤都可以通过jenkins完成。
3 Jenkins的项目配置进阶
前面讲了最基本的jenkins实现持续集成的配置。下面来讲讲常用的一些其他的“高级”一些的配置。
3.1 使用便利进行构构建
有些时候,我们需要在构建中添加一些参数变量。例如:源码的branch、版本号等等。
在Jenkins中,参数变量可以分为3类:
- 内置变量
- 全局变量
- 局部变量
3.1.1 内置变量
内置的参数变量主要是和单次构建相关的预先定义的变量。在前面的 2.2.5 节的“shell脚本进行部署”的图例中,可以看到在下方有一个链接"the list of available environment variables",其中列出了所有可以使用内置变量及其含义。
3.1.2 全局变量
全局变量就是所有的jenkins项目都可以引用的变量。在jenkins首页,点击左上角的“系统管理”菜单,然后在出现的页面中选择“系统设置”;在出现的页面中,在如下图所示的区域中,就可以设置全局变量:
3.1.3 局部变量
局部变量在各个构建项目内部设置。在项目配置的General区域中,选中“参数化构建”,就可以添加局部变量了。如下图所示:
3.1.4 变量的使用
在项目的配置中,我们可以使用 ${变量名} 的方式来引用变量。(我的经验是在绝大部分地方可以使用,还是有一些插件的配置中不能使用变量)。
3.2 远程部署
远程部署通常分为以下几个步骤:
- 关闭旧的程序
- 将新的程序包上传到远程机器
- 启动新的程序
第二步可能有些小的变化,例如将程序包上传到仓库,然后远程机器从仓库获取等等。但是万变不离其宗。
这些步骤都可以通过ssh/scp来实现。
需要指出的是,如果是通过ssh来远程启动应用程序,在构建关闭的时候,会自动关闭ssh所启动的所有的进程。如果构建的结果是需要长期执行的(通常情况下都是这样),那么我们可以结合指定BUILD_ID和使用nohup命令,来保证程序在后台运行。
3.3 触发其他的构建项目
正在撰写,请稍待。
3.4 清除旧的构建
正在撰写,请稍待。
4 Jenkins安全
正在撰写,请稍待。
6 Pipeline
正在撰写,请稍待。