全网最详细Jenkins教程,一步到位

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脚本自动部署项目。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容