【发布时间】:2015-06-13 17:45:19
【问题描述】:
我想创建一个简单的 Jenkins 插件。
基本上它是一个带有下拉列表的自定义构建步骤(构建器扩展)。诀窍是我想从 配置 期间执行的 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;
}
我的问题如下:
如果也有 slave,Jenkins 是否维护 2 个工作区(所以最新的源代码将同时存在于两个位置?
我的理解是(在第一次构建之后)总是有两个工作区:在主服务器上有元信息(还有源代码?),在从服务器上有源代码和构建中间体、信息、工件。 (除非我们提取工件或使用 copy-to-slave-plugin)我使用 project.getSomeWorkspace() 或 project.getSomeWorkspace().getRemote() 获得的工作空间在哪里? (主/从?)
如何在将执行构建的机器上调用 shell 命令?或者至少有办法特别选择主人/奴隶之一? (假设我已经配置了我要在哪组机器上运行作业的标签。)
我无权访问 AbstractBuild、BuildListener 和 Launcher(因为它们还不存在......)如何找出可以使用@AncestorInPath 获得的属性。
我知道这是一个简写,来自 Jenkins 调用的 StaplerRequest 的注入?如何查看请求?
shell 命令的执行位置很重要,即使 master 和 slave 上有两个相同的工作空间。就我而言,可能会有一个 Windows 主机(将来)和一个 OSX 从机。我确实需要 OSX 来运行我的命令。 (目前OSX上只有一个master。)
编辑:
这是一个例子,我正在尝试做的一部分。我在 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 脚本手动完成,但我想让它更容易。)
【问题讨论】:
标签: java shell jenkins jenkins-plugins