快速上手基于 BaGet 的脚本自动化构建 .net 应用打包

2024-09-07 02:52

本文主要是介绍快速上手基于 BaGet 的脚本自动化构建 .net 应用打包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

脚本自动化打包 .net 应用

    • 1. BaGet 介绍
      • 1.2 主要特点
      • 1.3 使用说明
      • 1.3.1 安装与部署
        • 1.3.1.1 Docker 部署
        • 1.3.1.2 手动部署
        • 1.3.1.3 配置
    • 2. 应用举例
      • 2.1 推送包
      • 2.2 下载包
    • 3. 配置信息
      • 3.1 基本配置
      • 3.2 其他配置选项
    • 4. 脚本编写
      • 4.1 编写 PowerShell 脚本
      • 4.2 编写 Bash 脚本
      • 4.3 运行脚本
    • 总结

本篇文章我们介绍了如何使用脚本,自动化构建 .net 应用的 nuget 包,并推送到指定的 nuget 服务仓库;

1. BaGet 介绍

BaGet 是一个开源的 NuGet 服务器,旨在提供轻量级、高性能且易于部署的 NuGet 包管理解决方案。它支持多种存储后端(如 Azure Blob StorageAmazon S3Local File Storage System/本地文件系统 等),并且具有高度可定制性和扩展性。

BaGet 源码托管地址为:https://github.com/loic-sharma/BaGet

1.2 主要特点

BaGet 是基于 .NET Core 开发的 NuGet 包服务器应用组件,因此需要运行环境安装 .NET Core SDKBaGet 具有以下特性:

  • 轻量级:BaGet 是一个轻量级的 NuGet 服务器,适合小型到中型项目。
  • 高性能:利用 ASP.NET CoreSQLite/PostgreSQL 提供高性能的服务。
  • 配置持久化:支持多种数据库类型,支持离线缓存。
  • 易于部署:支持 Docker 容器化部署,方便快速搭建。
  • 高度可定制:支持多种存储后端(包括云存储)和配置选项。
  • 安全:支持 HTTPSAPI 密钥认证。

1.3 使用说明

1.3.1 安装与部署

1.3.1.1 Docker 部署
# 拉取镜像
docker pull jkempf/baget
# 运行容器
docker run -p 5000:5000 --name baget -d jkempf/baget

这将启动一个默认配置的 BaGet 实例,并映射端口 5000 到宿主机。

1.3.1.2 手动部署
# 下载源码
git clone https://github.com/jkempf/baget.git
# 进入代码目录
cd baget
# 安装依赖
dotnet restore
# 构建项目
dotnet publish -c Release -o ./publish
# 运行应用
dotnet ./publish/BaGet.dll
1.3.1.3 配置
  • 使用环境变量配置
# 设置环境变量
export BAGET__STORAGE__TYPE=FileSystem
export BAGET__STORAGE__PATH=/path/to/packages
export BAGET__DATABASE__CONNECTION_STRING="Data Source=/path/to/baget.db"
export BAGET__API_KEY=your-api-key
# 运行应用
dotnet ./publish/BaGet.dll
  • 使用 JSON 配置文件
# 创建 json 配置文件
{"Storage": {"Type": "FileSystem","Path": "/path/to/packages"},"Database": {"ConnectionString": "Data Source=/path/to/database.db"},"ApiKey": "your-api-key" // 此处配置 API 安全密钥
}
# 指定配置文件路径
dotnet ./publish/BaGet.dll --configuration /path/to/config.json

2. 应用举例

2.1 推送包

# 生成 .nupkg 文件
dotnet pack MyProject.csproj
# 推送 .nupkg 文件
dotnet nuget push MyProject.1.0.0.nupkg --source http://localhost:5000/v3/index.json --api-key your-api-key

2.2 下载包

# 安装包
dotnet add package MyProject --source http://localhost:5000/v3/index.json --version 1.0.0
# 恢复包(还原包)
dotnet restore --source http://localhost:5000/v3/index.json

3. 配置信息

3.1 基本配置

  • 基本配置说明
1. 存储类型:
- `FileSystem`:使用本地文件系统作为存储后端。
- `AzureBlobStorage`:使用 `Azure Blob Storage` 作为存储后端。
- `AmazonS3`:使用 `Amazon S3` 作为存储后端。2. 数据库连接字符串:
- 默认使用 `SQLite` 数据库。
- 可以使用 `PostgreSQL` 数据库。3. `API` 密钥:
- 用于鉴权的 `API` 密钥。

说明:示例配置文件同上。

3.2 其他配置选项

  • Log 日志配置
{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}}
}
  • HTTPS 配置
{"Kestrel": {"Endpoints": {"Http": {"Url": "http://*:5000"},"Https": {"Url": "https://*:5001","Certificate": {"Path": "/path/to/certificate.pfx","Password": "certificate-password"}}}}
}

关于 BaGet 更多配置信息,请查看:https://loic-sharma.github.io/BaGet/configuration/

4. 脚本编写

下面我们实现两种方式的脚本编写,并给出详细的解释说明。

4.1 编写 PowerShell 脚本

  • 文件 push_packages.ps1 内容编写如下:
# 定义要推送的目录和 NuGet 服务器 URL
$directoryPath = "./output/packages"
$nugetServerUrl = "https://localhost:5000/v3/index.json"
$apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"# 获取目录中的所有 .nupkg 文件
$nupkgFiles = Get-ChildItem -Path $directoryPath -Filter *.nupkg# 推送每个 .nupkg 文件到 NuGet 服务器
foreach ($nupkgFile in $nupkgFiles) {Write-Host "Pushing $($nupkgFile.FullName) to $nugetServerUrl"try {dotnet nuget push $nupkgFile.FullName --source $nugetServerUrl  --api-key $apiKey --skip-duplicate} catch {Write-Host "Failed to push $($nupkgFile.FullName): $_"}
}
  • 脚本解释说明:

这段 PowerShell 脚本用于将指定目录中的所有 .nupkg 文件推送到指定的 NuGet 服务器。
以下是脚本的详细解释:

1. 变量定义
$directoryPath:
- 定义要推送的 .nupkg 文件所在的目录路径。
- 示例值:"./packages"$nugetServerUrl:
- 定义目标 NuGet 服务器的 URL。
- 示例值:"https://localhost:5000/v3/index.json"$apiKey:
- 定义用于访问 NuGet 服务器的 API 密钥。
- 示例值:"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"2. 获取 `.nupkg` 文件
Get-ChildItem:
- 使用 Get-ChildItem 命令获取 $directoryPath 目录下的所有 .nupkg 文件。
- 参数 -Path 指定目录路径。
- 参数 -Filter 指定文件过滤器(.nupkg)。$nupkgFiles = Get-ChildItem -Path $directoryPath -Filter *.nupkg3. 遍历 `.nupkg` 文件
foreach 循环:
- 遍历 $nupkgFiles 中的每个 .nupkg 文件。4. 推送 `.nupkg` 文件
Write-Host:
- 输出正在推送的文件名和目标 URL。
- Write-Host "Pushing $($nupkgFile.FullName) to $nugetServerUrl"5. 错误处理
try-catch 块:
- 尝试使用 dotnet nuget push 命令将 .nupkg 文件推送到 NuGet 服务器。
- 参数 --source 指定 NuGet 服务器的 URL。
- 参数 --api-key 指定 API 密钥。
- 参数 --skip-duplicate 表示如果文件已经存在,则跳过推送。catch 错误处理:
- 如果推送过程中发生错误,使用 catch 块捕获异常并输出错误信息。
catch {Write-Host "Failed to push $($nupkgFile.FullName): $_"
}

通过这种方式,你可以自动化地将多个 .nupkg 文件推送到 NuGet 服务器,提高工作效率。

4.2 编写 Bash 脚本

  • 文件 push_packages.bash 内容编写如下:
#!/bin/bash# 定义要推送的目录和NuGet服务器URL
directory_path="./output/packages"
nuget_server_url="https://localhost:5000/v3/index.json"
api_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"# 获取目录中的所有 .nupkg 文件
nupkg_files=$(find "$directory_path" -type f -name "*.nupkg")# 推送每个 .nupkg 文件到 NuGet 服务器
for nupkg_file in $nupkg_files; doecho "Pushing $nupkg_file to $nuget_server_url"if dotnet nuget push "$nupkg_file" --source "$nuget_server_url" --api-key "$api_key" --skip-duplicate; thenecho "Successfully pushed $nupkg_file"elseecho "Failed to push $nupkg_file"fi
done
  • 脚本解释说明:
1. 脚本声明:
#!/bin/bash:指定使用 Bash 解释器。2. 变量定义:
directory_path:定义要推送的 .nupkg 文件所在的目录路径。
nuget_server_url:定义目标 NuGet 服务器的 URL。
api_key:定义用于访问 NuGet 服务器的 API 密钥。3. 获取 `.nupkg` 文件:
使用 find 命令获取 $directory_path 目录下的所有 .nupkg 文件。
-type f:指定只查找文件。
-name "*.nupkg":指定文件名匹配模式。nupkg_files=$(find "$directory_path" -type f -name "*.nupkg")4. 遍历 `.nupkg` 文件
使用 for 循环遍历 $nupkg_files 中的每个 .nupkg 文件。5. 推送 `.nupkg` 文件
使用 dotnet nuget push 命令将 .nupkg 文件推送到 NuGet 服务器。
参数 --source 指定 NuGet 服务器的 URL。
参数 --api-key 指定 API 密钥。
参数 --skip-duplicate 表示如果文件已经存在,则跳过推送。6. 错误处理
使用 if 语句检查 dotnet nuget push 命令的返回值。
如果命令成功执行,输出成功信息。
如果命令失败,输出失败信息。

4.3 运行脚本

说明:此处以运行 push_packages.bash 文件为例;

  1. 保存脚本文件

将上述脚本保存为一个文件,例如 push_packages.bash

  1. 赋予执行权限

使用 chmod 命令给脚本文件添加执行权限:

chmod +x push_packages.bash
  1. 运行脚本

linux 终端中运行脚本:

./push_packages.bash

这样,你就可以在 Linux 环境下使用 Bash 脚本来推送 .nupkg 文件到 NuGet 服务器了。

总结

BaGet 是一个轻量级且高性能的 NuGet 服务器,支持多种存储后端和配置选项。通过简单的部署和配置,你可以轻松搭建自己的 NuGet 服务器,并进行包的推送和下载。希望这些信息对你有所帮助!

这篇关于快速上手基于 BaGet 的脚本自动化构建 .net 应用打包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143848

相关文章

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex