前言

上一篇文章介绍了将 nuget 包发布到 Github Packages 上。

本文更进一步,使用 GitHub Action 搭建 CI/CD 流水线,进行 nuget 的自动构建和发布。

GitHub Action 用起来和之前的 Gitlab CI/CD 是差不多的,可以使用 GitHub 提供的 runner ,也可以将自己的服务器配置为 runner。

详情可参考我之前写的:持续集成指南:GitLab 的 CI/CD 工具配置与使用

首先创建一个 token

地址: https://github.com/settings/tokens

上一篇文章也有介绍,不再赘述

这个 token 要保存好,下次打开这个页面就看不到了,只显示一次。

配置 GitHub Secret

敏感信息不适合保存在代码里,这里 GitHub 提供了 Secret and variables 功能

地址: https://github.com/Deali-Axy/fluent-dotnet-console/settings/secrets/actions

把我们创建的 token 添加到 Action 的 secret 里面

我这里命名为 TOKEN

后续在 GitHub Workflow 配置里面使用的时候是这样

${{secrets.TOKEN}}

编写 workflows 配置

在项目根目录下新建 .github/workflows 目录

PS: 可以直接在 GitHub 的网页上执行这个操作,点 Add File ,文件名里输入 / 即可自动识别为目录

接下来就开始编写 workflow 配置文件了,跟之前的 Gitlab CICD 配置差不多,也是 yaml 格式

这里我创建一个名为 publish-nuget.yml 的文件

# 发布新的 nuget 包

name: publish-nuget
run-name: ${{ github.actor }} is publishing a nuget package on: [push] jobs:
publish-nuget-packages: runs-on: ubuntu-latest steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 7.0.x
- name: Restore dependencies
run: dotnet restore ./src/Templates/FluentConsole.Templates.csproj
- name: Build
run: dotnet build --no-restore -c Release ./src/Templates/FluentConsole.Templates.csproj
- name: Create the package
run: dotnet pack -c Release ./src/Templates/FluentConsole.Templates.csproj
- name: Add nuget source
run: dotnet nuget add source --username DealiAxy --password ${{ secrets.TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/Deali-Axy/index.json"
- name: Publish the package to Github Packages
run: dotnet nuget push ./src/Templates/bin/Release/*.nupkg --api-key ${{ secrets.TOKEN }} --source github --skip-duplicate

一些配置的介绍

这个文件里我配置了名为 publish-nuget-packages 的 job 用于构建 nuget 和推送到 GitHub Packages

文件开头的 on 表示这个 workflow 的触发条件,可以设置为只有 master 分支更新的时候才执行,配置如下

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]

jobs.<job_id>.runs-on 参数表示要运行作业的计算机类型:

关于 Setup .NET 的 step,通过这个参数 uses: actions/setup-dotnet@v3 设置了运行环境,同理 GitHub 也提供了 Nodejs / Gradle 之类的其他环境,不过不在本文的讨论范围之内哈…

关于 GitHub 托管的 runner

如果使用 GitHub 托管的运行器,每个作业将在 runs-on 指定的运行器映像的新实例中运行。

可用的 GitHub 托管的运行器类型包括:

虚拟机 处理器 (CPU) 内存 (RAM) 存储 (SSD) 操作系统(YAML 工作流标签) 说明
Linux 2 7 GB 14 GB ubuntu-latestubuntu-22.04ubuntu-20.04 ubuntu-latest 标签当前使用 Ubuntu 22.04 运行器映像。
Windows 2 7 GB 14 GB windows-latestwindows-2022windows-2019 windows-latest 标签当前使用 Windows Server 2022 运行器映像。
macOS 3 14 GB 14 GB macos-latestmacos-12macos-11 macos-latest 工作流标签目前使用 macOS 12 运行器映像。
macOS 4 14 GB 14 GB macos-13 [Beta 版] 不可用

最后我想吐槽一下 nuget 的推送机制,我明明在 dotnet nuget add source 里已经制定了 token 了,push 的时候却还得再指定一次…

执行 Action

搞定之后提交代码

即可在 Action 页面看到执行结果

完美,解放双手~ 还能白嫖 Github 的 runner 算力

推送包到官方的 NuGet Gallery

本文的前半部分都是通过 GitHub Action 将 nuget 包推送到 GitHub Packages ,这样安装时需要从 Github 的源进行安装。

接下来研究一下如何推送到官方的 NuGet Gallery

创建 APIKey

地址: https://www.nuget.org/account/apikeys

可以选有效期,最长是 365 天,记得到期前更新 token ,不然所有流水线就失效了。

创建之后点击 Copy 复制,这个和 GitHub 类似,都是只会显示一次 token ,下次访问就无了,所以请保存好。

添加 GitHub Action Secret

和前面的操作是一样的

我添加了一个,名字是 NUGET_GALLERY_TOKEN

修改 workflow

修改一下 workflow 的配置

在最后增加一个 step

- name: Publish the package to Nuget Gallery
run: dotnet nuget push ./src/Templates/bin/Release/*.nupkg --api-key ${{ secrets.NUGET_GALLERY_TOKEN }} --source nuget.org --skip-duplicate

默认的 source 就是 nuget.org ,也可以不指定。

使用以下命令可以列出当前的 source 列表。

dotnet nuget list source

搞定~

参考资料

开发现代化的.NetCore控制台程序:(4)使用GithubAction自动构建以及发布nuget包的更多相关文章

  1. jenkins 整合maven,svn(配置钩子程序实现提交代码自动构建),tomcat实现热部署(windows+linux分别实现)

    springboot : https://blog.csdn.net/zjh_746140129/article/details/80904876 1 准备工作: (1)运行jenkins的tomca ...

  2. Mac/Windows开发跨平台.NET Core 控制台程序

    自从微软开始在Github上开源搞.NET Core后,.NET的跨平台逐渐就成真了.多年使用各种语言,说实话还是csharp用起来最舒服.不过现在的工作环境里使用它的机会比较少,大部分时候只是用来写 ...

  3. windows下建立netcore控制台程序,然后传送到centos7下的docker容器里运行

    1.首先,在window下用vs2017开发netcore控制台项目. 2.把建立好的项目传送到centos7下面的容器里. docker cp sharefoldersforwindows/ 359 ...

  4. 【Azure DevOps系列】Azure DevOps构建并发布Nuget程序包

    在Azure DevOps中,管道可以用来构建解决方案,O(∩_∩)O哈哈~快万能了,本章主要介绍如何创建Nuget包并且将其发布到Nuget服务器的过程. 前面我创建了一个非常简单的类库,这边我不做 ...

  5. NetCore控制台程序-使用HostService和HttpClient实现简单的定时爬虫

    .NetCore承载系统 .NetCore的承载系统, 可以将长时间运行的服务承载于托管进程中, AspNetCore应用其实就是一个长时间运行的服务, 启动AspNetCore应用后, 它就会监听网 ...

  6. 省市县树形结构打印-.netCore控制台程序

    using CityJson;using Dapper;using Newtonsoft.Json;{ using (var db = DbHelper.Db()) { //数据格式 //code_p ...

  7. 开发.NET Core NuGet包并实现CI/CD

    实际开发中我们需要对一些公共类库进行开发,并基于Jenkins进行CI/CD(CI:持续集成,CD:持续部署),其他项目通过NuGet引用.上文讲述了如何搭建本地NuGet服务器并发布NuGet包,这 ...

  8. 初识Visual Studio Code 一.使用Visual Studio Code 开发C# 控制台程序

    原文:初识Visual Studio Code 一.使用Visual Studio Code 开发C# 控制台程序 1. 安装.NET Core 安装包下载地址:https://www.microso ...

  9. VS开发】如何给console控制台程序更换应用程序图标

    [VS开发]如何给console控制台程序更换应用程序图标 标签:[VS开发] 实际上非常简单,就是增加一个图标资源,在资源视图里,然后修改其ID为IDC_MAINFRAME,然后编译生成即可! 20 ...

  10. 使用.NetCore 控制台演示 熔断 降级(polly)

    1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...

随机推荐

  1. Java并发(十三)----共享存在的问题

    1.小故事 老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快 小南.小女(不同的线程)来使用这个算盘来进行一些计算,并按照时间给老王支付费用 但小南不能一天24小时使用算盘 ...

  2. js的一些小问题集合

    1.等于号的应用 function reverse(){ var checkbox = document.getElementsByName("hobby"); for (let ...

  3. Node: 将时间戳转换成日期并分组

    // 对时间戳按日期进行分组 let moment = require('moment') let timestamp_array = [ 1645059333000, 1613523333000, ...

  4. 解决pyinstaller生成的exe文件,在部分电脑无法运行的问题

    下载vc_redist.x64.exe并在不能运行的电脑上运行即可. vc_redist.x64.exe的作用:一款Visual C++的运行库,里面包含了一些Visual C++的库函数.Visua ...

  5. UE源码分析:Slate 类鼠标输入处理

    序言 UE4.25版本 本章看一下UE的 "类鼠标"输入处理(其实就是鼠标和触摸的输入,我也没找到专门的术语来代指,英文UE用的是PointerXXX),主要是按下.移动.抬起等相 ...

  6. 2023牛客暑期多校训练营5 ABCDEGHI

    比赛链接 A 题解 知识点:莫队,树状数组. 区间询问显然可以离线莫队,考虑端点移动对答案的影响. 不妨先考虑右端点右移一个位置,对答案的改变.假设右端点右移后在 \(r\) ,我们先要知道 \([l ...

  7. Scala的基本使用

    @ 目录 Scala的基本使用 一.基础语法 1.1 变量 1.1.1 var和val 1.1.2 自动类型推断 1.2 数据类型 1.2.1 基础数据类型 1.2.2 增强数据类型 1.3 操作符 ...

  8. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-11-playwright操作iframe-上篇

    1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了.但是还是有小伙伴或者童 ...

  9. IOS App内嵌H5 swiper 轮播出现卡顿白屏闪烁

    话说在前头:前端开发同学遇到这个问题不慌,因为接下来你要踩的坑我都帮你们踩完了,所以有了这一篇博客.希望能帮到你 轮播组件:swiper@4.5.1 (4x稳定的最后一个版本) 设备:ios版本15x ...

  10. win10安装Redis5、配置自启动教程

    前提条件:首先我安装的是压缩包版的Redis5.0.14.1,下载链接为 https://github.com/tporadowski/redis/releases 安装教程 下载软件并解压 进入软件 ...