gulp中的任务可以这样定义:
gulp.task('foobar', function(callback) { ... });
Run Code Online (Sandbox Code Playgroud)
我试图了解回调函数是什么.它在哪里定义?我可以在运行时传递一些其他函数作为参数吗?它有什么作用?
这些文档表明回调参数是Orchestrator的提示,该任务应该异步运行,执行回调指示异步任务已完成.
通过一些实验,看起来调用没有参数的回调会返回成功状态,并使用某个字符串调用它会引发错误:
gulp.task('foobar', function(callback) {
callback();
});
gulp.task('bazkad', function(callback) {
callback("some string");
});
Run Code Online (Sandbox Code Playgroud)
(除此之外:如何在StackOverflow markdown中的代码块之间放置一个中断?)
$ gulp foobar
[09:59:54] Using gulpfile ~\repos\gulpproj\gulpfile.js
[09:59:54] Starting 'foobar'...
[09:59:54] Finished 'foobar' after 56 ?s
$ gulp bazkad
[10:05:49] Using gulpfile ~\repos\gulpproj\gulpfile.js
[10:05:49] Starting 'bazkad'...
[10:05:49] 'bazkad' errored after 55 ?s
[10:05:49] Error: some string
at formatError (~\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:169:10)
at Gulp.<anonymous> (~\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:195:15)
at Gulp.emit (events.js:107:17)
at Gulp.Orchestrator._emitTaskDone (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\index.js:264:8)
at ~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\index.js:275:23
at finish (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:21:8)
at cb (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:29:3)
at …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用此插件设置SonarQube来分析我的TypeScript项目:https://github.com/Pablissimo/SonarTsPlugin
但是,我遇到了如下错误:
> C:\sonarqube\sonar-runner-2.4\bin\sonar-runner.bat
...
INFO:
------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
Total time: 3.006s
Final Memory: 18M/613M
INFO: ------------------------------------------------------------------------
ERROR: Error during Sonar runner execution
ERROR: Unable to execute Sonar
ERROR: Caused by: You must install a plugin that supports the language 'typescript'
ERROR:
ERROR: To see the full stack trace of the errors, re-run SonarQube Runner with the -e switch.
ERROR: Re-run SonarQube Runner using the -X switch to enable full debug logging.
Run Code Online (Sandbox Code Playgroud)
我的设置: - …
是否可以通过来自多个上游作业的加入插件复制工件触发Jenkins作业?
我正在尝试使用"钻石"作业来设置Jenkins配置:my-trigger运行并生成两个作业,my-fork1和my-fork2,它们可以同时运行并占用不同的时间,然后加入两个叉子完成后,插件会启动作业my-join.
每个my-trigger,my-fork1和my-fork2都会创建和指纹工件(比如文本文件).
我想使用"从另一个项目中复制工件"工具从my-join中的每个上游作业复制工件,并将"Which build"参数设置为"触发此作业的上游构建".但是,我在my-join的控制台中看到这样的输出:
在工作空间/路径/到/ workspace/my-join中的构建机器上远程构建
从"my-trigger"内部编号63复制了1个工件
从"my-fork1"内部编号63复制了1个工件
无法从:my-fork2找到工件副本的构建
而且工作失败了.在这种情况下,my-fork2首先完成,所以my-fork1触发了join步骤.我相信这意味着my-join只记录my-fork1和my-trigger作为上游.如果my-fork1首先完成,那么my-fork2将启动连接,并且在尝试从my-fork1复制时作业失败.
如果我更改配置以从构建"最新成功构建"中复制工件,则构建成功,但是my-trigger可能会连续运行多次,因此无法保证my-join正在加入相关工件.
如何从上游复制多个叉子的连接步骤?
注意:这个问题的第二点似乎是问同样的事情,但唯一的答案是没有解决它,并已被接受.
谢谢tensorproduct
我正在尝试使用 Groovy 脚本(与 jenkins-cli.jar 一起运行)来验证一些 git 信息。
为此,我有以下简单的常规脚本:
def getBranchSha = { branch ->
def wd = new File('/my/git/repo');
def sout = new StringBuffer(), serr = new StringBuffer();
def gitcmd = 'git show-ref ' + branch + ' --hash';
def proc = gitcmd.execute(null, wd);
proc.consumeProcessOutput(sout, serr);
proc.waitFor();
def sha = sout.toString().trim();
out.println("exitCode: " + proc.exitValue() + "\terror: " + serr.toString());
out.println("input: " + branch + "\toutput: \"" + sha + "\"");
assert sha.equals("10d94325c8fc1050f3e362d2fbb9f9041e6b9360");
}
getBranchSha("origin/master");
Run Code Online (Sandbox Code Playgroud)
我希望这能够构建一个命令行git show-ref origin/master --hash …
(注意,这个问题也发布在technet上)
如何在Windows中远程编辑文本文件?
我正在运行和管理许多Windows 7工作站和Windows Server 2012计算机.我希望能够在任何这些机器上远程编辑文本文件.我可以通过psexec或powershell远程连接到任何这些机器.我也可以通过rdp连接,但是对于工作站我宁愿不打开用户,除非我绝对不得不这样做.
例如,我们使用Salt管理状态配置.本地配置文件存储在C:\salt\conf
.我希望能够动态编辑这些配置文件.
这个问题涉及同一主题,但没有一个答案特别令人满意.
一些可能的解决方案是:
PS C:\Users\Meredith> Invoke-Command -Session $ps -ScriptBlock {get-content c:/inetpub/myapp/web.config} > web.config
Run Code Online (Sandbox Code Playgroud)
编辑网络配置:
PS C:\Users\Meredith> get-content web.config | Invoke-Command -Session $ps -ScriptBlock {set-content c:/inetpub/myapp/web.config}
Run Code Online (Sandbox Code Playgroud)
最后两个选项是我现在使用的工作流程.正则表达式替换非常简单的更改,并复制到本地和编辑那里更复杂的.两者都不理想,但它们都有效.它只是感觉难以置信的老式.
我正在考虑将一个插件写入我选择的编辑器(vim)来执行远程提取和保存,以使我的工作流程更加顺畅.在我尝试之前,我只是想知道是否有任何我错过或误解的内容.
我正在尝试通过Groovy API更新Jenkins的根URL,因此我可以编写Jenkins master的部署脚本而无需手动输入(除了:为什么一个工具像build/devops /自动化社区一样受欢迎,因为Jenkins如此抗拒自动化?)
基于此文档,我相信我应该能够使用脚本控制台中的以下脚本更新URL.
import jenkins.model.JenkinsLocationConfiguration
jlc = new jenkins.model.JenkinsLocationConfiguration()
jlc.setUrl("http://jenkins.my-org.com:8080/")
println(jlc.getUrl())
Run Code Online (Sandbox Code Playgroud)
简而言之,这实例化了一个JenkinsLocationConfiguration
对象; setUrl
用所需的值调用setter http://jenkins.my-org.com:8080/
; 并打印出新的URL以确认它已更改.
该println
语句打印出我期望的内容,但是在此之后,通过"管理Jenkins" - >"配置系统" - >"Jenkins URL"的Web界面可见的值未按预期更新.
我担心Jenkins没有正确更新该值,这可能会在与外部API通信时导致问题.
这是修复Jenkins根URL的有效方法吗?如果不是,那是什么?否则,为什么更改不会反映在配置页面中?
我正在使用Vagrant在Windows主机上创建VM,我想将其与PuTTY连接.Vagrant以.pem格式创建RSA私钥.PuTTY需要.ppk格式的密钥才能创建连接.
我想在创建vagrant VM时自动将.pem转换为.ppk.
关于如何将.pem转换为.ppk的问题已被多次询问和回答,但在Windows上,所有这些答案都涉及点击puttygen GUI.似乎在Linux上,puttygen可以完全从命令行操作,但在Windows上必须使用GUI.
在创建我想避免的新VM时,必须单击GUI是我工作流程中的一个慢点.
在Windows上是否有任何命令行/脚本/编程方式将.pem文件转换为.ppk格式?
jenkins ×3
groovy ×2
gulp ×1
join ×1
key-pair ×1
node.js ×1
pem ×1
powershell ×1
private-key ×1
psexec ×1
putty ×1
sonar-runner ×1
sonarqube ×1
ssh ×1
text ×1
typescript ×1
windows ×1
winrm ×1