美文网首页iOS Developer程序员软件测试职业探索
基于Jenkins和fastlane的iOS持续集成与发布环境搭

基于Jenkins和fastlane的iOS持续集成与发布环境搭

作者: 仁伯 | 来源:发表于2018-07-01 21:31 被阅读207次

    前言

    临安的荆湘妹子,在他乡还好吗?看到请回复~

    Jenkins安装

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

    Jenkins下载地址
    选择Mac os X
    下载好,一步一步安装即可。

    安装成功.png

    安装成功后,直接在浏览器中输入:http://localhost:8080/ ,打开jenkins;

    http://localhost:8080/exit            // 退出Jenkins
    http://localhost:8080/restart       // 重启Jenkins,一般装了插件重启下
    http://localhost:8080/reload       // 重新加载Jenkins
    
    解锁Jenkins.png

    找到/Users/用户名/.jenkins/secrets/也可能是/Users/Shared/Jenkins/Home/secrets/这个目录的initialAdminPassword文件,将文件内容拷贝至页面密码区域;
    或者如下图,执行sudo cat /Users/Shared/Jenkins/Home/secrets/initialAdminPassword,将输出的密码拷贝纸页面密码区域;

    解锁Jenkins-initialAdminPassword.png 解锁Jenkins-密码拷贝.png 自定义安装.png 下一步安装.png 创建管理员.png instace config.png
    start jenkins.png 安装完成.png

    插件安装

    在系统管理-->管理插件,添加如下插件:


    image.png

    Xcode integration
    Git plugin
    GitHub plugin
    PostBuildScript Plugin

    注意:
    记得安装环境变量注入插件,然后在配置工程时,构建->增加构建步骤->引入如下路径;

    PATH=$PATH:/usr/local/bin
    # 包括pod、fastlane、git等shell的执行,都依靠这个路径
    

    Environment Injector Plugin // 环境变量注入

    Inject environment variables.png fastlane指令.png

    fastlane 安装

    fastlane工具
    1、Xcode 命令行安装

    xcode-select --install
    

    如果输出如下,表示已经安装


    Xcode-select.png

    2、fastlane安装

    sudo gem install fastlane // 安装fastlane
    fastlane -v // 查看安装版本
    

    新建Item

    新建Item.png create Item.png iOS_test.png workspace path.png
    /Users/developer/.jenkins/jobs/iOS_Test/workspace/项目工程
    

    Jenkins通用配置

    注意点:

    1、Keychains
    获取Jenkins对钥匙串的访问权限

    ~/Library/Keychains/login.keychain 或者login.keychain-db
    

    2、Provisioning Profiles
    将描述文件拷贝到

    ~/Library/MobileDevice/Provisioning Profiles/
    

    将以上文件分别拷贝到

    /Users/Shared/Jenkins/Library/Keychains/
    
    /Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles/
    

    3、证书权限

    钥匙串-> 登录 -> 我的证书
    找到对应证书,展开-选中私钥,双击,访问控制,允许所有应用程序访问此项目,右下角,存储更改。
    

    fastlane配置

    1、进入工程主目录

    fastlane init
    

    2、查看Appfile文件

    app_identifier("com.XX.XX") # The bundle identifier of your app
    apple_id("renboan@liyun.com") # Your Apple email address
    
    # For more information about the Appfile, see:
    #     https://docs.fastlane.tools/advanced/#appfile
    
    

    3、配置Fastfile文件

    # This file contains the fastlane.tools configuration
    # You can find the documentation at https://docs.fastlane.tools
    #
    # For a list of all available actions, check out
    #
    #     https://docs.fastlane.tools/actions
    #
    # For a list of all available plugins, check out
    #
    #     https://docs.fastlane.tools/plugins/available-plugins
    #
    
    # Uncomment the line if you want fastlane to automatically update itself
    # update_fastlane
    
    # 平台,安卓还是iOS
    default_platform(:ios) 
    
    # iOS进行的操作
    platform :ios do
      desc "企业版"
      # 在执行lane之前进行的操作,例如我们在每次打包之前都执行一次pod install
      #before_all do
        # faselane中pod install的操作
        #cocoapods
      #end
    
      # 打包的lane操作,我们可以配置多个lane来打不同环境的包
      lane :enterprise do |op|
    
        # 打包之前跟新指定配置的描述文件
        update_project_provisioning(
            # 之前有sigh下载的描述文件存储路径
            profile:"./XXXXDis.mobileprovision",
    
            # 打包配置,Debug,Release
            build_configuration:"Debug"
        )
    
          automatic_code_signing(
            # 工程文件所在路径
            path:"ProjectName.xcodeproj",
            # 是否使用自动签名,这里如果是打包的话应该一般都为false吧,默认也是false
            use_automatic_signing:false,
            # 打包的team ID, 也就是打包使用的证书中的team ID,这个如果不知道是什么的话可以在xCode中设置好签名用的描述文件后到xcodeproj下的pbxproj文件中搜索“DEVELOPMENT_TEAM”,它的值就是了
            team_id:"XXXX",
            # 这个就不用说了,需要修改的targets
            targets:"ProjectName",
            # 用哪种方式打包“iPhone Develop”还是“iPhone Distribution”
            code_sign_identity:"iPhone Distribution",
            # 描述文件名称, 也就是使用哪个描述文件打包
             profile_name:"XXXXDis"
        )
    
        currentTime = Time.new.strftime("%Y-%m-%d-%H-%M")
        outputDirectory = "./build/#{currentTime}"
        logDirectory = "#{outputDirectory}/fastlanelog"
    
        gym(
            # 打包方式,enterprise, adhoc,appstore,development
            export_method: "enterprise",
            scheme: "ProjectName",
            # pod 生成的workspace文件
            workspace:"ProjectName.xcworkspace",
            # 输出文件夹
            output_directory: outputDirectory,
            # 输出包名称
            output_name:"ProjectName.ipa",
    
            # 打包前是否clean
            clean:true,
            silent:true,
            # 打包的配置 Debug Release
            configuration:"Debug",
            # 打包日志输出文件夹
            buildlog_path:logDirectory,
            # 打包证书
            codesigning_identity:'iPhone Distribution: XXXXXXXXXXXX TECHNOLOGY CO.,LTD.',
            # Xcode 9 默认不允许访问钥匙串的内容,必须要设置此项才可以,运行过程可能会提示是否允许访问钥匙串,需要输入电脑密码
            export_xcargs: "-allowProvisioningUpdates",
            # 导出选项
            export_options:{
                # 打包导出时可选描述文件 "bundleID"=>"描述文件名称"
                provisioningProfiles: {
                    "com.XXXX.XXXX" => "XXXXDis.mobileprovision",
                },
            }
        )
        archive_path="Published succeed:/XXXXXXXXXXXX/build/#{currentTime}/ProjectName.ipa"
        puts "#{archive_path}"
      end
    
      # 当lane执行完成之后进行哪些操作
      after_all do |lane|
    
      end
    
      error do |lane, exception|
      end
    
    end
    
    

    4、命令行执行打包

    fastlane ios enterprise
    

    Jenkins配置

    1、shell语句
    export LANG="en_US.UTF-8"
    pwd
    cd $WORKSPACE/ProjectName
    
    fastlane ios enterprise
    
    2、Set build description
    Set build description.png
    Published succeed:(.*)
    
    <a href="http://XX.XX.XX.XX:8080/job/${JOB_NAME}/ws\1">单击ipa包下载</a>
    

    Regular expression:Published succeed:(.*) // 这里这样写,是因为fastlane文件中输出了以Published succeed:为前缀的一个地址;

    archive_path="Published succeed:/XXXXXXXXXXXX/build/#{currentTime}/ProjectName.ipa"
    puts "#{archive_path}"
    

    Description:构建后的描述中的\1的意思是获取正则表达式获取的内容。

    3、邮件通知

    首先将系统管理员邮箱(你用来发邮件的邮箱)smtp服务打开,拿126邮箱举例,打开邮箱,进入设置,进入POP3/SMTP/IMAP设置,打开如下图几个选项。


    image.png

    然后,在Jenkins,添加系统管理员邮箱及SMTP服务器,具体步骤是,进入Jenkins的系统管理-->系统设置,找到Jenkins Location,填写系统管理员邮件地址;


    image.png

    添加SMTP服务器地址,126邮箱的是smtp.126.com,填写管理员邮箱及密码。


    image.png

    最后,在项目配置中,构建后操作项,添加收取邮件的邮箱,多个邮箱用空格隔开。


    image.png

    设置完成后,在构建历史区域可以直接下载打包的ipa包。


    image.png

    本文已在版权印备案,如需转载请在版权印获取授权。
    获取版权

    相关文章

      网友评论

        本文标题:基于Jenkins和fastlane的iOS持续集成与发布环境搭

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