这有点痛苦,因为我现在没有在我面前的代码,但我会尝试解释.
我有一个简单的C#应用程序启动一个Ruby脚本(它做了其他一些事情,所以它生成一个批处理文件并执行它).
我正在使用C#进程对象,并设置以下redirectstandardoutput = true redirectstandarderror = true UseShellExecute = false CreateNoWindow = true(那里有可靠的向后逻辑!)
然后我创建两个线程并为错误和输出流轮询ReadLine(),等待它们在我调用WaitForExit()之前完成.
现在,无论我做什么,当我重定向输出时,我的Ruby脚本都无法调用系统("xcopy ...")命令(没有生成错误,它只是不复制).它也不会复制我要求复制的其他文件.
如果我将两个流定向到一个线程,其中一个线程只重定向其中一个线程并且只调用ReadToEnd(),就会发生这种情况.
只有将redirectstandardoutput和redirectstandarderror设置为false时,它才能正常工作.
我在这里完全失败了.我想也许输出流正在填满,但我无法想象为什么如果我正在调用ReadLine(我需要读取行,所以我可以解析每一行,只向最终用户提供相关的).我也认为从线程C#进程调用dos命令可能会导致问题.
有谁知道这里会发生什么?我应该说我在VS .net 2005上,我认为它是.Net Framework 2.0.
我可能正朝着错误的方向前进,所以任何帮助都会受到赞赏.
我有一个Ruby脚本,其中包括启动可执行文件.我想启动这个可执行文件 - 当前使用系统""触发 - 然后继续使用脚本.当脚本完成时,我希望它退出但保持可执行文件正在运行.
最初我有以下内容
# Do some work
# Start the executable
system("executable_to_run.exe")
# Continue working
Run Code Online (Sandbox Code Playgroud)
但是executable_to_run.exe是一个阻塞可执行文件,系统""将不会退出,直到可执行文件完成运行(我不希望它)
所以我现在有这样的事情(大幅削减)
# Do some work
# Start the executable on it's one thread
Thread.new do
system("executable_to_run.exe")
end
# Continue working
Run Code Online (Sandbox Code Playgroud)
这很有效,因为我的脚本可以在线程在后台运行可执行文件时继续运行.不幸的是,当我的脚本退出时,可执行线程仍在运行,并且在线程退出之前不会退出.如果我杀死可执行文件,则线程退出并退出脚本.
所以我需要做的是触发"executable_to_run.exe"并让它在后台运行.
我在Windows上使用Ruby 1.8.7,这意味着fork未实现.我无法升级到1.9,因为我需要首先解决内部和外部团队依赖关系(并且不会很快完成).
我试过了
这是我可以在Ruby中做的事情,我只是遗漏了一些东西,或者我有问题,因为我不能使用Fork?
提前致谢
我正试图在Jenkins的Multibranch Pipelines作业中自动触发'Branch Indexing'.
目前,只有一种方法似乎实际工作,即轮询,但我无法做到这一点,无论如何轮询是一个糟糕的解决方案.
该插件不支持"远程触发器构建(例如,从脚本)"(选项未保存),因此我无法通过推送等Web挂钩触发它.
我尝试在repo上创建一个"触发器"自由式构建,但是"构建后操作 - 构建其他项目"声称Multibranch Pipeline项目不是可构建的项目.
如果轮询是我能做到这一点的唯一方法,那么我需要禁用自动SCM触发(否则我们在重新索引时会得到重复的构建)因为我需要在分支项目上启用web钩子触发.
但这不起作用,因为我通过分支项目中的管道脚本设置Web挂钩,并且您需要至少构建一次以使该属性已注册.
我已经在圈子里走了一段时间,所以希望我错过了一些明显的东西,但任何帮助都会受到赞赏.
我想象能够做到以下之一
以某种方式触发多分支项目作为下游项目
轮询multibranch项目,只构建以前没有构建的分支项目
干杯
我为Jenkins构建过程提供了一组重要的Groovy管道脚本.我正在将这些脚本移动到另一个实例上,并希望复制最初未列入白名单的已批准脚本集.
是否可以导出已批准的签名列表并将其导入另一个实例?
我唯一的解决方案就是不断运行并重新运行脚本并批准每个签名,因为它会破坏构建.由于脚本非常复杂,并且并非每次运行都能保证每行都能运行,因此这不是一个快速的过程.
另一种选择是创建一个主"白名单"脚本,该脚本一次又一次地运行所有当前未经批准的脚本,直到所有实例都被批准.
这两个选项都不是很好,所以我希望简单的导入/导出以避免完全无法完成这项工作,但我当然看不到可用于UI的选项.
干杯
我有以下 Groovy 脚本作为 Jenkins 管道的一部分
权限.groovy
enum PermissionType {
ANONYMOUS,
AUTHENTICATED
}
def get_job_permissions(PermissionType permission) {
...
}
return this
Run Code Online (Sandbox Code Playgroud)
我将此文件作为 Jenkins 管道的一部分加载到另一个 Groovy 文件中,并调用 get_job_permissions 作为参数传递其中一个枚举。
管道.groovy
def job_permissions = load 'permissions.groovy'
job_permissions.get_job_permissions(job_permissions.PermissionType.AUTHENTICATED)
Run Code Online (Sandbox Code Playgroud)
Jenkins 失败并出现以下错误(我已经验证,在这种情况下,'Script3' 是使用 enum 参数调用 get_job_permissions)。
groovy.lang.MissingPropertyException: No such property: PermissionType for class: Script3
Run Code Online (Sandbox Code Playgroud)
我知道脚本加载和调用是正确的,因为我可以将 get_job_permissions 的签名更改为以下内容,在 pipeline.groovy 中传递一个随机字符串并且调用正确通过。
def get_job_permissions(def permission) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果我不更改签名,并且仍然通过一个随机字符串,Jenkins 会导致构建失败,因为它找不到它认为我正在调用的方法(这是真的,它不存在,它期待 PermissionType 类型) .
我尝试了许多不同的方法来将 PermissionType 暴露给调用脚本
这些解决方案都不允许我从调用脚本中引用枚举类型,我理解这是因为我试图通过脚本实例引用它来访问类型。
但如果我不能这样做,最好的方法是什么?
谢谢
我想根据类模板类型对齐我的成员变量,但我不确定它是否真的可行.
以下是我想做的一个(非常)简单的例子
template<int Align>
class MyClass
{
private:
struct MyStruct
{
// Some stuff
} __declspec(align(Align));
__declspec(align(Align)) int myAlignedVariable;
};
Run Code Online (Sandbox Code Playgroud)
所以我想要的是Align是一个每个实例的变量,只有这样才能确定类内容的对齐值.
不幸的是我总是得到以下错误
error C2975: 'test::MyClass' : invalid template argument for 'Align', expected compile-time constant expression
Run Code Online (Sandbox Code Playgroud)
那么,这实际上是可能的还是只能使用固定的编译时间常数进行对齐?如果没有,有人能想到解决这个问题的方法吗?
谢谢 :)