安装

  • 打包机基本都是用的 Mac,所以这里是 Mac 的安装过程。
  • 我用的 Homebrew 安装的 LTS 版本,如下:
1
brew install jenkins-lts
  • 安装完了之后进入配置过程,选择安装推荐的插件就行
  • Jenkins 肯定是需要不同的人通过不同的机器访问的,所以有两个步骤,增加新的管理员,配置访问 IP
  • 增加新的管理员很简单,在设置中,管理用户就行了。

启动和停止

  • 我通过 homebrew 安装 Jenkins,启动和停止服务的命令行如下:
1
2
3
4
5
6
7
8
9
10
11
# 启动
brew services start jenkins

# 或者如果是 LTS 版本
brew services start jenkins-lts

# 停止
brew services stop jenkins

# 或者如果是 LTS 版本
brew services stop jenkins-lts
  • 这里有一个小 Tips,就是你可以把这个命令行写成一个简单的函数放到 .zshrc 文件中,比如:
1
2
3
4
5
6
7
8
start_jenkins(){
brew services start jenkins-lts
}

stop_jenkins(){
brew services stop jenkins-lts
}

  • 以后通过命令行访问的时候就可以简单一点。

配置访问 IP

  • 第一步是修改访问的 IP 地址,在系统配置的 Jenkins URL 中修改地址为你当前机器的 IP地址。
  • 第二步关闭防火墙。
  • 第三步修改监听的地址,Jenkins 默认是监听本地的,想要监听外部访问需要修改。
  • 根据你的机器在下面几个路径中找到这个文件:homebrew.mxcl.jenkins.plist
可能路径 适用情况
/usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist 较旧Homebrew安装 (Intel芯片Mac)
/opt/homebrew/opt/jenkins/homebrew.mxcl.jenkins.plist 较新Homebrew安装 (Apple Silicon芯片Mac)
~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist 用户级服务启动目录
  • 在文件中找到包含 –httpListenAddress=127.0.0.1 的参数行,将其中的 127.0.0.1 修改为 0.0.0.0
  • 另外如果你想修改监听的端口的话也可以在这个文件中修改,修改 –httpPort=8080 这里的参数就行,但是记得配置 Jenkins URL 的地方也要修改。

执行 Shell 脚本

通过运行 Shell 我们可以做许多事情,比如在打包机上打表,打包等操作。

Shell 运行

  • Jenkins 中执行 Shell 脚本和 Mac 上终端本地执行脚本基本是一样的逻辑
  • 比如现在比较流行的 Luban 打表工具,我在终端中执行的逻辑如下:
1
2
cd workpath
bash ./gen_tables.sh
  • 放到 Jenkins 的执行逻辑就是一样的。

定时执行

  • 有些操作是想要每天都做的,如果 Jenkins 能帮我们做了就好了,比如每天定时拉取 SVN,定时打表这种,就可以直接在 Jenkins 中设置就好。
  • 选择定时执行,然后输入特定的代码:
1
H 12 * * *
  • 这个意思是 每天中午12点左右的某个时间执行一次。类似的定时执行代码如下
示例 Cron 表达式 含义与说明
H/15 * * * * 每隔15分钟执行一次,分钟数使用哈希分散。
H H/2 * * * 每2小时执行一次,具体分钟数使用哈希。
H 12 * * * 每天中午12点左右的某个时间执行一次。
H 8,12,21 * * * 每天8点、12点、21点各执行一次,时间点使用哈希分散。
0 18 * * * 每天下午6点整执行一次。
H/3 22-23 * * 1-5 周一到周五的晚上22点到23点之间,每3分钟执行一次。
0 10 * * 1 每周一的上午10点整执行一次。

PATH 配置

  • 如果你之前有过使用终端的经验,你就应该知道很多环境是需要安装和配置的。
  • 比如使用 dotnet 执行一些 C# 库文件的时候就需要使用 dotnet SDK,通过命令行安装后一般都是可以直接使用的,但其实是因为命令行安装的时候帮你自动做了增加 PATH 的操作,比如你用下面的命令行输出你的 PATH 路径
1
echo $PATH
  • 你就可以看到你当前的环境了,执行 dotnet 相关的命令行的时候都是从上面的路径中一个一个找到匹配的环境,找到了才能执行。
  • 虽然 Jenkins 安装在打包机上,但是当你去执行一个可以正常在打包机上执行的 Shell 脚本的时候,如果你没有配置环境,还是会提示你找不到命令的。
  • 所以就需要你将环境配置在 Jenkins 中,通过节点即可配置。
  • PATH 路径我建议直接将打包机的路径全复制过去,省的一个个用到的时候再配置。
    Path

行尾序列错误

  • Jenkins 有一个很坑的问题,可能你搜也搜不到,甚至问 AI,AI 都不一定能告诉你,你的 PATH 命名是配置好的,但是就是提示在 PATH 中找不到对应的路径。
  • 我之前在 Mac 上就遇到了这个问题,我本地路径是没问题的,但是执行 dotnet 的时候就是找不到,最后问 AI,AI 跟我说可能是 行尾序列错误了,我一查果然有问题。
  • Mac 和 Linux 都是用的 LF,windows 用的是 CRLF,所以如果你的 Shell 脚本的行尾序列是 CRLF,在 Mac 大概率是执行不了了,得改掉才行。
  • 然后我在 Jenkins 执行 Shell 脚本的时候也遇到了这个问题,我一开始以为我 PATH 环境出错了,但是确认了很多遍是没问题的。
  • 忽然想起了这个问题似曾相识,然后我在 Jenkins 配置 Shell 脚本的时候添加了下面的代码:
1
2
# 在调用你的脚本之前,先转换行尾格式
sed -i '' 's/\r$//' your_script.sh
  • 果然可以正常执行了,这个问题就有点神奇了,我 Mac 本地的行尾序列确确实实是 LF,但是 Jenkins 执行的时候就不是,所以找不到,只能在 Jenkins 执行之前改掉。