Azure Artifacts--全平台的程序包管理仓库(支持nuget)
写在前面
大部分一定规模的团队都有搭建私有nuget的需求;例如:
而我们使用的Azure DevOps 平台本身就提供了Artifacts, Artifacts不单只支持nuget包,还支持Npm、Maven、pip等;
这里简单说说nuget的Azure Devops Artifacts的集成;
先创建Artifacts Feed
Feed就是仓库的集合;也就是nuget、npmjs、pip等仓库都是一个feed的:

我这里创建了一个Feed: samm-feed;
点击“Connect to feed” 可以看到支持的仓库类型;

接下来我们nuget的怎么用;
vs新增nuget包源
vs2022为例:工具-》nuget 包管理器-》nuget包源,新增一个Feed:
名称
samm-feed
Source
https://pkgs.dev.azure.com/jack4it/_packaging/samm-feed/nuget/v3/index.json
Note: 每台机器都要设置一次
发布包
Nuget.exe方式
1、先下载nuget.exe并配置到环境变量(直接放c盘windows目录也行)
https://go.microsoft.com/fwlink/?linkid=2099732
2、创建一个 nuget.config 文件到 .csproj or .sln 所在目录
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="samm-feed" value="https://pkgs.dev.azure.com/jack4it/_packaging/samm-feed/nuget/v3/index.json" />
</packageSources>
</configuration>
3、restore包
Run this command in your project directory
nuget restore
4、发布包
Publish a package by providing the package path, an API Key (any string will do), and the feed URL
nuget.exe push -Source "samm-feed" -ApiKey az Siluzan.Infrastructure.0.0.1.nupkg
5、设置其他人publish权限
azure feed创建的源其他同事是只有只读权限的;
需要在feed-setting-》permission这里加上最少contributor权限才行;

vs插件方式
Nupack暂不支持vs2022,待更新
Azure Pipeline 拉取私有仓库镜像
背景
一般项目用了samm-feed私有镜像的包后,直接用原来的Pipeline yaml构建会报如下错:
/src/src/*.Cutapi.WebApi/*.Cutapi.WebApi.csproj : error NU1301: Unable to load the service index for source https://pkgs.dev.azure.com/jack4it/_packaging/samm-feed/nuget/v3/index.json.

1、先获取private feed的个人令牌
按链接步骤获取获取个人令牌
2、新增nuget.config
在解决方案目录新增文件nuget.config,内容:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<packageSources>
<add key="public" value="https://api.nuget.org/v3/index.json" />
<add key="samm-feed" value="https://pkgs.dev.azure.com/jack4it/_packaging/samm-feed/nuget/v3/index.json" />
</packageSources>
</configuration>
3、修改Dockerfile
以net6为例,其他版本参考本节开头的文件解决;
修改基础镜像
#FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
FROM gebiwangshushu/hei-dotnet-sdk6-azurefeed-certprovider AS build #改为这个
RUN dotnet restore指令改为如下指令:
...
COPY nuget.config .
ARG FEED_USERNAME
ARG FEED_ACCESSTOKEN
ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS="{\"endpointCredentials\": [{\"endpoint\":\"https://pkgs.dev.azure.com/jack4it/_packaging/samm-feed/nuget/v3/index.json\", \"username\":\"${FEED_USERNAME}\", \"password\":\"${FEED_ACCESSTOKEN}\"}]}"
RUN echo $VSS_NUGET_EXTERNAL_FEED_ENDPOINTS \
&& dotnet restore "src/Siluzan.Cutapi.WebApi/Siluzan.Cutapi.WebApi.csproj"
...
4、修改Azure DevOps Pipeline
新增个人令牌参数
variables:
- name: azureFeedUsename
value: <个人令牌用户名> eg:wangsiheng@gmail.com
- name: azureFeedToken
value: <步骤1的个人令牌>
镜像构建和推送要改为如下逻辑
- task: Docker@2 build
inputs:
containerRegistry: '**.azurecr.cn'
repository: '<你的镜像名>'
command: 'build'
Dockerfile: 'src/***/Dockerfile' #你Dockerfile的目录
buildContext: './'
arguments: '--build-arg FEED_USERNAME=$(azureFeedUsename) --build-arg FEED_ACCESSTOKEN=$(azureFeedToken)'
- task: Docker@2 push
inputs:
containerRegistry: '**.azurecr.cn'
repository: '<你的镜像名>'
command: 'push'
总结
azure pipeline 的拉取feed的nuget的问题花了不少时间踩坑,留个记录;
总体来说使用Azure Artifacts 来做私有仓库比自己搭建的好用;
收费上的话:
每个订阅有2G的免费存储,2G以上部分$2/1G/一个月,更多...
参考
azure pipeline 的拉取feed的nuget的参考文档:https://github.com/dotnet/dotnet-docker/blob/main/documentation/scenarios/nuget-credentials.md
大家遇到问题可参考以上文档解决;
Azure Artifacts--全平台的程序包管理仓库(支持nuget)的更多相关文章
- 使用VS中自带的一键打包功能将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理
本章将和大家简单分享下如何使用VS中自带的一键打包功能将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理. 一.注册并登录NuGet平台 NuGet官网:http ...
- 【程序包管理】篇章3:CentOS平台下软件包安装方法总结
1.软件包安装前的学习:程序包管理的基础知识 2.程序包安装的方法介绍: rpm文件的二进制包安装:Linux程序包管理之rpm安装总结 yum安装:Linux程序包管理之yum源安装 链接:本地yu ...
- Linux程序包管理之yum及源代码安装
第十六章.Linux程序包管理之yum及源代码安装 目录 yum介绍 yum配置文件 yum的repo配置文件中可用的变量 yum命令的使用 使用光盘作为本地yum仓库 如何创建yum仓库 编译安装的 ...
- 程序包管理rpm、yum与简单编译安装程序
Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...
- Linux程序包管理rpm与yum
Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...
- 十六、程序包管理之 rpm
c语言程序的构建过程 1.程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接--> 可执行程序 开放源码:就是程序码,文本格式的源代码,写给人类看的程序 ...
- Linux:Day10 程序包管理
YUM:yellow dog,Yellowdog Update Modifier yum repository:yum repo 存储了众多rpm包,以及包的相关的无数据文件(放置于特定目录下:rep ...
- Linux:Day9(下) 程序包管理
API:Application Programming Interface POSIX:Portable OS 程序源代码 --> 预处理 --> 编译 --> 汇编 --> ...
- linux基础之程序包管理(rpm,yum)
一.rpm 安装:rpm { -i | --install } [ install-options ] PACKAGE_FILE... -v: 显示安装时的详细信息 -vv: 显示许多难以阅读的调试信 ...
- 程序包管理rpm和yum
Linux程序包管理: API:Application Programming Interface源码包 POSIX:Portable OS 程序源代码 --> 预处理 --> 编译 -- ...
随机推荐
- 自动化利器 Ansible - 从了解到应用
本文说明 本系列使用 ansible 2.9.27 版本来说明和汇总相关信息. # cat /etc/system-release Red Hat Enterprise Linux Server re ...
- CH58X/CH57X/V208的Broadcaster(广播者)例程讲解
在对ble进行应用的时候,每个用户的需求可能不尽相同.这里着重介绍从机Broadcaster例程,只广播不连接. 使用该例程时可以在手机使用APP上对Broadcaster进行调试. 安卓端在应用市场 ...
- Java安全之CC2
前言 由于在2015年底commons-collections反序列化利⽤链被提出时,Apache Commons Collections有以下两个分⽀版本: commons-collections: ...
- c#显示和隐藏另外一个进程
1 /// <summary> 2 /// 0-关闭窗口 1-正常大小显示 2最小化窗口 3-最大化窗口 3 /// </summary> 4 /// <param na ...
- Reversal
# 35. Reversal- 出题人:OJ- 标签:["String"]- 难度:简单- 总分数:100## 题目描述<p>输入一个英文句子,句子包含若干个单词,每个 ...
- Docker遇见golang https://www.jianshu.com/p/37693eb8f646
golang logo 在我国古代,传说天庭中有种种天兵天将,有看守四大天门的(docker0网桥),有负责传话的门将(REST API),有负责人间和天界联络的,如财神爷,土地公等(NAT,DNS) ...
- YeserCMS
这道题直接让我们查网站根目录的flag,我首先想到的是一句话木马,但是奈何找不到上传的接口啊,只好作罢, 在下载发现有个cmseasy的标识,明显是要提示我们这里是easycms,百度easycms的 ...
- 关于更改 lightdm 主题的方法
lightdm 是一个显示管理器,它支持很多种 greeter lightdm 的主要配置文件都在 /etc/lightdm 目录下面 各个文件的作用: 配置文件名称 作用 图形化界面配置工具 lig ...
- [.NET学习] EFCore学习之旅 -1
1.创建项目 这里我们先新建一个控制台项目:"jyq.EFCore.Learn",框架基于.NET6 2.安装 Neget包 Install-Package Microsoft.E ...
- 2.9:数据交换-csv、Excel、json、爬虫、Tushare获取数据
〇.任务 1. 使用Python基础文件读写函数完成CSV文件的处理: 2. 使用标准CSV库完成CSV文件的处理: 3. 使用Excel库完成Excel文件的处理: 4. Python数据结构和Js ...