本文将整合jenkins、gitblit、maven、nexus等开发工具,实现持续集成开发平台的搭建,简化代码管理,工程打包发布等操作,提高开发效率。
一、准备工作
俗话说“磨刀不误砍柴工”,搭建一个持续集成平台需要准备较多的资源,如基础环境(服务管理用户、jdk、tomcat),相关服务(Git、Maven、Nexus),下面我们一起来完成这些准备工作,这是保证CI(持续集成)平台正常运转的基础。
在正式开始动手之前,我要先阐述一下持续集成平台能够帮助开发者做什么工作,否则,最后搭建成功之后,发现不能满足我们的需求,那这一切都白干了。笔者本次搭建持续集成平台的目的:使用Jenkins与Git(Gitblit)、Maven(Nexus)等服务集成,实现工程自动化部署和版本自动管理,即目前已有Gitblit服务和Nexus私服服务。
1.1 新建服务器管理用户
Jenkins服务进程需要一个启动用户,由于Jenkins服务会调用Git命令对版本库中的工程代码进行克隆或者更新操作(比如:更新版本),所以该新建用户必须要有免密对代码库操作的权限。我们先创建用户:
useradd git #创建用户
passwd git #设置密码
切换到git用户,接下来我们进行免密登录本机的配置:
ssh-keygen -t rsa -C 'git@mail.com' #一直回车,默认在git'home/.ssh目录下生成公钥和私钥
cd ~/.ssh
# 将本机的公钥添加进authorized_keys中,这样允许本机通过ssh的形式免密码登录
cat id_dsa.pub >> authorized_keys
# 更改authorized_keys的权限为600
chmod 600 authorized_keys
测试是否设置成功
ssh localhost
如果直接登录成功,则表示免密登录配置成功。
1.2 JDK安装和配置
本文不赘述,请参考:Linux安装JDK和配置环境变量
1.3 Tomcat安装和配置
本文不赘述,请参考:Tomcat在Linux上的安装与配置
记得配置编码,在server.xml中的Connector元素添加:
URIEncoding="UTF-8"
1.4 Git安装
Linux系统一般都默认安装了git,默认路径为:/usr/bin/git。
如果没有安装可以使用命令安装:
apt-get install git
1.5 Gitblit安装和配置
本文对Gitblit服务的安装不赘述,请参考:在Linux系统中安装使用Gitblit的教程
但是,这里需要创建一个特殊的用户,即jenkins服务进程用户访问gitblit服务需要使用的账号,我们这里设置用户名为git,即我们需要在gitblit系统中创建一个账号:git,并赋予管理员权限。
设置成功之后,以git用户登录,在【用户中心】设置SSH Keys,将先前创建的git用户目录下面的id_rsa.pub文件中的内容配置到这里,则可以实现git用户免密管理工程代码。
1.5 Maven安装和配置
本文不赘述,请参考:linux下maven安装
1.6 Nexus私服安装和配置
本文不赘述,请参考:Linux下安装配置Nexus
二、Jenkins的安装和系统配置
2.1 Jenkins安装
从官网下载LTS Release版本的war包,当前最新版本是2.32.2。
将war包放到之前安装的tomcat的webapps目录下面,将tomcat安装目录及其子目录所属git。
sudo chown -R git:git $TOMCAT_HOME
启动tomcat,访问jenkins项目,则可以根据提示完成jenkins的安装,系统会提示你先创建一个jenkins系统管理员账号,笔者创建的账号为:test,然后安装相应的插件,插件选择默认安装即可。
2.2 Jenkins配置
用test账号登录jenkins系统,进行系统相关配置,单击首页左侧【系统管理】菜单,进入管理Jenkins页面,然后点击链接【Global Tool Configuration】进行如下配置:
2.2.1 Maven Configuration
修改【Default settings provider】值为Settings file in filesystem,在下面的文本框输入配置文件地址,通常为:$M2_HOME/conf/settings.xml
2.2.2 JDK安装配置
输入JDK别名,和环境变量JAVA_HOME的值,取消勾选【自动安装】
2.2.3 Git安装配置
输入Git的Name,输入【Path to Git executable】的值,默认为/usr/bin/git,取消【自动安装】
2.2.4 Maven安装配置
输入Maven的Name,输入Maven的安装目录,取消【自动安装】
配置完上述内容之后,点击【Apply】和【Save】
至此,Jenkins的安装和系统配置已结束,下面要创建需要构建的项目任务。
三、新建任务
在实际开发中,构建任务根据目的不同,分为两类日常发布和产品发布。日常发布旨在对bug的修复,发布不改变项目版本;产品分布累计修改了很多bug,或者修复了重大bug,或者增加了新的重要功能,该发布会改变项目版本,版本号自动管理。
通常日常发布的代码分支为dev,执行命令为
clean deploy
产品发布的代码分支为master,执行命令为
release:clean release perform
3.1 仓库设置
既然我们的最终目的是将项目打包发布到私服的仓库中,那么对应的仓库必须设置【Deployment Policy】为Allow Redeploy
。
3.2 发布用户设置
向Nexus私服部署上传jar包,要有相应的用户权限,Nexus内置了deployment账号,默认密码:deployment123。
3.4 工程发布配置
在工程项目的pom文件中配置产品发布目的地,即部署仓库地址。
<!-- 发布配置 -->
<distributionManagement>
<repository>
<id>releases</id>
<name>releases at com.test</name>
<url>http://yourhostname/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>snapshots at com.test</name>
<url>http://yourhostname/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
如果是产品发布,则还要使用打scm插件,在pom中配置scm如下:
<scm>
<connection>scm:git:ssh://git@yourhostname/test.git</connection>
<developerConnection>scm:git:ssh://git@yourhostname/test.git</developerConnection>
</scm>
3.4 maven相关配置
对应的部署仓库需要对应的用户名和密码才能访问或者上传文件,该信息比较私密,则配置在maven的settings.xml中。
<servers>
<server>
<id>releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
注意3.3和3.4的对应关系。
3.5 Jenkins任务创建
3.5.1 创建日常发布任务
在【General】选项卡中设置项目名称和描述;
在【源码管理】选项卡中设置Repository URL为ssh://git@yourhostname/test.git
,Credentials值为None,因为我们之前设置了免密登录和免密访问版本库。Branch Specifier设置为**/dev
,dev分支,此外,在【Additional Behaviours】下拉框中选择Check out to specific local branch
,输入本地分支名为dev
。如果没有进行最后该项设置,则在项目构建过程中出现错误:
Jenkins git symbolic-ref HEAD
在【构建】选项卡中选择maven的版本,之前在2.2.4节中配置过,构建目标Goal为:
clean deploy
点击【Apply】和【Save】按钮,即任务创建成功,进入任务列表即可进行项目的构建了。此任务成功执行之后,在Nexus中可以搜索到构建成功的项目包,包的版本通常带有snapshot标志。
3.5.2 创建产品发布任务
产品任务的创建与日常任务创建大致相同,只有两点不同:
- 【源码管理】选项卡中的分支修改为master;
- 【构建】选项卡的构建目标为:release:clean release:prepare release:perform
此任务成功执行之后,在Nexus中可以搜索到构建成功的项目包。