踩了些坑,记录下
我的场景是一台Mac mini做master,另一台Mac mini做slave
- Jenkins的插件中心安装
ssh插件
- 节点列表中增加从节点
- 从节点电脑需要安装和master同版本的Java环境
- 确保从节点使用固定的内网ip,需要在系统设置->共享->打开远程登录
- 从节点配置使用userName password登录(使用ssh公钥也行)
- 从节点环境变量
我需要执行的Job都是一些shell脚本,在从节点中执行时,默认无法访问到所有环境变量,比如会出现command not found
,需要再shell中手动导出下
#导入环境变量
source ~/.bash_profile
source ~/.zshrc
# todo ..
- 打包脚本遇到签名错误,如这种
...xxxKitExtension.appex: errSecInternalComponent Command CodeSign failed with a nonzero exit code
解决方法是在脚本增加钥匙串登录命令
(下面的判断可以不要,我是有需要才加的)
# 登录从节点钥匙串
if [ $(hostname) == "ios_slave_1.local" ]; then
echo "登录从节点钥匙串"
security unlock-keychain -p "password" ~/Library/Keychains/login.keychain
fi
问题1: 打包机磁盘占用很高
- 仅保留有限的构建日志,job配置里 ->
丢弃旧的构建 -> 保持构建的最大个数(50-100即可)
- 脚本定期清理构建产物, 我设置job每周执行一次
定时构建 -> 日程表(H 5 * * 6)
echo "清理7天前的内网包."
# 设置根目录
root_dir="xxxx/itms-services"
# 计算7天前的时间(秒)
# $(date +%s) 获取当前时间的秒数
threshold=$(( $(date +%s) - 7 * 24 * 60 * 60 ))
# 递归遍历目录 (3层)
find "$root_dir" -type d -maxdepth 3 -mindepth 3 -print0 | while IFS= read -r -d '' dir; do
# 获取文件夹的修改时间戳(秒)
mtime=$(stat -f %m "$dir") # macOS 上使用 %m 获取修改时间
# 检查时间戳是否大于阈值(即是否早于7天前)
if [ "$mtime" -lt "$threshold" ]; then
rm -rf "$dir"
else
echo "step this dir"
fi
printf "\n"
done