日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時(shí)間:2023/11/16 asp.net 48 coder
生活随笔 收集整理的這篇文章主要介紹了 开发现代化的.NetCore控制台程序:(4)使用GithubAction自动构建以及发布nuget包 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

上一篇文章介紹了將 nuget 包發(fā)布到 Github Packages 上。

本文更進(jìn)一步,使用 GitHub Action 搭建 CI/CD 流水線,進(jìn)行 nuget 的自動(dòng)構(gòu)建和發(fā)布。??

GitHub Action 用起來和之前的 Gitlab CI/CD 是差不多的,可以使用 GitHub 提供的 runner ,也可以將自己的服務(wù)器配置為 runner。

詳情可參考我之前寫的:持續(xù)集成指南:GitLab 的 CI/CD 工具配置與使用

首先創(chuàng)建一個(gè) token

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

上一篇文章也有介紹,不再贅述

這個(gè) token 要保存好,下次打開這個(gè)頁面就看不到了,只顯示一次。

配置 GitHub Secret

敏感信息不適合保存在代碼里,這里 GitHub 提供了 Secret and variables 功能

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

把我們創(chuàng)建的 token 添加到 Action 的 secret 里面

我這里命名為 TOKEN

后續(xù)在 GitHub Workflow 配置里面使用的時(shí)候是這樣

${{secrets.TOKEN}}

編寫 workflows 配置

在項(xiàng)目根目錄下新建 .github/workflows 目錄

PS: 可以直接在 GitHub 的網(wǎng)頁上執(zhí)行這個(gè)操作,點(diǎn) Add File ,文件名里輸入 / 即可自動(dòng)識(shí)別為目錄

接下來就開始編寫 workflow 配置文件了,跟之前的 Gitlab CICD 配置差不多,也是 yaml 格式

這里我創(chuàng)建一個(gè)名為 publish-nuget.yml 的文件

# 發(fā)布新的 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

一些配置的介紹

這個(gè)文件里我配置了名為 publish-nuget-packages 的 job 用于構(gòu)建 nuget 和推送到 GitHub Packages

文件開頭的 on 表示這個(gè) workflow 的觸發(fā)條件,可以設(shè)置為只有 master 分支更新的時(shí)候才執(zhí)行,配置如下

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

jobs.<job_id>.runs-on 參數(shù)表示要運(yùn)行作業(yè)的計(jì)算機(jī)類型:

  • 目標(biāo)計(jì)算機(jī)可以是 GitHub 托管的運(yùn)行器、大型運(yùn)行器 或 自托管運(yùn)行器。

  • 你可以根據(jù)分配給運(yùn)行器的標(biāo)簽、其組成員身份或兩者的組合來定位運(yùn)行器。

  • 可以提供以下形式的 runs-on

    • 單個(gè)字符串
    • 包含字符串的單個(gè)變量
    • 字符串?dāng)?shù)組、包含字符串的變量或兩者的組合
    • 使用 grouplabel 鍵的 key: value 對(duì)
  • 可以指定多個(gè) runner ,比如

    // 作業(yè)將僅在具有標(biāo)簽 linux、x64 和 gpu 的自托管運(yùn)行器上運(yùn)行
    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

關(guān)于 Setup .NET 的 step,通過這個(gè)參數(shù) uses: actions/setup-dotnet@v3 設(shè)置了運(yùn)行環(huán)境,同理 GitHub 也提供了 Nodejs / Gradle 之類的其他環(huán)境,不過不在本文的討論范圍之內(nèi)哈…

關(guān)于 GitHub 托管的 runner

如果使用 GitHub 托管的運(yùn)行器,每個(gè)作業(yè)將在 runs-on 指定的運(yùn)行器映像的新實(shí)例中運(yùn)行。

可用的 GitHub 托管的運(yùn)行器類型包括:

虛擬機(jī) 處理器 (CPU) 內(nèi)存 (RAM) 存儲(chǔ) (SSD) 操作系統(tǒng)(YAML 工作流標(biāo)簽) 說明
Linux 2 7 GB 14 GB ubuntu-latestubuntu-22.04ubuntu-20.04 ubuntu-latest 標(biāo)簽當(dāng)前使用 Ubuntu 22.04 運(yùn)行器映像。
Windows 2 7 GB 14 GB windows-latestwindows-2022windows-2019 windows-latest 標(biāo)簽當(dāng)前使用 Windows Server 2022 運(yùn)行器映像。
macOS 3 14 GB 14 GB macos-latestmacos-12macos-11 macos-latest 工作流標(biāo)簽?zāi)壳笆褂?macOS 12 運(yùn)行器映像。
macOS 4 14 GB 14 GB macos-13 [Beta 版] 不可用

最后我想吐槽一下 nuget 的推送機(jī)制,我明明在 dotnet nuget add source 里已經(jīng)制定了 token 了,push 的時(shí)候卻還得再指定一次…

執(zhí)行 Action

搞定之后提交代碼

即可在 Action 頁面看到執(zhí)行結(jié)果

完美,解放雙手~ 還能白嫖 Github 的 runner 算力??

本文的前半部分都是通過 GitHub Action 將 nuget 包推送到 GitHub Packages ,這樣安裝時(shí)需要從 Github 的源進(jìn)行安裝。

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

創(chuàng)建 APIKey

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

可以選有效期,最長是 365 天,記得到期前更新 token ,不然所有流水線就失效了。

創(chuàng)建之后點(diǎn)擊 Copy 復(fù)制,這個(gè)和 GitHub 類似,都是只會(huì)顯示一次 token ,下次訪問就無了,所以請(qǐng)保存好。

添加 GitHub Action Secret

和前面的操作是一樣的

我添加了一個(gè),名字是 NUGET_GALLERY_TOKEN

修改 workflow

修改一下 workflow 的配置

在最后增加一個(gè) 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

默認(rèn)的 source 就是 nuget.org ,也可以不指定。

使用以下命令可以列出當(dāng)前的 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

總結(jié)

以上是生活随笔為你收集整理的开发现代化的.NetCore控制台程序:(4)使用GithubAction自动构建以及发布nuget包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。