关于提升团队开发效率有很多可以讲,这里讨论一个比较简单易行并且“效果明显”的方法。
在有些公司,如果对访问外网做了限制的话,可能需要走统一的代理才能访问外网。并且管理更加严格的可能还会对访问的外部资源签发自签名的证书,这样会导致几个问题
以上这些问题可能会影响到多种角色的人,无论是开发,测试,甚至运维。(只要和打包扯上关系的,或多或少都有影响)
假如1个人要花30分钟处理以上问题,那么10个人就要5个小时,总体算下来时间还是很可观的,非常影响整体的效率。
(如果是个人开发者,可能意义就不大了)
有什么解决的方法没有?或许Nexus Repository
是一个选择。
在开发当中经常要使用各种依赖库,比如Java/Android中的maven central
,Python中的pypi
等等。
Nexus Repository
是一个仓库管理器,通过它,我们可以代理各种public的仓库,也可以构建自己的私有仓库。使得软件开发中的依赖管理、编译、发布、部署等更加方便和高效。
Nexus Repository
有Pro
的付费版本,但是一般我们使用它的免费OSS
版本即可。
这里我使用docker
来安装,当然你也可以直接下载安装包安装。
下载nexus
的最新image
$ docker pull sonatype/nexus3
绑定端口,运行
$ docker run -d -p 8081:8081 --name nexus sonatype/nexus3
本机测试,打开浏览器输入
http://localhost:8081/
看到这个界面,就说明安装成功了
首次安装成功,会提示我们修改默认的admin密码,我们需要shell
进去,拿到密码
$ docker exec -it nexus bash
# $ 根据提示,进入对应目录,查看密码
如果要stop或者start nexus的话,执行以下命令
$ docker stop/start nexus
前边我们并没有设置自启动,如果需要container随着docker启动而自启动的话,可以执行以下命令
$ docker update --restart=always nexus
默认的repo有这些
Android和Java会共用大部分的public maven,常见的有
除此之外,Android还会用到
以gradle distribution为例,看看如何添加这个配置
这里注意,它的type是
raw(proxy)
这里总结一下常用的maven,以及对应的type
public repo | type | remote location - official | mirror in China |
---|---|---|---|
maven2 (proxy) | https://dl.google.com/dl/android/maven2 | https://maven.aliyun.com/repository/google | |
maven central | maven2 (proxy) | https://repo1.maven.org/maven2/ | https://maven.aliyun.com/repository/central |
jcenter | maven2 (proxy) | https://jcenter.bintray.com/ | https://maven.aliyun.com/repository/jcenter |
fabric | maven2 (proxy) | https://maven.fabric.io/public/ | - |
gradle plugin | maven2 (proxy) | https://plugins.gradle.org/m2/ | https://maven.aliyun.com/repository/gradle-plugin |
gradle distribution | raw (proxy) | https://services.gradle.org/distributions/ | - |
依次创建完对应的repo之后,调整一下maven-public,把所有的maven2类型的repo都加进去
以Android项目为例,看看我们需要修改哪些配置
首先用任意文本编辑器打开项目(不要用Android Studio或IDEA,它会自动触发gradle sync)
修改项目build.gradle
的repo
把现有的repo全部删掉或者注释掉,然后换成
maven { url 'http://localhost:8081/repository/maven-public/' }
修改项目settings.gradle
,配置gradle plugin的repo
在文件顶部加入
pluginManagement {
repositories {
maven { url 'http://localhost:8081/repository/maven-public/' }
}
}
如图
修改文件gradle/wrapper/gradle-wrapper.properties
将distributionUrl的host及path前缀换掉,如
distributionUrl=http\://localhost:8081/repository/gradle-distribution/gradle-5.1.1-all.zip
如图
创建一个npm (proxy)
的repo,remote url是
https://registry.npmjs.org/
查看当前
npm
的registry
-$ npm get registry
设置npm mirror
# 替换称你自己的地址
$ npm set http://localhost:8081/repository/npm-registry/
还原npm registry
$ npm set registry https://registry.npmjs.org/
创建一个pypi (proxy)
的repo,remote url是
https://pypi.org
查看当前的配置信息,
$ pip3 config list -v
在用户目录下创建文件~/.pip/pip.conf
(如果不存在的话),加入以下配置
[global]
index-url = http://localhost:8081/repository/pypi-proxy/simple
trusted-host = localhost
这里要特别注意,index-url最后的simple是必须要有的。simple之前的地址就是nexus的访问地址,请替换成自己的地址。
因为我们没有使用https,所以需要在trusted-host里边加入我们的host。
创建一个cocoapods (proxy)
的repo,remote url是
https://cdn.cocoapods.org/
cocoapods
比较麻烦的地方在于客户端只支持https
,我暂时没有做测试。解决方案是使用自签名证书来开启https。有兴趣的同学可以根据官方文档的说明去调调看 - CocoaPods Repositories
总结一下,我们
Android/Java
, NodeJs
, Python
, 和iOS
这里只是列举了一部分,实际上Nexus支持的还有很多,比如apt
, conda
, docker
, go
, nuget
, rubygems
, yum
等等。如果有相应的需要,可以找对应的资料进行配置使用。