我在摆弄一些假的和Paket(在F#上(以及Jenkins,我真的不确定我知道我在做什么,但我知道我想做什么。
简短的描述是,我希望构建服务器针对引用的包构建一系列相关服务,但该包有不同的风格(但共享相同的基本命名空间/模块名称(。
长篇描述;我有一个服务家族,位于外部API即。它们都是参考一些外部包,并通过模块等访问它。
例如
ServiceA.fsprj
...
let f (x : ExternalApi.Foo) = ....
---------------
ServiceB.fsprj
...
let g (x : ExternalApi.Foo) = ....
开发者可能会针对最常见的口味进行开发,比如ExternalApiVanilla。开发人员将使用Paket和Fake作为构建工具,并使用Jenkins。
当代码被签入时,我希望构建服务尝试针对香草口味构建它。。。但也可以对抗巧克力、草莓和香蕉。
口味不是版本号意义上的"版本",它们是不同的产品,有自己的nuget包装。因此,我想(不知何故(我想用api包的名称参数化一个包含所有作业的jenkins文件夹,将其传递到构建脚本中,然后让构建脚本交换工程师引用和引用参数的内容。
当然,有些编译会失败,我们必须开发不同的服务变体来处理API的一些变体,但我们90%的东西都适用于所有版本,我们只需要一种自动的方法来检查构建,然后创建新的服务和作业变体来处理它们。
顺便说一句,我们正在用C#和cake/nuget做一些事情,但通过传递nuget文件夹来控制版本控制,并强制构建找到1个风格的特定版本。。。我理解这一点,尽管我无法写出它,但我想更进一步,用一个不同的引用替换引用本身。
-------------
我会尝试查看构建脚本中的paket.dependences/paket引用文件,删除现有的引用,并从shell和paket中添加jenkins定义的引用。我不特别喜欢它,我依赖于这些文件的格式,我希望这将是主流
我已经解决了这个问题,至少在cake+nuget的上下文中(同样的解决方案也将适用(,只需搜索将cake脚本中的包引用(使用XDocument(替换为作业参数中设置的引用参数。
我现在将在这个构建的伪版本中实现它,尽管我可能只是简单地放弃paket在一起