利用Jenkins+Gitlab搭建持续集成环境•基础环境gitlab配置jenkins配置•项目配置•测试验证gitlab配置•注册gitlab用户,创建工程•安装git、tortoiseGit•生成公私钥与gitlab关联•使用tortoiseGit操作gitlab代码仓库•git分支介绍注册gitlab用户,创建工程访问gitlab网址(根据用户配置决定):输入用户名密码和邮箱,点击register注册成功在project菜单下可以创建工程点击createproject按钮工程创建成功提示添加SSHkey(后续安装git后生成公私钥添加)安装Git和tortoiseGit在git官网下载相应的安装包,直接安装,采用默认设置,直接next。从tortoiseGit官网下载安装包,直接安装,采用默认设置,直接next。生成公私钥与gitlab关联tortoiseGit自带PuTTYgen,直接运行即可生成公私钥,采用默认配置,无需更改点击savepublickey保存公钥到本地点击saveprivatekey保存私钥到本地将公钥添加到Gitlab点击gitlab页面右上角Settings,进入SSHKeys将从PuTTYgen上拷贝的公钥复制到Key文本框中使用tortoiseGit操作gitlab代码仓库在本地代码存放的地方右键鼠标,出现TortoiseGit,进入Settings,点击出现对话框点击Settings对话框中的Git,设置用户名和邮箱在本地代码存放的地方右键鼠标,出现Gitclone,点击出现对话框URL为gitlab上工程的地址,点击具体工程进入工程详细,默认为SSH,复制地址,拷贝到Gitclone对话框中的URL中勾选LoadPuTTYKey,将之前用PuTTYgen生成保存的私钥加载从gitlab上成功clone代码库将项目拷贝到clone的代码库文件夹中右键从gitlab上clone的代码库,选择Gitcommit-”master”,弹出对话框提交本地并推送推送gitlab推送成功,查看gitlab上代码库git分支介绍Git保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。在进行提交操作时,Git会保存一个提交对象(commitobject)。该提交对象会包含一个指向暂存内容快照的指针。但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象。Git的分支,其实本质上仅仅是指向提交对象的可变指针。Git的默认分支名是master。在多次提交操作之后,你其实已经有一个指向最后那个提交对象的master分支。它会在每次的提交操作中自动向前移动。Git的“master”分支并不是一个特殊分支。它就跟其它分支完全没有区别。之所以几乎每一个仓库都有master分支,是因为gitinit命令默认创建它,并且大多数人都懒得去改动它。无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件分支创建Git是怎么创建新分支的呢?它只是为你创建了一个可以移动的新的指针。比如,创建一个testing分支,你需要使用gitbranch命令:gitbranchtesting这会在当前所在的提交对象上创建一个指针。使用tortoiseGit同样可以创建分支,点击clone的工程,右键tortoiseGit-CreateBranch,如下图所示:同提交历史的分支。那么,Git又是怎么知道当前在哪一个分支上呢?它有一个名为HEAD的特殊指针。在Git中,它是一个指针,指向当前所在的本地分支(译注:将HEAD想象为当前分支的别名)。在本例中,你仍然在master分支上。因为gitbranch命令仅仅创建一个新分支,并不会自动切换到新分支中去。分支切换要切换到一个已存在的分支,你需要使用gitcheckout命令。我们现在切换到新创建的testing分支去:gitcheckouttesting这样HEAD就指向testing分支了。那么,在testing分支下修改文件,然后提交本地HEAD分支随着提交操作自动向前移动,如图所示,你的testing分支向前移动了,但是master分支却没有,它仍然指向运行gitcheckout时所指的对象。使用命令gitcheckoutmaster切换回master分支:检出时HEAD随之移动.这条命令做了两件事。一是使HEAD指回master分支,二是将工作目录恢复成master分支所指向的快照内容。也就是说,你现在做修改的话,项目将始于一个较旧的版本。本质上来讲,这就是忽略testing分支所做的修改,以便于向另一个方向进行开发。tortoiseGit上同样可以操作,右键clone的工程,tortoiseGit-Switch/Checkout,弹出如下对话框:合并分支(快速合并)假如我们在testing上的工作完成了,就可以把testing合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向testing的当前提交,就完成了合并,这里你需要使用gitmerge命令gitmergetestinggitmerge命令用于合并指定分支到当前分支。合并后,再查看内容,就可以看到,和testing分支的最新提交是完全一样的。合并完分支后,甚至可以删除testing分支。删除testing分支就是把testing指针给删掉,删掉后,我们就剩下了一条master分支,这里需要使用gitbranch-d命令来删除分支:gitbranch-dtesting同样使用tortoiseGit也可以合并分支,右键clone的工程,tortoriseGit-Merge分支合并冲突如果在不同分支同时修改文件,当合并分支的时候就会出现冲突,Git用,=======,标记出不同分支的内容,这时需要手动将冲突代码合并,然后再提交jenkins配置•注册用户创建Job•配置Job构建信息注册用户创建project使用管理员账号配置允许用户注册访问注册页面注册成功构建自由风格的Job(使用ant编译)新建自由风格构建任务(name不要采用中文)在已运行的Jenkins主页中,点击左侧的新建Job进入如下界面:源码管理配置演示是使用Git的链接,在RepositoryURL中输入你的项目链接,RepositoryURL为gitlab上创建的项目路径,进入Gitlab中的project页面,点击使用的project,如下图:在RepositoryURL中输入你的项目链接之后,如果没有权限则会提示如下图点击credentials后面的add,kind为SSHUsernamewithprivatekey,在privatekey中选择Enterdirectly,输入保存的私钥保存添加成功也可单独对Credentials设置点击Jenkins页面左侧Credentials菜单,如下图:点击AddCredentials,步骤一样构建设置构建方式,选择antinvoker,antversion从之前的ant配置后自动获取,BuildFile为build.xml,Properties可以设置变量用于build.xml中直接引用,配置界面如下ant构建完成后执行Executeshell来通过docker自动部署具体执行脚本如下获取上传到私有库的原始镜像:sudodockerpull192.168.11.98:4000/tomcat启动tomcat容器:sudodockerrun-it-d--nametomcat_source192.168.11.98:4000/tomcat复制war包到tomcat容器中:sudodockercp/var/lib/jenkins/workspace/ehr_project/ehr.wartomcat_source:/usr/local/tomcat/webapps/生成新的镜像:sudodockercommittomcat_sourcetomcat_ehr修改tag,生成push所需镜像:sudodockertagtomcat_ehr192.168.11.98:4000/tomcat_ehr_test:v1Push镜像到私有库中:sudodockerpush192.168.11.98:4000/tomcat_ehr_test:v1停止容器:sudodockerstoptomcat_source删除容器:sudodockerrmtomcat_source删除上传镜像:sudodockerrmitomcat_ehr192.168.11.98:4000/tomcat_ehr_test:v1删除本地原始镜像:sudodockerrmi192.168.11.98:4000/tomcat远程部署:sshroot@192.168.19.97dockerstoptomcat_ehr_1;dockerrmtomcat_ehr_1;dockerrmi192.168.11.98:4000/tomcat_ehr_test:v1;dockerpull192.168.11.98:4000/tomcat_ehr_test:v1;dockerrun-it-d--nametomcat_ehr_1-p8700:8080192.168.11.98:4000/tomcat_ehr_test:v1项目配置项目通过ant进行配置ApacheAnt是目前事实上的Java应用的标准build脚本工具一般情况,开发人员花费大量的时间做一般性的任务,比如:构建和部署,通常包含下面的工作:•编译代码•封装二进制文件•在测试服务器上部署二进制文件•测试修改•从一个地点拷贝代码到另一个地点为了自动和简化上面的工作,ApacheAnt是非常有用的。这是一个基于开放的操作系统构建和部署的工具,该工具需要从命令行执行。Ant使用XML来存储build信息,在xml文件里有很多task的定义,默认使用的文件是build.xml。首先,要有project元素:project中的name属性标识工程名,basedir指示根目录,default标识默认执行的target。如果运行ant时不指定这些属性,Ant将无法。定义这个工程所使用的properties:这里定义了全局属性。这些属性是可选的,但使用属性会更方便,尤其是便于维护。一种更有效的方式是将这些属性放到一个专门文件里,从而使这个xml文件更加灵活,易于重用。定义path:Path元素用来表示一个类路径,用于在后续target中需要引用path中的相关内容,比如项目中经常将jar包放在lib目录下,而代码编译需要引用jar包定义所要执行的targets:一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必须先编译该文件,因此可执行文件的target依赖于编译程序的target。Target的所有属性如下。(1)name表示标明,这个属性是必须的。(2)depends表示依赖的目标。(3)if表示仅当属性设置时才执行。(4)unless表示当属性没有设置时才执行。(5)description表示项目的描述。Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为publish的target的depends属性compile,而名为compil