美文网首页iOS点点滴滴
Cocoapods私有库自动化更新简介

Cocoapods私有库自动化更新简介

作者: GrumpyMelon | 来源:发表于2018-05-16 21:42 被阅读15次

    前言

    随着项目增大,开发人员不可避免的面临一些解耦工作。建立cocoapods私有库是一个不错的选择,把一些业务不相关的工具类和UI轮子提取出来统一管理。

    如何建立私有库目前网上资料比较多,这里不做赘述。

    为了便于开发,目前项目中允许开发成员直接在主工程项目中直接修改私有库代码,这就导致了主工程中的私有库代码与gitlab上私有库代码不一致的情况,每次执行pod update会拉取gitlab上旧的私有库代码覆盖主工程中的代码。因此需要开发人员定期手动更新远端代码。这就有点【强人锁男】了毕竟程序猿还是比较反感重复工作的,那交给脚本去做粑。

    利用jenkins和gitlab的webhook功能,可以有效的实现在远端机器上自动更新私有库的目的。减少了人力消耗和代码覆盖风险。

    自动化更新简介

    利用gitlab的webhook功能,在gitlab发生merge事件时【可设置push,comment等事件】,触发jenkins的触发器。在远端机器上执行自动更新代码的脚本。

    Jenkins配置

    首先在jenkins的【系统管理-管理插件】中,下载【Gitlab Hook Plugin】和【Multiple SCMs Plugin】.

    在项目的配置中,使用【源码管理-Multiple SCMs】选项,如下图。在【Repository URL】中填写git代码仓库地址,在【Check out to a sub-directory】中填写文件夹名,比如【ProjectFolder,PodsFolder】。这样可以实现在同一个workspace中管理两个仓库的代码。即主工程代码放在ProjectFolder文件夹下,pod工程放在PodsFolder文件夹下。

    配置【构建触发器】,复制GitLab CI Service URL.勾选【Push Events】和【Accepted Merge Request Events】,即在Gitlab发生推送事件和接受合并请求事件的时候触发脚本。

    构建脚本,脚本的主要功能是把主工程的develop代码中的Pod/Classes文件夹下的代码全部粘贴到pod工程目录下并自动提交到autoSynchronBranch分支上。

    #!/bin/bash
    
    #获取workspace目录
    rootPath=${WORKSPACE}
    projectPath='/ProjectFolder'
    projectPodPath='/Pods/PROJECTNAME/Pod/Classes/*'
    podPath='/PodsFolder'
    podPodPath='/Pod/Classes'
    
    #同步develop和release-test两个分支的代码
    branchArray=('develop' 'release-test')
    for branchName in ${branchArray[@]};do
         #拉取主工程代码
         cd $rootPath$projectPath
         git fetch
         git checkout .
         git checkout $branchName
         git checkout .
         git pull
         #拉取pod
         cd $rootPath$podPath
         git fetch
         git checkout .
         #测试阶段,把pod代码自动更新至autoSynchronBranch分支上。
         git checkout autoSynchronBranch
         git checkout .
         git pull
    
         #代码同步
         cp -r $rootPath$projectPath$projectPodPath $rootPath$podPath$podPodPath
         #推送代码,push日志【2018.05.15-同步develop私有库代码】
         dateString=$(date +%Y.%m.%d)"-同步"$branchName"私有库代码"
         git add .
         git commit -m $dateString
         git push 
    done
    

    gitlab配置

    直接在gitlab界面的webhook界面粘贴jenkins配置界面的GitLab CI Service URL,并选择【推送事件】和【合并请求事件】,点击测试按钮,返回httpcode:200即可。

    FAQ

    1、gitlab webhook配置好后,点击【测试】,返回httpcode:503 anonymous 问题。

    在jenkins【系统管理-系统设置-gitlab】中,uncheck 【Enable authentication for ‘project’】选项.

    2、jenkins构建时,git fetch —tags失败,超时。

    在项目配置中,设置branch specifier 为 remotes/origin/develop。

    相关文章

      网友评论

        本文标题:Cocoapods私有库自动化更新简介

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