jenkins实现iOS CI/CD架构

作者: jamalping | 来源:发表于2018-08-16 18:31 被阅读505次

    需要的环境

    1、homebrew

    安装命令:

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

    2、JDK

    安装命令:

    brew cask install java
    

    3、Jenkins

    安装命令:

    brew install jenkins
    

    更新Jenkins命令:

    brew upgrade jenkins
    

    我这安装报错了,报错信息如下:

    ➜  ~ brew install jenkins
    Updating Homebrew...
    ==> Auto-updated Homebrew!
    Updated 2 taps (homebrew/core, homebrew/cask).
    ==> Updated Formulae
    openssl ✔                  harfbuzz                   openapi-generator
    azure-cli                  imagemagick                openssl@1.1
    babl                       imagemagick@6              prest
    beast                      influxdb                   protobuf-c
    cquery                     ios-webkit-debug-proxy     sleuthkit
    firebase-cli               libical                    swift-protobuf
    fortio                     linkerd                    sysdig
    fselect                    lxc                        terragrunt
    geoipupdate                mkdocs                     wtf
    groovy                     neo4j
    groovysdk                  ocrmypdf
    
    jenkins: Java 1.8 is required to install this formula.
    JavaRequirement unsatisfied!
    You can install with Homebrew-Cask:
     brew cask install homebrew/cask-versions/java8
    You can download from:
     https://www.oracle.com/technetwork/java/javase/downloads/index.html
    Error: An unsatisfied requirement failed this build.
    

    按照提示运行命令

    brew cask install homebrew/cask-versions/java8
    

    结果如下:

    Error: An unsatisfied requirement failed this build.
    ➜  ~ brew cask install homebrew/cask-versions/java8
    ==> Tapping homebrew/cask-versions
    Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask-versions'...
    remote: Counting objects: 212, done.
    remote: Compressing objects: 100% (206/206), done.
    remote: Total 212 (delta 15), reused 41 (delta 5), pack-reused 0
    Receiving objects: 100% (212/212), 85.29 KiB | 10.00 KiB/s, done.
    Resolving deltas: 100% (15/15), done.
    Tapped 192 casks (231 files, 318.0KB).
    ==> Caveats
    This Cask makes minor modifications to the JRE to prevent issues with
    packaged applications, as discussed here:
    
      https://bugs.eclipse.org/bugs/show_bug.cgi?id=411361
    
    If your Java application still asks for JRE installation, you might need
    to reboot or logout/login.
    
    Installing java8 means you have AGREED to the license at
      https://www.oracle.com/technetwork/java/javase/terms/license/index.html
    
    ==> Satisfying dependencies
    ==> Downloading http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-macosx-x64.dmg
    ######################################################################## 100.0%
    ==> Verifying checksum for Cask java8
    ==> Installing Cask java8
    ==> Running installer for java8; your password may be necessary.
    ==> Package installers may write to any location; options such as --appdir are ignored.
    Password:
    installer: Package name is JDK 8 Update 181
    installer: Installing at base path /
    installer: The install was successful.
    🍺  java8 was successfully installed!
    

    之后安装jenkins:

    ➜  ~ brew install jenkins                          
    Updating Homebrew...
    ==> Downloading http://mirrors.jenkins.io/war/2.137/jenkins.war
    ==> Downloading from http://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.137/jenkins.war
    ######################################################################## 100.0%
    ==> jar xvf jenkins.war
    ==> Caveats
    Note: When using launchctl the port will be 8080.
    
    To have launchd start jenkins now and restart at login:
      brew services start jenkins
    Or, if you don't want/need a background service you can just run:
      jenkins
    ==> Summary
    🍺  /usr/local/Cellar/jenkins/2.137: 7 files, 75.4MB, built in 2 minutes
    

    至此jenkins算是已经安装完成了,接下来把jenkins的配置完成。

    补充:当然还有另外的安装方式.

    • 官网下载最新的pkg安装包.
    • 也可以下载jenkins.war, 然后运行Java -jar jenkins.war,进行安装.

    启动Jenkins

    1、在终端执行命令jenkins
    2、在浏览器打开:http://localhost:8080

    D3D5636E-9997-4ED9-80F6-206238AA79E2.png

    根据提示去上图目录中将密码拷贝出来贴上去。

    可用cat命令直接输出文件内容:

    ➜  ~ cat /Users/jamalping/.jenkins/secrets/initialAdminPassword
    bca154503c1843f8abf2c139bad97b6e
    

    点击继续,出现下图:


    C6659170-8CD3-4CDB-81AB-97068C0E0D82.png

    点击安装推荐的插件

    B7548FCF-697F-4C2D-B921-F40CD205089D.png

    安装完成后,创建第一个管理员用户。

    3608BC43-36E9-44E2-9B98-7DE1BDAB50F5.png

    填写完用户名和密码,点击保存并完成。进入如下界面

    EB9713A2-FBDF-408B-B85E-230676A2F5F1.png

    重启jenkins并用管理员用户登录。
    这里我遇到两个问题
    1、在浏览器输入: http://localhost:8080/jenkins
    报错如下:

    8BFF03E2-0FEA-459C-8D91-89FDCC1A546D.png

    应该是要先登录用户,

    2、在浏览器输入 http://localhost:8080/
    登录后出现空白页面。百度了一圈都说权限问题。然后后面按照解决办法改,确也没反应。

    后面是重启了jenkins服务才正常了。

    登录后如下图:

    C7489501-6953-4D4D-927E-FC708D956CEA.png

    点击“创建一个新任务”

    BA98A088-BBDF-4CB6-8E3C-D212BB38BB08.png

    按照图中提示:输入一个任务名,选择构建一个自由分割的软件项目,点击确定。
    跳转到如下界面,在标题栏我们能清晰的看到我需要进行的配置项。

    FFB34362-1C98-4160-8183-5A5A6D1F1FBC.png
    • general
      暂不多说
    • 源码管理
      我这里有两种源码管理方式:分别是Git和Subversion
    EE60B1B5-A8AC-4EDB-803E-E8702F5B060D.png

    如图:这是git源码管理的配置,图上对应的参数信息分别填上,仓库地址,获取仓库的凭证(git账号,或者SSH的凭证)以及分支名。
    凭证是需要我们去添加的:点击add按钮即可添加。

    747FB486-7EA3-4825-9AEC-314255BBFF92.png

    如上图所示:

    参数 说明
    凭证类型 Username with password
    SSH
    Certificate
    cecret filt
    cecret text
    ...
    范围 全局
    系统

    我这里选的是用户名和密码类型。将正确的用户名和密码填入,添加简单的描述,点击添加。就创建了一个凭证了。
    我配置好如下图:

    C5EBDD64-E93C-4294-93D8-FD41A6239834.png

    出现红色,则说明配置有问题。

    • 构建触发器
      一个简单的触发器构建,如图:
      每天早上八点到晚上6点,每三个小时,检查一遍,发现代码有更新就触发一次构建。


      2ABB2D62-E619-4815-952A-09A20B13AA6F.png

    查看更多关于触发器的构建的信息,请点击

    • 构建环境
      这里我只勾选了
      Add timestamps to the Console Output
    • 构建
      选择执行shell构建
      我的构建脚本如下
    ##!/bin/sh
    ## 项目名
    TARGET_NAME=hdproject
    ## Scheme名
    SCHEME=hdproject_test
    ## 编译类型
    BUILD_TYPE=Debug
    ##当前目录
    SORCEPATH=$( cd "$( dirname $0 )" & pwd )
    ## workspace名
    WORKSPACE=$SORCEPATH/../${TARGET_NAME}.xcworkspace
    ##xcarchive文件的存放路径
    ARCHIVEPATH=$SORCEPATH/$TARGET_NAME.xcarchive
    ## ipa文件的存放路径
    EXPORTPATH=$SORCEPATH/$TARGET_NAME.ipa
    ## ExportOptions.plist文件的存放路径
    EXPORTOPTIONSPLIST=$SORCEPATH/ExportOptions.plist
    
    # 清理缓存
    xcodebuild clean -workspace $WORKSPACE -scheme ${SCHEME} -configuration ${BUILD_TYPE}
    # 输出关键信息
    echo -e "  TARGET_NAME    : ${TARGET_NAME}"
    echo -e "  BUILD_TYPE    : ${BUILD_TYPE}"
    echo -e "  SORCEPATH    : ${SORCEPATH}"
    echo -e "  ARCHIVEPATH    : ${ARCHIVEPATH}"
    echo -e "  EXPORTPATH    : ${EXPORTPATH}"
    echo -e "  EXPORTOPTIONSPLIST    : ${EXPORTOPTIONSPLIST}"
    
    # 导出archive包
    xcodebuild archive -workspace ${WORKSPACE} -scheme ${SCHEME} -archivePath $ARCHIVEPATH
    
    #导出IPA包
    xcodebuild -exportArchive -archivePath $ARCHIVEPATH -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST}
    
    

    路径信息有疑问的可以结合项目目录结构来件,我的项目目录结构如下

    项目根目录
        ├── ***.xcworkspace
        ├── ***.xcodeproj
        ├── build
            ├── ExportOptions.plist
            ├── build.sh 
    
    • 构建后操作

    邮箱配置
    一般构建后,需要发送一个邮件到相关人员邮箱,比如,成功后发送给测试、产品。失败后发送给相关的开发人员等。
    进入系统管理--系统设置
    1、首选设置jenkins的访问地址以及管理员邮箱

    76B6121B-6A9E-499A-B57F-EA7BBC32931C.png

    2、配置邮箱
    如图:找到Extended E-mail Notification,按如下设置。

    F9531BC1-2B76-487C-BE37-2F892AD355EF.png

    注意: 这里补充下。需要开通QQ邮箱的SMTP服务。password并不是邮箱密码,而是开通SMTP服务后给的一个服务码
    如图:找到邮件通知,并按如下设置。

    754BD61E-2F0D-4387-8DBA-DA876EA00BEF.png

    这里,我发送测试邮件进行邮件配置测试的时候有遇到几个错误:
    535:因为我开通QQ邮箱的SMTP服务的时候,没保存设置。
    550:我测试的时候点了太多下,检测到我的邮箱,短时间内收到了大量的邮件,为避免收到而已攻击,暂时禁止向该邮箱发邮件。
    至此,邮箱的系统配置ok了。

    接下来增加构建后操作
    我的配置如下:

    1 2 3

    至此,一个简单的iOS CI/CD架构搭建完成。

    相关文章

      网友评论

        本文标题:jenkins实现iOS CI/CD架构

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