美文网首页
Macos配置Jenkins自动打包环境-iOS篇

Macos配置Jenkins自动打包环境-iOS篇

作者: 路_远方 | 来源:发表于2018-09-30 19:18 被阅读19次

    最近准备着手搭建一些方便团队开发工作顺利进行的工具平台,首先就从Jenkins打包开始吧。其实关于ios的自动化打包文章在网上已经有N篇了,但我还是决定要写下这边文章,不是为了庆祝自动打包成功,而是为了记录在成功之前遇到的所有问题的梳理和总结,能够直接或者间接的帮助到需要的客官。

    ok,那我们就开始正经的扯淡。

    1. 安装Jenkins

    此过程将一笔带过,毕竟安装起来还是很简单的,这个时候要有两种安装方式看起来比较厉害一种是Jenkins War包下载 ;另一种是利用Homebrew命令安装;

    方式一:Jenkins War包 安装:(此种方式没有实际尝试,有问题的童鞋欢迎一起讨论)

    命令录入:(此时注意Jenkins war包的路径问题,8080为端口号 也就是浏览器打开的地址:http://localhost:8080)

    $ java -jar jenkins.war --httpPort=8080

    方式二:Homebrew安装:

    执行安装的命令

    $ brew install Jenkins

    Updating Homebrew...

    ==> Downloading https://homebrew.bintray.com/bottles-portable-ruby/portable-ruby-2.3.7.leopard_64.bottle.tar.gz

    ######################################################################## 100.0%

    .... ... ... 

    🍺  /usr/local/Cellar/jenkins/2.143: 7 files, 75.4MB, built in 3 minutes 43 seconds

    出现上述内容,则证明安装完成

    然后,链接 launchd 配置文件 形成了一个替身到指定目录中

    $ ln -sfv/usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents

    launchctl是一个统一的服务管理框架,启动、停止和管理守护进程、应用程序、进程和脚本

    在这里利用launchctl来启动Jenkins,启动方式如下:

    $ launchctl load~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

    当然,可以启动,就可以关闭Jenkins,关闭方式如下:

    $ launchctl unload~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

    番外篇:(如果理解的不正确还请各位大神只交)

    注意,这里的路径出现的可能较为混乱

    1. 通过brew安装的Jenkins的目录为 /usr/local/Cellar/jenkins/2.143

    2. 而我们在形成配置文件替身到LaunchAgents文件中的时候目录使用的usr/local/opt/jenkins

    可以看到的是Cellar和opt目录下均存在了Jenkins,实际上:

    通过Homebrew安装的程序会存放在Cellar目录中,同时也会被同步到opt目录中,可能有人会想到变量属性中的strong,也就是任何修改都会同步进行。

    找到usr/local/opt/jenkins/*.plist 文件,可以看到指向的war包路径为opt/jenkins/libexec目录中,所以上面的形成的配置文件替身也指向了这里。

    与此同时,为了让全局能够使用安装的程序,系统会生成软连接至/usr/local/bin目录下。

    既然使用上面的启动命令将指向opt中的jenkins目录,并启动程序,那么Cellar目录中的jenkins是否也可以被调起?怀着这种想法,我在终端录入了:

    $ jenkins

    Running from: /usr/local/Cellar/jenkins/2.143/libexec/jenkins.war

    如我所愿,果然调起了Cellar中的jenkins,通过此方式也证明了bin目录存在的意义;

    而后经过两种启动方式的验证,账户和Jenkins里面的创建的Task和配置 均存在,也证明了任何修改均在Cellar和opt目录中会同步进行。


    2. Jenkins的准备工作

    (因为此篇文章是在Jenkins准备工作完成之后写的,为了偷懒,就直接用文字描述带过了,此过程相对简单;)

    此时此刻,我们就可以开启有趣的Jenkins之旅了。打开浏览器,输入神圣的地址

    http://localhost:8080

    不过这个时候并没有出现欢迎的页面,而是让我们去配置密码(Administrator Password),根据页面上的路径的提示,在终端录入命令 cat + 路径 就可以得到一个密码串,把此密码复制粘贴到页面的输入框内

    $ cat /Users/xxx/.jenkins/secrets/initialAdminPassword

    接下来将需要去下载安装Jenkins插件,可以直接选择建议安装,当所有的插件都安装完毕之后再进行后续操作。

    最后在配置一个admin user就万事大吉了。

    在这个时候,我们期待的欢迎页面就出现了

    3. 安装插件

    各位客官可根据自己的需求去安装想要的插件,比如Gitlab插件、xcode integration插件等


    4. 配置证书(重头戏-前奏)

    配置Keychains和Provisioning

    选择 系统管理-Keychains and Provisioning Profiles Management 

    通过命令可以找到我们想要的keychains文件,上传login.keychain文件到网页中,如果没有此文件的也可将-db结尾的文件复制一份,删除“-db”即可上传

    $ cd ~/Library/Keychains

    $ ls

    login.keychain-db login.keychain 

    xxx xxx xxx(others files)

    然后上传证书的描述文件,可通过 访达 - 前往 - 前往文件夹 来录入描述文件的路径来找到

    不过,通过网页选择文件进行上传无法直接跳转到目标路径,那么我们只能一级一级的寻找,但是当我们找到资源库这一级别的时候,却发现找不到相关文件,那么这个时候就要使用快捷键将隐藏文件显示出来 shift+command+.  即可看到。

    注意,可能电脑中存放了很多描述文件,一定要选择我们将要使用的文件,如果不放心,可以选择删除所有,重新下载必要的,以免弄混。


    5. 新建任务(重头戏)

    选择“新建任务” - “输入名称” - “构建一个自由风格的软件项目”  随后会进入配置页面

    此节我们重点介绍 构建 的部分

    源码管理

    我选择了git作为项目源,在配置用户的时候先点击 钥匙图标的按钮添加git的用户名和密码,然后成功之后再选择你添加的用户,可能会有一下延迟,可等待一会

    构建环境

    配置Keychains and Code Signing Identities

    配置Mobile Provisioning Profiles,选择和项目中相同的描述文件

    构建(最后才到重头戏)

    #写在最前面,一定要保证线上的项目证书是正确的和匹配的,因为现在每次构建都会下载最新代码到本地,我一开始以为不会,所以一直在修改本地项目的证书,结果很多次都在提示证书有问题,bundle id不匹配等,所以如果大家碰到了这种失败原因,请检查证书问题是否匹配

    # 项目中target的名字,大家应该都很熟悉

    TARGET_NAME="LKGesturePasswordProject" 

    # app的名称,作为最后输出app和ipa包的名称

    APPDISPLAY_NAME="LKGesturePasswordProject" 

    # 项目中使用的证书的名称,和上面配置的描述文件一定要一致

    CODE_SIGN="iPhone Developer: xx xx (xxxxxx)"

    # build的路径

    BUILD_DIR="${WORKSPACE}/build" 

    # ipa存放的路径

    IPA_DIR="${WORKSPACE}/ipa" 

    # 之前碰到过一个fail 找不到LKGesturePasswordProject.xcodeproj文件,所以添加了cd命令进入到项目中

    cd "${WORKSPACE}/LKGesturePasswordProject"

    # clean-build-archive(项目中的三个过程)

    # 注意:下文中用到了-project 和 .xcodeproj 字样,适用于没有用pods的项目,如果使用了pods请使用-workspace和.xcworkspace进行替换

    # clean - 注意这里直接配置了Release(我们可以再工程中根据API环境的切换来配置多个在这里进行切换)

    xcodebuild clean -project $TARGET_NAME.xcodeproj -scheme $TARGET_NAME -configuration Release

    # 设置build号

    xcrun agvtool new-version -all ${BUILD_NUMBER}

    # 其次,执行build:(一个fail,报错找不到描述文件,所以我添加了PROVISIONING_PROFILE声明,不知道上面的配置如何生效)

    xcodebuild -project $TARGET_NAME.xcodeproj -scheme $TARGET_NAME -configuration Release build BUILD_DIR=$BUILD_DIR BUILD_ROOT="${WORKSPACE}/buildRoot" CODE_SIGN_IDENTITY="$CODE_SIGN" PROVISIONING_PROFILE="xx-xx-xx-xx-xx"

    # 创建输出目录

    mkdir -p $IPA_DIR

    cp -f -r $BUILD_DIR/Release-iphoneos/$TARGET_NAME.app.dSYM $IPA_DIR

    # 最后,将app打包为ipa

    /usr/bin/xcrun -sdk iphoneos PackageApplication -v $BUILD_DIR/Release-iphoneos/$APPDISPLAY_NAME.app -o ${WORKSPACE}/ipa/$APPDISPLAY_NAME${BUILD_NUMBER}.ipa

    # fail - begin :PackageApplication找不到,也就是xcode中缺少了此文件

    # 可自行搜索此文件并且下载放到此目录中 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

    # 执行命令

    # $ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/

    # $ chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication

    # fail - end

    至此,就可以点击保存,进行构建了,成功之后将会看到我们期待已久的ipa包了。


    持续更新中,向着成熟化进发。(欢迎各位大佬指点迷津)

    相关文章

      网友评论

          本文标题:Macos配置Jenkins自动打包环境-iOS篇

          本文链接:https://www.haomeiwen.com/subject/sifwoftx.html