Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续自动构建、测试、部署我们的项目。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
什么是CI:
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
什么是CD:
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。
参考:https://www.jianshu.com/p/5f671aca2b5a
2. 下载
官方网址:https://jenkins.io/zh/download/
jenkins分为长期支持版本(LTS)和每周更新版,并且有对应不同平台的安装包下载,还提供了一个可直接运行的war包,内部集成了jetty容器。这里直接下载LTS版本的war包运行即可。
3. 启动
使用java命令运行war文件,并指定http端口:
java-jarjenkins.war--httpPort=8088
也可以使用后台启动:
nohup java-jarjenkins.war--httpPort=8080> /root/jenkins.log2>&1 &
nuhup可以在关闭控制台后继续运行该进程,“>”号表示输出重定向,这里将输出重定向到/root/jenkins.log中,2>&1表示将标准错误信息也输出到jenkins.log文件中,最后一个&表示该命令在后台执行。
启动完成后,Jenkins默认会创建一个admin用户并生成一个初始密码:
密码文件也会保存在/用户/.jenkins/secrets/initialAdminPassword的文件中。
4. 初始化
在浏览器输入http://localhost:8088访问Jenkins。第一次访问时,会在这个页面停留片刻,Jenkins需要完成一些准备工作,当准备好之后会跳转到解锁页面。
如果等待时间很长,可以尝试替换镜像地址,打开/用户目录/.jenkins/hudson.model.UpdateCenter.xml文件
<?xmlversion='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>http://updates.jenkins-ci.org/update-center.json</url>
</site>
</sites>
将上面的url替换为:
<?xmlversion='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
准备好后进入如下页面,需要输入admin默认初始化的密码来解锁,填写后点击继续。
接下来的这个页面中选择需要初始化的插件,这里选择安装推荐的插件即可。
接着会自动完成插件的安装。
如果插件更新很慢或者失败,可以通过修改镜像地址来提速。
先停止jenkins,然后编辑 /用户/.jenkins/updates/default.json文件,将文件中所有的updates.jenkins-ci.org/download的地址替换为mirrors.tuna.tsinghua.edu.cn/jenkins。
vim编辑器可以使用:s来替换:
:%s#updates.jenkins-ci.org/download#mirrors.tuna.tsinghua.edu.cn/jenkins#g
插件初始化完成后,下一步需要创建一个管理员用户,在如下页面填写相关信息,点击保存并完成即可。
最后在实例配置中指定Jenkins的URL访问地址完成初始化。
5. 全局配置
成功初始化后接下来需要做一些相应的全局的工具配置,点击首页左边菜单的Manage Jenkins,然后再点击Global Tool Configuration选项。
在以下的页面中设置好Maven、JDK、Git的相关配置信息。需要注意的是,在JDK配置中取消勾选Install automatically,也就是不自动下载jdk,而是手动指定JAVA_HOME的路径。
在下面Maven安装的选项中指定Maven的安装路径
6. 创建任务
点击首页的新建Item或者创建一个新任务。
在跳转的页面中输入任务名称(这里创建一个helloworld任务用于演示)。然后选择自由风格的的任务,最后点解确定按钮。
7. 配置任务
在创建好任务之后,会来到任务的配置页面,下面将演示如何对任务进行一些常规的配置。
7.1 General配置
描述:填写构建的描述信息。
Discard old builds:勾选,表示丢弃就的构建,并填写丢弃策略的保持构建天数和保持构建的最大个数。
GitHub项目:勾选,填写github的项目地址。
7.2 源码管理
源码管理可选择git或svn。由于案例是托管在github上,因此这里选择Git,需要注意的是,如果使用ssh加密通信,需要在本地使用ssh-keygen生成秘钥对,然后将私钥配置到jenkins,把公钥配置到github上。
点击添加按钮
在弹出的子窗口中,类型选择SSH Username with private key,然后填写Username(随意),勾选Enter directly,在Key的文本域中加入私有key的秘钥串,然后点击最下面的添加。
7.3 构建环境
构建环境中勾选Delete workspace before build starts(开始构建之前删除工作空间)
7.4 构建
在构建这一项中选择构建步骤,由于案例是一个Maven项目,因此这里选择使用Maven来进行构建。点击添加构建步骤,在下拉菜单中选择Invoke top-level Maven targets。
然后选择maven版本,目标出填写Maven声明周期命令,这里设置为执行清理后进行打包,并忽略单元测试。
7.5 自动部署
前面的配置已经基本完成了项目的自动构建,通常在构建完之后需要将项目进行部署,那么同样可以让Jenkins来完成项目的自动部署。在自动部署的时候,应先停止原有的应用进程然后重新启动,这些操作可以使用shell脚本来完成。
在构建的选项中再次点击增加构建步骤,选择Execute shell
在命令中添加sheel脚本
# #!/bin/bash表示使用系统的bash
#!/bin/bash
echo"Restart SpringBootApplication..."
# 获取demo.jar的后台进程id,并赋值给变量pid
# ps用于显示进程信息的命令,-ef参数表示显示所有进程和全部格式
# “|”是一个管道符号,表示ps和grep命令同时执行
# grep是linux的一个文本搜索工具
# grep demo.jar表示查找内容包含demo.jar的进程信息
# grep -v grep表示反向查找,查找不包含grep的内容的进程信息(也就是进行一次过滤)
# awk是一个强大的文本分析工具,分析并生成报告。'{print $2}'表示打印出第二个字段
pid=`ps -ef | grep demo.jar | grep -v grep | awk '{print $2}'`
# 如果pid不为“”,则kill掉该进程
if[-n"$pid"]
then
kill-9$pid
fi
# Jenkins默认会在Build结束后Kill掉所有的衍生进程,
# BUILD_ID=DONTKILLME就是防止jenkins杀掉衍生的子进程
BUILD_ID=DONTKILLME
# 后台启动demo.jar,2>&1表示将标准出错也输出到springboot.log文件中,最后一个&表示该命令在后台执行
nohup java-jar/root/.jenkins/workspace/helloworld/target/demo.jar > /root/springboot.log2>&1 &
最后点击应用并保存,此时任务的配置就基本完成。
8. 执行任务
回到首页,在任务列表中可以看到刚配置好的任务,点击任务名称旁边的下拉箭头,选择Build Now开始执行任务。
此时在左下角的构建执行状态中会有一个helloworld任务执行的进度条。
旁边的#1表示第几次构建,如果执行完后再次点击Build Now,那么又会产生一条新的构建记录为#2。可以点击#1进去查控制台输出任务执行日志。
最后,当任务正确执行完后,我们就可以正常访问项目。以后每当我们有新的版本提交到github,那么只需要在任务列表中点击Build Now来执行构建任务。那么jenkins会自动从github上拉取最新的版本,接着使用Maven将项目进行编译打包等操作,然后通过shell脚本自动部署项目。