小编wil*_*ten的帖子

如何为nuget包设置Azure DevOps CI构建/发布管道(高级)

作为一家公司,我们正在使用Azure DevOps中的各种git repo创建NuGet包.测试和批准软件包后,应在Azure DevOps组织内共享.

通过使用Azure DevOps提要,我仍在努力设置构建/发布管道.在组织中共享包之前,包应首先可用于测试.

尽管Microsoft共享了许多建议和最佳实践,但我仍然找不到可行的解决方案.我将解释迄今为止我尝试过的解决方案:

解决方案A.

使用一个Feed,整个组织.测试完成后,软件包会自动推送到@local Feed并推送到@prelease和@release视图.管道使用如下:

  • 我们根据git-flow与开发,功能和主分支一起工作.
  • 在构建分支上触发CI构建
  • 具有预发布后缀的包被推送到@local Feed.
  • 通过在visual studio内的NuGet包管理器中启用预发布复选框,可以在其他工具中完成验收测试.
  • 接受包后,将创建一个版本并触发新版本.
  • 包被推了

问题解决方案A:

  • 接受包时,应将其提升为@release视图,但包名仍包含-pre后缀.
  • 当一个包被接受时,我认为不应该要求新版本,除非您可以从发布分支执行此操作吗?
  • 虽然该包只能在带有前缀的visual studio中看到,但可以使用后缀推送到@release视图.
  • 当一个包被提升时,它应该被复制和存储而没有任何后缀.

解决方案B.

为每个git存储库(由Microsoft推荐)使用专用订阅源,并从CI版本将NuGet包发布到此订阅源.每个包都发送到@local提要,没有任何后缀.测试并接受包时,包将被提升为@release视图.每个专用订阅源都配置为上游源(@release视图),发布视图中的包将在所有开发团队之间的组织中共享的公共订阅源中"缓存".

问题解决方案B:

  • 只有在完成单个部署/构建后,才会添加/缓存通过上游源可见的包.将包提升为@release视图时,您无法强制执行此操作.
  • 所有开发团队都必须在Visual Studio中订阅所有NuGet订阅源以安装最新版本的包.(30 git repos = 30个feed)

一般的问题:

  • 当我们只创建NuGet包时,git-flow是否可行?
  • 我们应该使用预发布包还是将它们保存在没有后缀的@ pre-release视图中?
  • 启动新构建以获得没有后缀的包是错误的.一旦预发布包被测试,它应该只被提升到发布视图.
  • 我们是否应该在CI构建中构建包并使用发布版本来发布包.我见过有人使用PowerShell和环境变量将包从一个版本升级到另一个版本.

我知道有很多问题,但我现在在这个问题上挣扎了很长时间.我希望有人能给我一些好的建议.

谢谢!

git continuous-integration nuget devops azure-devops

16
推荐指数
1
解决办法
1225
查看次数

如何在不使用nameOrConnectionString硬编码的情况下使用EF CodeFirst Migrations

如何在没有在所需的无参数构造函数的基础上对nameorconnectionstring进行硬编码的情况下使EF迁移工作?

EF迁移强制您向自定义dbcontext添加默认构造函数.在dbcontext的基础中,您必须提供nameorconnectionstring.

public class CustomDbContext : DbContextBase
    {
        public CustomDbContext ()
            : base("theconnectionstringwedontwanttoset") //hardcoded connection string
        {
        }
Run Code Online (Sandbox Code Playgroud)

我们需要对构造函数进行硬编码这一事实是我们无法使用的,因为在我们的客户端应用程序中,我们在没有配置文件的情况下工作,并且我们动态建立连接,因为我们连接到许多不同的数据库(服务器,本地sql compact).

在探索DbMigrationsConfiguration类之后,我找到了一个名为TargetDatabase的DbConnectionsInfo属性,可以在构造函数中设置它.但即使这个解决方案也行不通.这就是我做的:

public sealed class Configuration : DbMigrationsConfiguration<CustomDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            //Setting the TargetDatabase in the hope it will use it in the migration  
            TargetDatabase = new DbConnectionInfo("Server=xxx;Database=xxx;Trusted_Connection=True", "System.Data.SqlClient");
        }


public class MigrationInitializer : MigrateDatabaseToLatestVersion<CustomDbContext, Configuration>
    {
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到最终在DbMigrator中使用了Activator.CreateInstance,我期望从这个类中使用TargetDatabase.Create ...或者其他东西.

欢迎任何帮助或反馈.

提前致谢,

Wilko

migration entity-framework code-first dbcontext dbmigrator

5
推荐指数
1
解决办法
517
查看次数