美文网首页
iOS 持续集成之 Gitlab-Ci + FastLane

iOS 持续集成之 Gitlab-Ci + FastLane

作者: 不要人夸颜色好 | 来源:发表于2017-10-25 14:26 被阅读1312次

    Gitlab-Ci

    配置Xcode

    Xcode唯一需要配置的就是要将你运行的scheme设置成Shared

    • 打开Xcode项目
    • 选择Product > Scheme > Manage Schemes
    • 将对应的scheme勾选上Shared
    selectShare.png

    安装 配置 GitLab Runner

    下载runner到本地
    sudo curl --output /usr/local/bin/gitlab-ci-multi-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-darwin-amd64 
    //修改目录权限
    sudo chmod +x /usr/local/bin/gitlab-ci-multi-runner  
    

    这样就完成了Runner的安装,接下来要为工程注册一个Runner,本地注册Runner需要GitLab项目的CI地址和Token,打开到GitLab,进入对应项目选择 Setting-Runners ,
    点击Runners

    clickRunner.png

    如下图所示,我们可以看到提示。


    configRunner.png

    知道 URL 和 Token 之后就可以就可以注册Runner了

        gitlab-ci-multi-runner register
        WARNING: Running in user-mode.                     
        WARNING: The user-mode requires you to manually start builds processing: 
        WARNING: $ gitlab-runner run                       
        WARNING: Use sudo for system-mode:                 
        WARNING: $ sudo gitlab-runner...  
         
        //输入之前的URL
        Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
        https://xxxx.com/ci
         
        //输入token
        Please enter the gitlab-ci token for this runner:
        <CI runner token from Project > Settings > Runner>
         
        //描述,这个随意了,一般用默认的就好
        Please enter the gitlab-ci description for this runner:
        [Your-Mac\'s-Name.local]:
         
        //runner的tag,这个是用于执行脚本时指定runner用的,所以最好起一个比较容易区分的
        Please enter the gitlab-ci tags for this runner (comma separated):
        test_machine
        Registering runner... succeeded                     runner=724a60b5
         
        //runner的执行器,因为Xcode项目需要用xcodebuild来执行,所以选shell
        Please enter the executor: virtualbox, ssh, shell, parallels, docker, docker-ssh:
        shell
         
        Runner registered successfully. Feel free to start it, but if it's running 
        already the config should be automatically reloaded! 
    

    这时候再刷新GitLab项目的 Runner 界面就会看到一个 Active Runner 了
    确认好了之后可以启动 Runner 了。

    cd ~
    gitlab-ci-multi-runner install
    gitlab-ci-multi-runner start
    

    编写 yml 配置文件

    stages:
      - build
      - archive
    
    build_project:
      stage : build
      script :
            - xctool -workspace XXX.xcworkspace -scheme parent clean
            - xctool -workspace XXX.xcworkspace -scheme parent -sdk iphonesimulator9.2 -destination name="iPhone 6"  test
    archive_project:
      stage: archive
      script:
            - xctool -workspace XXX.xcworkspace -scheme parent -configuration AppStoreDistribution archive -archivePath build/parent
            - xcodebuild -exportArchive -archivePath build/parent.xcarchive -exportOptionsPlist exportOptions.plist  -exportPath build/parent
            - fir p $PWD/build/parent/parent.ipa -T 8a7cf204f8c40f39a6ba41db8b44929d
      only:
            - master
    

    在项目根目录下配置 .gitlab-ci.yml 文件

    • 上面的配置文件中定义了两个stages
    • 用于描述两个阶段,一般有build,test,archive,deploy等。
    • stage 可以在所有job中使用,上面的build_projectarchive_project 就是job,每个job 分别对应执行哪个stage
    • script 中就是你要执行的脚本。
    • 如果你的项目中没有使用xcworkspace,就把相应的 -workspace XXX.xcworkspace改为-xcodeproject XXX.xcodeproject
    • 配置文件中用到了xctool 工具,和xcodebuild 相似,具体安装及使用 xctool
    • archive 过程将项目export出 ipa 文件 并上传至 fir 平台。fir 工具可以上传 ipa 文价,具体使用 fir 使用
    • exportOptions.plist是放在根目录下的配置打包参数的,可以参考 xcodebuild --help
    • only - master是指只有提交master 分支才有执行 build_project job

    fir 安装

    gem install fir-cli   
    

    上传至fir

    fir p path/to/xxx.ipa -T #API TOKEN# 
    
    apitoken.png

    如果一切成功的话,就会有如下 passed 标志 。

    result.png

    小结,在测试,打包过程中可能会出现许多奇怪的错误,可以自己google或者询问我。

    demo 地址

    Fastlane

    上述是使用xctool 打包并上传fir ,测试人员可以去fir 的网站扫码下载。这里介绍另一种方式。这里安装什么的我就不赘述了,官方都有,就将个人是怎么使用的。

    整个过程还是遇到很多问题的,整个过程不断google,个人从ruby环境2.0 切换到2.3 ,最后在2.2.3 上才ok。

    Fastlane 简化了测试,打包,上传testFlight 功能,其实包含了上述 xctool 的所有功能。Fastlane 每个过程都用一个lane 标示。

    自动测试:

        lane :test do
        scan({
          workspace:"ParentAndSchool.xcworkspace",
          scheme:"parent",
          device:"iPhone 6s",
          clean: true
        })
        end
    

    看一下scan 中的参数,workspace 表示项目的命名空间,如果你用cocoapods 集成是有这个文件的,如果没有使用xcworkspace ,这里参数就改为project,对应的就是 xxx.xcodeproj文件。

    打包

        lane :archive do
            increment_build_number(
                xcodeproj: "./jyb_ios_parent/parent/frameworks/runtime-src/proj.ios_mac/parent.xcodeproj"
            )
            gym(
                workspace: "ParentAndSchool.xcworkspace",
                scheme: "parent",
                output_directory:"build",
                output_name: "jyb.ipa"
            )
        end
    

    archive 这个lane 我做了两个action,分别是increment_build_numbergym

    • increment_build_number这个动作是增加build号,我们知道,上传appstorebuild号要增加,这个需要xcode中一些配置,可以看这里,如果你没配置好,fastlane 跑脚本的时候不会直接挂掉,只会有提示, 到时候上传时就会失败。
    • gym 这个action 用来打包,参数就不用多说了。

    上传testFlight

        lane :testFlight do
        #for firwall
        ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
        pilot(
            ipa:"build/jyb.ipa",
            username: "*******@corp-ci.com",
            skip_waiting_for_build_processing: true
        )
        end
    

    pilot是可以将包自动发布到itunes testFlight 后台的,一开始怎么也传不上去,好像是网络之类的问题,后来才发现需要加上下面这句话。(官方文档还是要好好读的)

     ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
    

    具体某个action 的参数及使用,可以通过命令 fastlane action *** ,例如(fastlane action gym)查看。

    另外在搭配 gitlab-ci 的过程中,发现每次archive 出来的包,到上传的时候总是说ipa文件找不到。因为gitlab 每个job之后都会还原仓库的状态,就是archive 这个job 结束后,由于ipa 文佳不属于git仓库,被删了。解决办法如下,修改.gitlab-ci.yml:

        archive_parent_project:
         stage : archive
         script :
                - fastlane match appstore 
                - fastlane archive
         only:
                - master
         cache:
            paths :
                - build/
                - build/jyb.ipa
            key: "build"
            untracked: true
       upload_testFlight:
         cache:
            paths :
                - build/
                - build/jyb.ipa
            key: "build"
            untracked: true
         stage : testFlight
         script :
                - fastlane testFlight
         only:
                - master
    

    添加缓存文件,指定每个job结束后不删除build 布目录下的文件。
    fastlane match appstore 是用match 给app 配置证书,具体使用请看 Match

    相关文章

      网友评论

          本文标题: iOS 持续集成之 Gitlab-Ci + FastLane

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