关于提升团队开发效率有很多可以讲,这里讨论一个比较简单易行并且“效果明显”的方法。
在有些公司,如果对访问外网做了限制的话,可能需要走统一的代理才能访问外网。并且管理更加严格的可能还会对访问的外部资源签发自签名的证书,这样会导致几个问题
- 每个人需要在工作电脑上配置代理
- 不同的软件/平台配置代理的方式并不统一
- 访问速度较慢
- 可能需要把自签名的证书import到对应的trust store中,并且可能要定期或不定期更新
以上这些问题可能会影响到多种角色的人,无论是开发,测试,甚至运维。(只要和打包扯上关系的,或多或少都有影响)
假如1个人要花30分钟处理以上问题,那么10个人就要5个小时,总体算下来时间还是很可观的,非常影响整体的效率。
(如果是个人开发者,可能意义就不大了)
有什么解决的方法没有?或许Nexus Repository是一个选择。
什么是Nexus,有什么用?
在开发当中经常要使用各种依赖库,比如Java/Android中的maven central,Python中的pypi等等。
Nexus Repository是一个仓库管理器,通过它,我们可以代理各种public的仓库,也可以构建自己的私有仓库。使得软件开发中的依赖管理、编译、发布、部署等更加方便和高效。
Nexus Repository有Pro的付费版本,但是一般我们使用它的免费OSS版本即可。
如何使用Nexus?
安装
这里我使用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
服务器端配置
Android和Java会共用大部分的public maven,常见的有
- maven central
- jcenter
- fabric
除此之外,Android还会用到
- gradle plugin
- gradle distribution
以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
如图

NodeJs
服务器端配置
创建一个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/
Python
服务器端配置
创建一个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。
iOS
创建一个cocoapods (proxy)的repo,remote url是
https://cdn.cocoapods.org/
cocoapods比较麻烦的地方在于客户端只支持https,我暂时没有做测试。解决方案是使用自签名证书来开启https。有兴趣的同学可以根据官方文档的说明去调调看 - CocoaPods Repositories
小结
总结一下,我们
- 了解了Nexus Repository作为一种包依赖管理器,可以解决在公司内部的依赖下载配置繁琐以及慢的问题
- 然后讲解了如何安装配置Nexus
- 随后,针对不同的平台分别做了配置讲解,如
Android/Java,NodeJs,Python, 和iOS
这里只是列举了一部分,实际上Nexus支持的还有很多,比如apt, conda, docker, go, nuget, rubygems, yum等等。如果有相应的需要,可以找对应的资料进行配置使用。
参考资料
- sonatype/nexus3 - Docker Hub
- User Guide — pip 19.3.1 documentation
- pip config — pip 19.3.1 documentation
- Nexus pypi repository “Could not find a version that satisfies the requirement”
- Using Gradle Plugins
- 常见maven repo在gradle里的配置优化
- Pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
- How to use an NPM Mirror
- Using Nexus 3 as Your Repository – Part 2: npm Packages
- PyPI Repositories
- CocoaPods Repositories
- CocoaPods 镜像使用帮助
- Docker容器开机自动启动
- Start containers automatically
本文介绍了Nexus Repository如何提升团队开发效率,尤其是在有网络限制的环境中。通过代理公共仓库,简化不同平台(Android/Java, NodeJs, Python, iOS)的服务器和客户端配置,解决依赖管理问题,加快下载速度,降低维护成本。"
133607479,20036464,Linux浏览器速度测试:流行浏览器是否真快?,"['Linux', '运维', '服务器', '浏览器性能']

222

被折叠的 条评论
为什么被折叠?



