Jenkins 有很多中创建任务的方式,这里,我只测试了常用的三种方式,来实现简单的自动化部署,分别是 Freestyle、Pipeline、Open Blue Ocean。
假设,我们有一个项目,放在 Git 上维护,部署在 slave-web-1、slave-web-2 两台服务器上,基于 Jenkins , 来实现自动化部署。
服务器信息说明:
域名 | IP | 作用 |
---|---|---|
master | 192.168.1.1 | 部署 jenkins 、 maven 服务 |
slave-web-1 | 192.168.1.2 | 业务部署服务器 |
slave-web-2 | 192.168.1.3 | 业务部署服务器 |
scm | 172.31.2.189 | git 等项目仓库服务器 |
下面,我们用三种不同的方式来实现自动化部署。
1、自由风格(Freestyle)
首先,进入新建任务页,填写项目名称,选择 “Freestyle project”,点击 “确定”,进入构建配置页面。
然后,在 “源码管理” 区域,填写项目在 Git 的信息。(需要 Jenkins 服务器拥有从 Git 服务拉取项目的权限)
下一步,在 “构建” 区域,可以编写项目构建的脚步。例如:mvn clean package。(这里的项目是一个静态脚本项目,构建操作是将项目打包)
最后,选择 “Send files or execute commands over SSH”,点击 “Add Server”,配置部署节点 “SSH Server” 信息。多少部署节点就对应多少配置信息。
SSH Server 配置:
- Name: 部署节点IP或Host(配置Host,需要在 Jenkins 服务器上配置 Host 信息)
- Source files: 需要发送的源文件地址,该地址是相对路径(相对于
{jenkins_home}/workspace/{JOB_NAME}
) - Remove prefix: 排除的目录或文件
- Remote directory: 源文件在远程节点存放的相对目录(相对于 “节点管理” 中 “远程工作目录” 的路径,详细请看 持续集成工具 — Jenkins)
- Exec command: 在远程部署节点需要执行的脚本命令(可是解压项目、停止服务,重启服务等操作)
这样,执行任务构建操作(或者在 Open Blue Ocean 界面执行运行操作),就可以将项目发送到部署节点。
2、流水线(Pipeline)
相对于 Freestyle
,Pipeline
更加灵活,尤其是有很多部署节点时,Pipeline
更加适用。使用 Pipeline
,需要先了解 Pipeline
的语法,可以看 Pipeline Syntax 和 Pipeline 入门。
首先,进入新建任务页,填写项目名称,选择 “Pipeline”,点击 “确定”,进入构建配置页面。
根据需要,可以选择构建触发器。
然后,编写 Pipeline
脚本。
Pipeline
脚本分 Declarative Pipeline
和 Scripted Pipeline
。这里采用的是 Scripted Pipeline
。
1 | node('master') { |
脚本说明:
- 第一步(Ready):构建准备工作,查看构建环境,让操作者进行操作任务,防止误操作。
- 第二步(Build):构建项目,通过 git 获取最新项目,通过 maven 打包构建。
- 第三步(Deploy):遍历所有节点,将打包项目发布到所有节点,并执行相关命令。
- 第四部(Verify):验证所有节点服务。
3、Open Blue Ocean
BlueOcean
重新考虑了 Jenkins
的用户体验。BlueOcean
由 Jenkins Pipeline
设计,但仍然兼容自由式工作,减少了团队成员的混乱,增加了清晰度。
我们模仿 Pipeline
构建项目的方式,来创建一个 BlueOcean
任务。
首先,在 BlueOcean
界面,点击 “创建流水线”,进入构建页面。选择代码仓库,并填写相关信息(可能会生成一个认证key,需要将 key 加到 代码仓库服务器上)。
进入 Pipeline
构建页面,默认会有一个 Start
阶段,在这里,可以配置 Pipeline
的全局变量和参数。
点击 Start
后面的 “+”,可以添加阶段。填写阶段名称,然后添加该阶段包含的步骤,步骤类型有很多种,根据需要进行选择。
例如,我们选择 “Shell Script” 类型。
添加完所有阶段后,最终图形如下:
以上三种方式,更倾向于采用 Pipeline
。BlueOcean
虽然方便、简介,但是还需要完善。
4、运行
在 BlueOcean
主界面或任务列表界面,都可以运行任务。
例如:在 BlueOcean
界面运行任务,可以查看详细的信息输出。
如果执行失败,会终止运行,并提示错误信息。
也可以直接在任务列表点击 “构建” 来运行。在 “Stage View” 可以查看每一阶段的执行时间和结果。
除此之外,还有许多其它高级应用,在今后的使用过程中,逐步学习。
5、注意事项
5.1、从节点环境变量问题
使用 ssh 启动 Tomcat 项目时,可能会遇到下面错误信息。
1 | Neither the JAVA_HOME nor the JRE_HOME environment variable is defined |
这个错误是因为环境变量是通过 /etc/profile
配置的原因导致。
1 | /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置 |
查看 /etc/bashrc
代码,发现它会引用 /etc/profile.d/
下的所有 .sh
文件。所以,解决这个问题有两种方式:
- 1、将环境变量配置到
/etc/bashrc
- 2、将环境变量配置到
/etc/profile.d/
下(推荐)
注意:
如果是服务自启动脚本,通过rc.local
调用 shell,也会出现无法找到环境变量的错误,因为系统的任何一个用户都没有登录过,这种情况下,可以在rc.local
调用 shell 前,加载用户环境变量source /etc/profile
5.2、进程问题
通过 SSH 远程运行从节点脚本时,远程会话结束以后会把 SSH 下的所有子进程干掉。这时,就可能出现 Tomcat 启动成功了,过一会进程消失了,但是在节点服务器运行脚本又不会消失的现象。
有两种解决方法:
1、在脚本中加入 nohup
来执行关键命令;
1 | nohup ${TOMCAT_HOME}/bin/startup.sh > /dev/null 2>&1 & |
2、在 Jenkins 的节点管理中增加变量。
1 | key=BUILD_ID |
参考: