基础安装
下载 Tomcat,目前不要选择 10+ 的版本,选择 9 比较好,下载地址:链接
下载 Jenkins,推荐下载 Generic Java package (.war)
,下载地址:链接
然后将下载后的 jar 包部署到 Tomcat 的 webapps
目录下,然后重启。
Tomcat 的启动和关闭可能会涉及到权限问题,记得授权。
启动后,通过 http://ip:8080/jenkins/
进行访问,第一次速度有一些慢,然后就是获取密码,创建新账户。
插件推荐
包括如下内容:
- Maven 相关插件:
Maven Integration plugin
- Git 插件:
Git plugin
- 环境变量插件:
Environment Injector
- 远程部署:
Publish Over SSH
- 通用的 Webhook 插件:
Generic Webhook Trigger Plugin
- BlueOcean 服务编排:
Blue Ocean
和Blue Ocean Pipeline Editor
配置相关
系统配置
Jenkins Location
这个地方建议修改为:http
请求和补充自己的email
Git glugin
中的user.name
和user.email
修改邮件通知
建议使用QQ
邮箱,163
很容易识别为垃圾邮箱。Publish over ssh
如果有用到,请在这里设置,通过 证书或者密码登录都是可以的,设置完成后,点击Test Configuration
测试下。
通用配置
系统管理-> 全局通用配置
中需要配置:Maven
、JDK
、Docker
等。下面通过 JDK
举例,其他按照自己的实际情况配置,但都请不要勾选“自动安装”。
其他的类似。
Maven 项目
本地部署
选择新建一个 maven 项目:
然后填写 git
的相关信息
那么这个流程何时开始编译,此时就需要通过 git 项目的 webhook 了,下面这个选项是插件:Generic Webhook Trigger Plugin
带来的。
只需要填写 token,然后 webhook 的时候发送相关指令即可,发送格式写的很清楚
- 通过带参数的形式:
http://192.168.0.161:8080/jenkins/generic-webhook-trigger/invoke?token=hello
- 通过
header
的形式等
然后设置 maven 的构建指令以及运行
强调几点:
maven
的指令,就是上面的Goals and options
的开头不能提交mvn
Post Steps
表示的构建完成后的步骤,通常是进行项目启动
最后可以通过 email 进行消息通知。
远程部署
基本设置
通常项目不仅要部署到本机,还可能需要部署其他主机,此时有 2 种办法,一种是通过主机信任后通过scp
传输,一种是通过插件Publish over ssh
,我们先聊聊后者。
在Post Steps
中新增Send files or execute commands over SSH
,如下所示:
然后可以看到下图:
假如你没有 SSH Server 的设置,那是因为你没有在全局设置中进行配置,可以参考我上面插件推荐
中的最后配置
然后输入如下内容:
-
Sourec File
表示的是你要传输的文件,这个路径其实就是相对你项目的路径。Jenkins
会从Git
上拉取文件,然后在自己的 workspace
中进行编译。 -
Remove prefix
表示的去除前缀,这里因为我勾选了Flattern files
所以不需要去除前缀 -
Remote Directory
表示的远程主机上的目录 -
Exec command
表示的是远程主机上执行的命令,通常是通过脚本进行启动、关闭、重启等 -
Flattern files
表示的去除前缀,就是将只传输文件到Remote Director
,不带文件前缀
脚本文件
这个脚本文件,是最大的坑,查资料,卡了半天,总算再查另外一个问题的时候,查到了解决方案。
你可能会遇到问题:无法通过 Jenkins 的这个插件使用脚本启动远程项目。同时你的日志中可能报错:ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
其实这个问题可能是因为:Jenkins 启动任务完成后,会关闭工作进程启动的子进程,所以远程任务也关闭了【可能】
所以在写脚本的时候,需要注意 3 个细节:
- 文件开始加入:
source /etc/profile
- 然后设置参数:
export BUILD_ID=dontkillme
- 最后在获取进程的时候,排除到
Jenkins
,比如我们 Java 应用这么写:$(ps -ef | grep -w "$SERVICE_NAME" | grep "java" | awk '{print $2}')
下面给出一个案例脚本:
Blue Ocean
安装了插件 Blue Ocean
和 Blue Ocean Pipeline Editor
在项目面板的左边,会出现选项:打开 Blue Ocean
可以选择新建流水线
其中第一步就是选择 git 仓库:
输入地址后,会要求是使用已经创建好的凭证还是创建一个新的凭证,这个随你。
然后会要求你输入这个流水线的名称,比如 blue
,创建完成后,跳转到该界面
简单说下上述面板的几个意思:
- 活动:表示的每一次构建任务的情况。
- 分支:这个概念其实就是
git
的分支概念,本质上你可视化流程的操作,最终会在项目根路径下形成一个文档 jenkinsfile
,并 通过 git
进行管理。
此时选择 分支
,然后将鼠标移动到 master
分支,选择后面的 笔
表示。
接下来的流程就是创建,点击 +
进行流程创建,基本都是 shell
脚本,创建好后如下所示:
点击确定后提交到 git
仓库。
最终生成的文件如下所示:
Linux 互信
严格来讲这篇文章不算是 Jenkins
相关内容,但是我认为这个蛮关键的,所以这里记录下。
为了远程部署方便,除了通过Over SSH
插件,还有一个办法就是通过将Jenkins
所在主机的公钥,写入目标机器的authorized_keys
比如 Jenkins
所在的机器是192.168.0.161
,目标机器是192.168.0.162
。
- 在
Jenkins
所在的机器执行:ssh-keygen -t rsa
,默认情况下该指令会在~/.ssh
下生成私钥和公钥id_rsa.pub
- 在
Jenkins
所在的机器执行:cat ~/.ssh/id_rsa.pub
然后复制内容``
- 在目标机器
192.168.0.162
查看下~/.ssh
是否有文件<span>authorized_keys</span>
- 如果没有那么创建一个,如果有的话直接将第二步复制的内容追加其中,记得要在新的一行粘贴内容。
然后你可以尝试在161
的主机尝试登陆162
# 此时用户是默认的本机 hostname
ssh 192.168.0.162
上述指令其实是最简答的写法,严格的写法是加上对方主机的 hostname
。
ssh hostname@192.168.0.162
上述流程配置好后,就可以通过scp
进行文件传输,比如这样
scp target/*.jar root@192.168.0.162:/home/admin/docker-hi/docker-hi-0.0.2.jar
也可以在远程主机执行本地的脚本
ssh root@192.168.0.162 'bash -s' < /home/admin/docker-hi/deploy-temp.sh docker-hi-0.0.2 restart
当然也可以在远程主机执行远程的脚本
ssh root@192.168.0.162 /home/admin/docker-hi/deploy-temp.sh docker-hi-0.0.2 restart
区别就是不带'bash -s'
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于