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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容