写在前面

大部分一定规模的团队都有搭建私有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的个人令牌

按链接步骤获取获取个人令牌

https://learn.microsoft.com/zh-cn/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows

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)的更多相关文章

  1. 使用VS中自带的一键打包功能将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理

    本章将和大家简单分享下如何使用VS中自带的一键打包功能将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理. 一.注册并登录NuGet平台 NuGet官网:http ...

  2. 【程序包管理】篇章3:CentOS平台下软件包安装方法总结

    1.软件包安装前的学习:程序包管理的基础知识 2.程序包安装的方法介绍: rpm文件的二进制包安装:Linux程序包管理之rpm安装总结 yum安装:Linux程序包管理之yum源安装 链接:本地yu ...

  3. Linux程序包管理之yum及源代码安装

    第十六章.Linux程序包管理之yum及源代码安装 目录 yum介绍 yum配置文件 yum的repo配置文件中可用的变量 yum命令的使用 使用光盘作为本地yum仓库 如何创建yum仓库 编译安装的 ...

  4. 程序包管理rpm、yum与简单编译安装程序

    Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...

  5. Linux程序包管理rpm与yum

    Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...

  6. 十六、程序包管理之 rpm

    c语言程序的构建过程 1.程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接--> 可执行程序 开放源码:就是程序码,文本格式的源代码,写给人类看的程序 ...

  7. Linux:Day10 程序包管理

    YUM:yellow dog,Yellowdog Update Modifier yum repository:yum repo 存储了众多rpm包,以及包的相关的无数据文件(放置于特定目录下:rep ...

  8. Linux:Day9(下) 程序包管理

    API:Application Programming Interface POSIX:Portable OS 程序源代码 --> 预处理 --> 编译 --> 汇编 --> ...

  9. linux基础之程序包管理(rpm,yum)

    一.rpm 安装:rpm { -i | --install } [ install-options ] PACKAGE_FILE... -v: 显示安装时的详细信息 -vv: 显示许多难以阅读的调试信 ...

  10. 程序包管理rpm和yum

    Linux程序包管理: API:Application Programming Interface源码包 POSIX:Portable OS 程序源代码 --> 预处理 --> 编译 -- ...

随机推荐

  1. Java 19 新功能介绍

    点赞再看,动力无限. 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. Java 19 在2022 年 9 ...

  2. CodeTON Round 3 (C.差分维护,D.容斥原理)

    C. Complementary XOR 题目大意: 给你两个01串ab,问你是否可以通过一下两种操作在不超过n+5次的前提下将两个串都变为0,同时需要输出可以的操作方案 选择一个区间[l,r] 将串 ...

  3. Ubuntu 20.04 开启root权限登陆、网卡配置

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying Ubuntu 20.04 开启root权限登陆.网 ...

  4. ubuntu 22.04安装多个gcc

    sudo apt install gcc-9 g++-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 - ...

  5. 4.1IDA基础设置--《恶意代码分析实战》

    1.加载一个可执行文件 ① 选项一:当加载一个文件(如PE文件),IDA像操作系统加载器一样将文件映射到内存中. ② 选项三:Binary File:将文件作为一个原始的二进制文件进行反汇编,例如文件 ...

  6. 二阶段目标检测网络-Cascade RCNN 详解

    摘要 1,介绍 1.1,Faster RCNN 回顾 1.2,mismatch 问题 2,实验分析 2.1,改变IoU阈值对Detector性能的影响 2.2,提高IoU阈值的影响 2.3,和Iter ...

  7. 使用 sp_executesql 动态执行sql

    参考: https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-executesql ...

  8. 洛谷P1605例题分析

    迷宫 题目描述 给定一个 \(N \times M\) 方格的迷宫,迷宫里有 \(T\) 处障碍,障碍处不可通过. 在迷宫中移动有上下左右四种方式,每次只能移动一个方格.数据保证起点上没有障碍. 给定 ...

  9. 工业数据分析为什么要用FusionInsight MRS IoTDB?

    摘要:MRS IoTDB,它是华为FusionInsight MRS大数据套件中的时序数据库产品,在深度参与Apache IoTDB社区开源版的基础上推出的高性能企业级时序数据库产品. 本文分享自华为 ...

  10. [OpenCV实战]13 OpenCV中使用Mask R-CNN进行对象检测和实例分割

    目录 1 背景介绍 1.1 什么是图像分割和实例分割 1.2 Mask-RCNN原理 2 Mask-RCNN在OpenCV中的使用 2.1 模型下载 2.2 模型初始化 2.3 模型加载 2.4 输出 ...