[关闭]
@qidiandasheng 2021-04-22T07:42:27.000000Z 字数 3805 阅读 3278

pod仓库镜像(❎)

使用工具 Web服务


前言

为什么要做pod仓库镜像,因为当我们在pod update的时候有时候会特别慢。

这里速度慢主要是因为两件事:

解决思路:

所以为了提高效率,我们可以把我们依赖的所有第三方仓库镜像一份到自己的服务器。然后重新弄一份spec仓库,里面只包含我们依赖的pod的.spec文件,把这些spec文件里面source的指向替换为我们对应镜像库的地址。

如果我们手动的去镜像每一仓库的话会特别麻烦,每一次加一个第三方库的时候又要去处理一遍。所以我这里弄了两个方案,一个是搭建一个web服务,一个是使用脚本,用于方便的镜像和定时更新镜像。

当然web服务其实也是基于脚本的,只是给一些命令以及添加所要镜像的pod做了一个界面化操作,更加直观方便。


Web服务

安装环境

首先搭建一个Web服务,我这里使用的是Python的Turbogears。具体的安装使用查看Web服务Turbogears的使用

Http 网站服务使用Apache。

创建Web服务的项目

使用Python源码

podMirror github下载Web服务的源码。

复制podMirror目录到上面创建的项目中,直接替换即可。

podMirror目录如下所示:

配置Python源码

使用前端源码

还是podMirror github里下载前端部分的源码,目录为Documents
直接替换Apache Web页面的目录/Library/WebServer/Documents即可。

启动

使用效果

使web服务变成守护进程

我们按照如上操作在终端里执行命令,但是一旦我们关闭终端,那么这个服务就会停止了,所以这里需要把web服务变成守护进程,那么即使关闭终端,这个服务还是在运行的。具体如何启动守护进程参考:启动守护进程

这里简单的演示一遍:

  1. //创建一个session
  2. $ screen
  3. spaceenter
  4. //进入虚拟环境
  5. $ . tgenv/bin/activate
  6. //进入python服务目录
  7. $ cd /Users/dasheng/tgenv/podMirror/
  8. //启动web服务
  9. $ gearbox serve
  10. 最后关闭终端,你会发现你的web服务还在运行。

脚本

当然创建web服务配置是比较麻烦的,所以这里还有一种脚本的方式可以使用。

还是到podMirror github下载源码。

其中mirrorScript就是脚本目录。可以把它复制到任意目录,比如我这里放到桌面。

clone spec仓库

首先clone你将要存放.spec文件的仓库,比如我这里是git@git.coding.net:dasheng/smallSpec.git

  1. $ cd Desktop/mirrorScript
  2. $ git clone git@git.coding.net:dasheng/smallSpec.git smallSpec

clone后目录结构如下所示:

加入json数据

这里我们读取podInfo.json里的数据,然后执行脚本。

  1. {
  2. "data":[{"podName":"SDWebImage",
  3. "sourceHttpUrl":"https://github.com/rs/SDWebImage",
  4. "specSourceHttpUrl":"https://github.com/rs/SDWebImage",
  5. "mirrorSSHUrl":"git@git.coding.net:dasheng/SDWebImage.git",
  6. "mirrorHttpUrl":"https://git.coding.net/dasheng/SDWebImage.git",
  7. "noReplaceSource":0}]
  8. }

json格式如上所示,里面的字段我们在上面都提到过,这里还有一个noReplaceSource就是表示是否替换spec文件里的source,1则为不镜像不替换source,只复制podspec,如友盟。基本上的第三方库都是0。

注意:如果执行脚本时出现ValueError: No JSON object could be decoded这样的错误,可能就是Json的格式不对,请仔细检查。

修改文件

修改mirrorScript/podspecSearch.py里的orgin_dir路径为你cocoapods官方spec仓库的路径。如我这里为orgin_dir = "/Users/dasheng/.cocoapods/repos/master/Specs"

运行脚本

  1. $ python mirror.py

当然我们肯定是希望脚本是定时运行来更新镜像的,所以我们可以创建定时任务来运行脚本。Mac创建定时任务

定时任务执行的是shell脚本,所以我们可以简单的创建一个autoMirror.sh,而这个shell就执行python脚本,autoMirror.sh内容如下:

  1. #!/bin/bash
  2. #
  3. # vim: sts=4 sw=4 et ai si
  4. /usr/bin/python /Users/dasheng/Desktop/mirrorScript/mirror.py

注意

我们脚本里复制的podspec是来自于cocoapods的官方spec仓库,所以我们要保证这个官方的spec仓库也是最新的,所以可以创建一个定时任务定时更新这个官方spec仓库。如我创建了一个cocoapodsUpdate.sh,内容如下:

  1. #!/bin/bash
  2. #
  3. # vim: sts=4 sw=4 et ai si
  4. set -o xtrace
  5. PROG=${BASH_SOURCE[0]:-$0}
  6. cd "/Users/dasheng/.cocoapods/repos/master/"
  7. git pull

问题及更新

这里的源码只是一个很粗糙的版本,本人对于Python Web服务和前端不算熟悉。所以还有很多待改进的地方,配置使用暂时有点复杂,还有错误提示,容错等很多都还没做。

这篇文章最主要的只是提供一个思路,欢迎交流讨论。

待解决问题

更新

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注