美文网首页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