开发现代化的.NetCore控制台程序:(4)使用GithubAction自动构建以及发布nuget包
前言
上一篇文章介紹了將 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 參數表示要運行作業的計算機類型:
- 
目標計算機可以是 GitHub 托管的運行器、大型運行器 或 自托管運行器。
 - 
你可以根據分配給運行器的標簽、其組成員身份或兩者的組合來定位運行器。
 - 
可以提供以下形式的
runs-on:- 單個字符串
 - 包含字符串的單個變量
 - 字符串數組、包含字符串的變量或兩者的組合
 - 使用 
group或label鍵的key: value對 
 - 
可以指定多個 runner ,比如
// 作業將僅在具有標簽 linux、x64 和 gpu 的自托管運行器上運行 runs-on: [self-hosted, linux, x64, gpu]本文是直接白嫖了 GitHub 托管的 runner ,就不贅述自己搭建 runner 的過程了,詳情參考文檔: https://docs.github.com/zh/actions/using-jobs/choosing-the-runner-for-a-job#choosing-self-hosted-runners
 
關于 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-latest、ubuntu-22.04、ubuntu-20.04
 | 
ubuntu-latest 標簽當前使用 Ubuntu 22.04 運行器映像。 | 
| Windows | 2 | 7 GB | 14 GB | 
windows-latest、windows-2022、windows-2019
 | 
windows-latest 標簽當前使用 Windows Server 2022 運行器映像。 | 
| macOS | 3 | 14 GB | 14 GB | 
macos-latest、macos-12、macos-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
搞定~
參考資料
- https://docs.github.com/zh/actions/quickstart
 - https://docs.github.com/zh/actions/automating-builds-and-tests/building-and-testing-net
 - https://docs.github.com/zh/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-a-registry-using-a-personal-access-token
 
總結
以上是生活随笔為你收集整理的开发现代化的.NetCore控制台程序:(4)使用GithubAction自动构建以及发布nuget包的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: es笔记六之聚合操作之指标聚合
 - 下一篇: Welcome to YARP - 5.