我在詹金斯有一份工作(称之为BIGJOB); 几个构建步骤是使用参数化触发器插件触发其他作业的构建(称为SMALLJOB),然后等待它们完成.我需要做的是从SMALLJOB上的触发构建中检索工件.
最初,我以为我可以使用Copy Artifact Plugin从触发的SMALLJOB的"last build"中检索工件.当一次只运行一个SMALLJOB时,这确实可以正常工作.
但是我运行了多个BIGJOB,都触发了多个SMALLJOB,因此使用"last build"是不可靠的,同时两个SMALLJOB完成.
是否有更可靠的方法从特定下游作业中获取工件?如果我可以获得构建号,我可以使用curl来获取构件.
是否可以创建可以处理Web服务请求的C#EXE或Windows服务?显然,某种嵌入式,可能有限的Web服务器必须是EXE /服务的一部分.EXE /服务不必依赖于安装IIS.优选地,嵌入式Web服务可以处理HTTPS/SSL类型连接.
方案是这样的:客户想要在他们的公司机器上安装一个小代理(Windows服务).代理将有两个主要任务:1)随着时间的推移监视系统并收集某些数据,以及2)响应Web服务请求(SOAP -v-REST仍然被讨价还价)以进行数据收集或系统更改.客户喜欢Web服务API的概念,因此可以编写任意数量的客户端(使用任何语言)来访问企业计算机上运行的各种代理.他们希望安装相对轻松(安装.NET,某些程序集,服务,修改Windows防火墙,启动服务),而无需安装和配置IIS.
我知道我可以用Delphi做到这一点.但是如果可能的话,客户更愿意在C#中完成这项工作.
有什么建议?
我们使用Jenkins自动化我们的几个构建和测试过程.对于我们的一些流程,启动构建的工程师需要指定一个参数.但是该参数的可能和最佳值的范围在一天中变化.
我想要做的是让工程师指定一个值 - 如果他们知道最佳值 - 或者将其留空并通过早期构建步骤计算值.如果计算了该值,我希望计算构建步骤更新作业的参数值.这样,所有后续构建步骤都不必担心使用参数或计算它,它们只是使用参数.
看起来Groovy Script Plugin可能会这样做,但我看不出如何设置构建参数,只需获取它们.
我有一个Jenkins(Hudson)服务器设置,可以在各种从机上运行测试.我想要做的是重新配置从属设备(使用远程API),重新启动从属设备以使其更改生效,然后继续测试的其余部分.到目前为止我遇到了两个障碍:
这可能吗?到目前为止,我还没有找到使用Jenkins或其任何插件的方法.
编辑 - 进一步解释 我真的非常喜欢Jenkins奴隶架构.结合已有的插件,它可以很容易地将作业送到从站,运行,并且结果被撤回.并且能够选择任何匹配的从站允许自动作业/测试分发.
在我们的情况下,我们使用虚拟化(VMware)从机.编写一个脚本可以很容易地使Jenkins在需要在从属设备上运行时使用VMware PowerCLI来启动VM,然后将作业发送给它并将结果拉回来.都好.
除了每个测试的部分设置是以某种方式稍微重新配置虚拟机.禁用UAC,以其他用户身份登录,安装不同的驱动程序等 - 每个更改都要求在更改生效之前重新启动测试VM /从服务器.虽然我可以编写从属按需脚本(启动方法=通过在主服务器上执行命令启动从服务器)来处理此重新配置并重新启动,但必须在作业运行之前完成.这就是问题发生的地方 - 我无法提前配置从站,因为配置更改的类型取决于正在运行的作业,这仅在从站启动后发生.
可能的解决方案
1)在单个VM上使用多个从属实例.这不起作用 - 几个配置是互斥的,但Jenkins不知道.因此,它会尝试为一个作业启动一个从站配置,为另一个作业启动另一个从站 - 并且两个从站都将在同一个VM上.锁定作业不会阻止这种情况,因为从属启动不是工作的一部分.
2)(Optimal)一个构建步骤,允许作业知道它的从属连接可能被中断.构建步骤可能必须包含一些选项,以便Jenkins知道如何重新连接从属设备(将自动重新连接,Jenkins是否必须运行脚本,简单的SSH就足够了).构建步骤将处理从站的断开连接,忽略通常作业失败的断开连接,然后执行重新连接.从站恢复运行后,可以进行下一个构建步骤.如果从站在一定时间内无法重新连接,则可能是作业失败的超时.
**当前的解决方案** - 不是最优的
现在,我不能使用Jenkins的从属功能.相反,我使用一系列构建步骤 - 在master上运行 - 使用Windows和PowerShell脚本启动VM,进行配置并重新启动它.VM上运行了SSH服务器,我使用它将测试文件上传到测试VM,然后远程执行它们.然后将结果下载回Jenkins以便按作业处理.这个解决方案是功能性的 - 但比典型的Jenkins从属方法要多得多.此外,脚本针对单个VM; 我不能轻易使用一群奴隶.
我正在尝试在.NET 3.5中构建一个支持SOAP的C#服务 - 并显示WSDL和REST.
SOAP服务和WSDL生成很容易使用ServiceHost和BasicHttpBinding类.得到了工作,客户很高兴.
由于SOAP调用所有使用的简单参数,因此客户端开发人员为某些命令请求了REST接口.所以我改变了的ServiceHost类的WebServiceHost,根据需要添加WebInvoke和WebGet属性,增加了一个WebHttpBinding班,和宾果- REST和SOAP进行了两个工作了一个服务.很酷,改变一个界面,REST和SOAP都得到了新的东西.
但是有一个问题 - 不再生成WSDL.我无法浏览到http:// server/service?wsdl并获取WSDL文件.检查MSDN文档,这似乎是默认行为WebServiceHost.
问题:我可以覆盖此行为以便可以获取WSDL吗?没有与以前相同的URL - 它可以更改 - 但我只需要在服务中使用一些URL来为这些SOAP开发人员获取WSDL.
将作业标记为能够在同一节点上并发运行时,Jenkins会将@X(其中X是并发构建的编号)附加到普通工作空间目录,以获取新的唯一工作空间目录.通常,这一切都很好,但是我们遇到了一些工具,即使操作系统可以,也无法处理路径名中的@.
有没有办法将@字符更改为其他内容?说可能是双下划线(__)或其他什么?
我正在研究一个大量使用"cout << strSomething"的程序.将信息记录到控制台.我需要修改程序,以便所有控制台输出都转到控制台和文件.虽然我可以修改代码中的"cout <<",但是有几个大的第三方库也使用"cout <<"; 这些库由于其许可证而无法修改 - 因此修改对"cout <<"的所有引用都不是解决方案.此外,由于执行命令行的方式,不可能使用"wtee.exe".
我正在使用Visual Studio 2008.我已经在Google网上论坛上发帖了:将cout重定向到文件,这似乎完全符合我的要求.唯一的问题是代码不会编译.我在 - > overflow()和 - > sync()方法调用上得到C2248错误"无法访问受保护的成员".
有谁知道如何编译这段代码?或者同时将cout重定向到控制台和文件的另一种方法?
Jenkins是否有一种简单的方法可以列出所有标记为永久保留的构建?然后,理想情况下,只需单击一下即可将构建标记为永久保留或立即删除它?
在我们的过程中,如果构建涉及某种特定类型的故障,我们将构建标记为永久保留; 这是为了防止Jenkins随着时间的推移自动删除.我需要一种简单的方法来获取所有那些永久构建的列表,这样它们就不会占用我们所有的磁盘空间.
我编写了一个相当简单的小型C#Web服务,通过WCF从独立的EXE托管.代码 - 有点简化 - 看起来像这样:
namespace VMProvisionEXE
{
class EXEWrapper
{
static void Main(string[] args)
{
WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.None;
Uri baseAddress = new Uri("http://bernard3:8000/VMWareProvisioning/Service");
ServiceHost selfHost = new ServiceHost(typeof(VMPService), baseAddress);
try
{
selfHost.AddServiceEndpoint(typeof(IVMProvisionCore), myBinding, "CoreServices");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy12;
selfHost.Description.Behaviors.Add(smb);
// Add MEX endpoint
selfHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
selfHost.Open();
Console.WriteLine("The service is ready.");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
其余的C#代码; 上面的类VMPService实现了VMProvisionCore.IVMProvisionCore.
namespace VMProvisionCore
{
[ServiceContract(Namespace = "http://Cisco.VMProvision.Core", ProtectionLevel = System.Net.Security.ProtectionLevel.None)]
public interface IVMProvisionCore
{ …Run Code Online (Sandbox Code Playgroud) 我正在考虑从Delphi 2007(由我的雇主购买)转移到Delphi XE Starter Edition(由我购买,因为我的雇主正在远离Delphi)进行一些开源/业余爱好工作.所以,价格肯定是一个问题.
Delphi XE Starter Edition似乎没有集成的DUnit东西.是否有任何测试框架的建议可以与XE Starter一起使用?框架必须是可自动化的; 例如,它必须可以由Hudson或CruiseControl等持续集成系统运行.当然,免费是最好的.直接集成到IDE中也很方便,但不是必需的.
什么是更新作为构建一部分的文件内容的正确SCONS方法?
我使用SCONS来构建一个相当大的项目.但是为了一个简单的问题,假设它看起来像这样:
env.Program("foo", ["foo.c", "version.c"])
Run Code Online (Sandbox Code Playgroud)
在某些构建条件下,有必要使用新信息更新构建中的一个CPP文件的内容 - 实际上是版本信息.在上面的例子中,我需要修改"version.c"的内容.我想我可以通过以下示例很好地做到这一点:
env.Command(target="version.c", source=[], action=PythonFunctionToUpdateContents)
env.Program("foo", ["foo.c", "version.c"])
Run Code Online (Sandbox Code Playgroud)
PythonFunctionToUpdateContents将使用target [0]作为文件名,打开它,查找某些特定文本,更改它,将更改写回同一文件.不幸的是,上面的示例不起作用.SCONS在构建之前会自动删除目标文件,因此我的"version.c"文件在更新之前就被删除了.
我尝试在env.Command()调用中将目标和源设置为同一个文件,但这只是创建一个依赖循环.
我知道我可以通过让SCONS生成ENTIRE version.c文件来解决这个问题,但这不合适,因为version.c包含许多其他代码,这些代码可以作为正常开发的一部分进行更改.