我想创建一个简单的Jenkins插件。
基本上它是一个带有下拉列表的自定义构建步骤(Builder扩展)。诀窍是我想从配置时间内执行的shell脚本/命令的结果填充此下拉列表。
这是我的方法存根。
public ListBoxModel doFill...Items(@AncestorInPath AbstractProject project) {
// determine workspace
// project.getSomeWorkspace() or project.getSomeWorkspace().getRemote()
...
// invoke some shell commands
String[] results = ...
ListBoxModel items = new ListBoxModel();
for (String item : results) {
items.add(item);
}
return items;
}
我的问题如下:
如果还有奴隶,Jenkins是否会维护2个工作区(因此最新源代码将存在于两个位置?
我的理解是(在第一次构建之后)总有两个工作区:在master上有元信息(和源代码也是?),在slave上有源代码和构建中间体,信息,工件。 (除非我们提取工件或使用copy-to-slave-plugin)
使用project.getSomeWorkspace()或project.getSomeWorkspace()。getRemote()得到的工作空间在哪里? (主/从?)
如何在将执行构建的机器上调用shell命令?或者至少有没有办法选择主人/其中一个奴隶? (假设我已经在我想要运行作业的机器组上配置了一个标签。)
我无法访问AbstractBuild,BuildListener和Launcher(因为它们还不存在......)
如何找出@AncestorInPath可以获得哪些属性。
我知道这是一个简写,是Jenkins调用的StaplerRequest注入的吗?我怎样才能看到请求?
即使主服务器和从服务器上有两个相同的工作空间,执行shell命令也很重要。在我的情况下,可能有Windows主服务器(将来)和OSX从服务器。我确实需要OSX来运行我的命令。 (目前在OSX上只有一个主人。)
修改
这是一个例子,我想要做的一部分。我在Swift(JenkinsSwift)中创建了一个简单的Xcode项目。在项目目录的终端中,我可以发出以下命令:
xcodebuild -project JenkinsSwift.xcodeproj -list
得到以下回复:
Targets:
JenkinsSwift
JenkinsSwiftTests
Build Configurations:
Debug
Release
If no build configuration is specified and -scheme is not passed then "Release" is used.
Schemes:
JenkinsSwift
在配置期间,我想导航到我要发出上一个命令的OS X机器上的项目工作区。通过这种方式,我可以解析此响应并允许用户在配置期间选择目标/配置/方案。 (当然这可以通过bash脚本手动完成,但我想让它变得更容易。)
答案 0 :(得分:1)
private String getDate(String dateString) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date value = null;
try {
value = formatter.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy hh:mmaa");
dateFormatter.setTimeZone(TimeZone.getDefault());
String dt = dateFormatter.format(value);
return dt;
}
,为您提供某些过去版本所使用的工作区。请注意,这是在纯粹的最佳努力基础上完成的,因为可能没有。Project#getSomeWorkspace()
。hudson.model.Node#createLauncher(TaskListener)
允许您在URL绑定期间注入一些由stapler遍历的ware对象。你不应该尝试注入任何可能不属于url的东西。我无法知道您注入请求,订书机使用启动操作方法调用的方法。最重要的是你尝试的听起来很不寻常。也许有一种更简单的方法来解决你原来的问题。