配置Jenkins从节点(slave)进行iOS打包

踩了些坑,记录下
我的场景是一台Mac mini做master,另一台Mac mini做slave

  1. Jenkins的插件中心安装 ssh插件
  2. 节点列表中增加从节点
    • 从节点电脑需要安装和master同版本的Java环境
    • 确保从节点使用固定的内网ip,需要在系统设置->共享->打开远程登录
    • 从节点配置使用userName password登录(使用ssh公钥也行)
  3. 从节点环境变量
    我需要执行的Job都是一些shell脚本,在从节点中执行时,默认无法访问到所有环境变量,比如会出现 command not found,需要再shell中手动导出下
#导入环境变量
source ~/.bash_profile
source ~/.zshrc
# todo ..
  1. 打包脚本遇到签名错误,如这种
    ...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: 打包机磁盘占用很高

  1. 仅保留有限的构建日志,job配置里 -> 丢弃旧的构建 -> 保持构建的最大个数(50-100即可)
  2. 脚本定期清理构建产物, 我设置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  

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。