最近,公司的网络策略有所调整,之前通过Jenkins自动构建的项目,都不能正常访问
https://nuget.cdn.azure.cn/v3/index.json地址,于是就有了此文章介绍的方法,利用nuget离线缓存进行项目的自动构建
nuget离线缓存
找一台可以连接外网的服务器,然后创建一个目录,这里我不创建,就利用nuget默认的缓存目录(~/.nuget/packages),当然也可以设置nuget缓存的目录为其他的目录,大家可以自行设置。
此时,可以在其他的目录创建一个控制台的项目,项目名字大家随便起,就是是为了能够方便下载nuget包(如果大家还有其他更好的方法,可以评论区讨论)
dotnet new console -o downloadnugetpackages
创建完了,之后,如果想要缓存那个nuget包,我们就可以通过:
dotnet add package Newtonsoft.Json --version13.0.1
这样我们就能看到~/.nuget/packages目录下已经有了Newtonsoft.Json包
设置目录共享
将~/.nuget/packages目录作为共享目录,这样其他的内网服务器就能通过挂载该共享目录进行文件的读取。
在linux中利用nfs进行文件的共享挂载,需要进行如下的操作:
1. 安装nfs包
sudo yum install nfs-utils
2. 创建共享目录,例如:
mkdir -p /data/sharedata
chmod -R a+r /data/sharedata//确保其他的用户有读取的权限
由于我这里的目录是:~/.nuget/packages,我只需要操作如下命令即可:
chmod -R a+r ~/.nuget/packages
3. 编辑配置文件
vi /etc/exports
输入:/root/.nuget/packages 192.168.20.11(rw,insecure) ,根据自己的情况填写,
/root/.nuget/packages:是被共享的目录,大家最好不使用root账户,这里只是作为展示,实际应用中不推荐
192.168.20.11:需要访问该共享目录的IP地址
rw:配置读写权限
4. 配置生效
exportfs-r
5. 启动服务
systemctlstart nfs
6. 设置开机启动
chkconfignfson或者 systemctl enable nfs
7. 查看共享文件夹是否存在
showmount-e
客户端挂载
1. 创建挂载目录:
mkdir -p /data/sharedata
2. 安装nfs
sudoyum install nfs-utils
3. 挂载
mount192.168.20.12:/root/.nuget/packages /data/sharedata
4. 设置开机自动挂载
vi/etc/fstab92.168.20.12:/root/.nuget/packages/data/sharedatanfsdefaults00mount-a//使配置生效
利用本地缓存构建项目
在客户端服务器上,已经有了nuget包的缓存,就可以在执行构建项目的时候指定缓存目录:
dotnetrestore--source /data/sharedatadotnetpublish--no-restore ....
至此,问题得以解决,不用再担心nuget官网解析不了的问题。