本文将整合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中可以搜索到构建成功的项目包。

文章作者:xiaohui249
本文链接:https://javatech.wang/index.php/archives/99/
版本所有 ©转载时必须以链接形式注明作者和原始出处