Mac os上为iOS项目搭建Jenkins自动化构建

前置工作

  • 安装Homebrew

使用如下命令安装Homebrew,如果已经安装过,则跳过:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 

失败的话选择使用国内镜像安装,命令如下(参考:https://zhuanlan.zhihu.com/p/111014448 ):

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
  • 安装JDK8

使用如下命令安装JDK8,如果已经安装过,则跳过:

brew cask install homebrew/cask-versions/adoptopenjdk8

安装jenkins

  • 安装

使用如下命令安装jenkins:

brew install jenkins

报错【fatal: not in a git directory】的解决办法:

执行brew -v,可以看到git会提示homebrew-core和homebrew-cask目录被认为不是一个安全的目录,需要手动添加,依照提示的命令执行即可,命令如下:

  • git config --global --add safe.directory 你的homebrew-core路径
  • git config --global --add safe.directory 你的homebrew-cask路径
  • 运行

使用如下命令开启、关闭、 重启jenkins服务:

# 启动jenkins
brew services start jenkins
# 停止jenkins 
brew services stop jenkins
# 重启jenkins
brew services restart jenkins
  • 初始化jenkins配置:

打开浏览器,输入如下地址,可进入jenkins可视化界面:

localhost:8080
  • 配置局域网ip地址访问:

通常刚刚初始化的jenkins无法通过局域网ip地址访问,需要我们更改homebrew.mxcl.jenkins.plist配置参数中的httpListenAddress为0.0.0.0;端口号默认为8080,可按需要修改。
homebrew.mxcl.jenkins.plist文件可能存放在如下路径中,找到他(参考:https://www.csdn.net/tags/MtTaMg4sNjM1Njk4LWJsb2cO0O0O.html ):

/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
/usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist
/opt/homebrew/opt/jenkins/homebrew.mxcl.jenkins.plist

配置完成后,执行如下命令,重启jenkins服务:
brew services restart jenkins
重启完成后,在浏览器中输入【ip地址:端口号】测试是否可以打开jenkins可视化界面。

在jenkins上搭建iOS项目

  • 必要插件

    • 安装插件:Git Parameter Plug-In

    分支选择器,git参数化构建流程需要

  • 可选插件

    • 安装插件:AnsiColor

    控制台颜色输出,此插件需要在后续的项目中配置中,勾选Color ANSI Console Output,下拉选项默认为xterm即可


    AnsiColor.png
  • 配置项目

    • 选择构建一个多配置项目


      构建一个多配置项目.png
    • General中首先配置丢弃旧的构建的规则

    使用5 20策略,如图:


    image.png
    • General中的参数化构建过程中,首先添加git参数
      此参数用于获取git仓库指定分支、标签的代码,如下图(此项为之前安装的Git Parameter Plug-In插件的功能):

    注:此处所有的参数皆为当前Shell脚本的环境变量,可使用$参数名${参数名}获取,例如图示中的参数可通过$SELECTED_BRANCH来获取

    Git参数.png

    • General中的参数化构建过程中,根据自己的需要,添加其他类型的参数

    这里简单举一个例子,例如打包环境,添加参数如下:


    打包环境参数配置.png

    在参数化构建过程中添加的构建参数,会在开发者构建时展示在jenkins构建界面上(提前展示一下):


    构建时看到的输入界面.png
    • 源码管理中输入代码仓库信息
      如下图图配置git相关参数:

    【关于多仓库项目】:这里配置多仓库项目的清单仓库,所有组件仓库的分支名建议相同,后续构建流程有说明

    • 通常持续化集成构建流程中,我们会直接指定一个确定的分支,例如:【origin/Develop】
    • 手动构建流程中,我们会将指定分支指向开发人员选择的git参数


      Git仓库配置.png
    • 在构建中添加Shell脚本,来灵活的控制项目整体构建流程
    • jenkins自动拉取的代码库存放在如下路径
    /Users/用户名/.jenkins/workspace/项目名
    
    • 这里可以通过shell主控脚本,来控制本地代码仓库中的其他脚本,来实现编译、导出ipa、上传第三方分发平台、上传appstore、发送打包完成邮件、发送打包信息到钉钉或飞书等移动办公软件、上传dsym至bugly、导出git指定时间段的提交记录等功能
    • 【关于多仓库项目】:这里提供给一个思路,可先获取git参数变量,据此来拉取各个仓库代码到jenkins的workspace,后续构建流程使用脚本中拉取的代码库来构建


      Shell主控脚本.png
  • 构建脚本相关

iOS的自动打包脚本,网络上有很多(自动签名、手动配置证书无论那种都可以在百度搜一下),这里就不提供详细脚本了,简单指一条传送门:iOS Xcode 自动打包,一键上传AppStore脚本

不过还是有一些编写多流程构建脚本的相关技巧提供给大家:

  • Shell子脚本使用主脚本中定义的参数:

    可在主脚本中奖变量用export修饰到环境变量,后续子脚本中即可捕获此变量值
    例如:
    export CATCH_SMB_ARCHIVE_NAME=" " export SETTED_LOG_START_DATE

  • Python脚本中获取shell脚本定义的环境变量:

    使用os库中的environ方法:【os.environ[变量名]】
    例如:
    # Shell export SETTED_LOG_START_DATE # Python settedLogStartDate = os.environ['SETTED_LOG_START_DATE']

  • Shell子脚本修改主脚本变量值

    shell自脚本是无法修改主脚本变量值的(修改无效),这里可以将自脚本拉倒与主脚本相同进程下执行,同一进程下的脚本是可以相互修改其变量值的
    # 以子进程的方式执行脚本: sh shell.sh # 同进程下执行脚本: . shell.sh

你可能感兴趣的:(Mac os上为iOS项目搭建Jenkins自动化构建)