首先,我是新来的Java,Groovy和Jenkins,所以请对我有耐心;)
我正在准备一个带有管道支持的Jenkins服务器,以备将来在构建环境中使用。我们使用一种特殊的内部脚本语言,为此我必须用java编写一个包装器。只有在Groovy中才能完成这项工作,我们必须使用这种特殊的语言。
我尝试过很多方法将java库引用到这个jenkins项目中,但都没有成功。我主要是在https://github.com/jenkinsci/workflow-cps-global-lib-plugin为了实现这一点,他还尝试了几种搜索google或stackoverflow的方法。根据文档,这应该是可能的。
为了测试目的,我已经将该过程简化为测试设置。
假设如下。。。
我在Jenkins中有一个多分支项目,名为“多分支测试项目01”。
Jenkinsfile:
@Library('DeltaJenkinsScripts@develop')
def runStageCollect = true
if (runStageCollect)
{
stage("Collect")
{
helloWorld("Joe")
}
}
所引用的库通过Jenkins设置中的“全局管道库”进行全局引用,但在这里也明确地进行了说明。它托管在git环境中,引用似乎可以工作。此库的文件结构:
/vars/helloWorld.groovy
package de.dcomp.prod
def call(name) {
def tt = new Test()
tt.testText()
}
/src/de/dcomp/prod/Test。棒极了
package de.dcomp.prod
import de.dcomp.ftel.*
def testText()
{
def sRetVal = ""
echo "testText - START"
//sRetVal = ScriptRunner.GetStaticSampleText()
def oSR = new ScriptRunner()
sRetVal = oSR.GetInstanceSampleText()
echo "ReturnValue: ${sRetVal}"
}
我有一个名为ScriptRunner-0.0.1-SNAPSHOT的java库。罐子此库只有一个类:
package de.dcomp.ftel;
public class ScriptRunner
{
public String GetInstanceSampleText()
{
return "ScriptRunner.GetInstanceSampleText() called...";
}
public static String GetStaticSampleText()
{
return "ScriptRunner.GetStaticSampleText() called...";
}
}
在独立的java项目中引用和使用这个库没有问题。
我尝试了几种方法来包含它:
或动态加载:
this.class.classLoader.rootLoader.addURL(new URL("file:///C:/Users/cr/.groovy/lib/ScriptRunner-0.0.1-SNAPSHOT.jar"));
def srClass = Class.forName("de.dcomp.ftel.ScriptRunner")
def sr = srClass.newInstance()
结果总是这样。
groovy.lang.MissingPropertyException: No such property: ScriptRunner for class: de.dcomp.prod.Test
或者这个:
de/dcomp/prod/Test.groovy: 10: unable to resolve class ScriptRunner
@ line 10, column 12.
def oSR = new ScriptRunner()
错误消息总是指向进程找不到Java库的方向。如果我尝试使用其他库,例如来自Apache Commons的库,也会发生同样的事情。
如果可能的话,我想避免把它作为插件。
提前谢谢!
如果在管道中使用外部库(@library
),则可以通过Grab定义grape依赖项。下面是ciinabox管道共享库中的示例。这将下载JAR并在groovy脚本中自动加载它们。
@Grab(group='com.amazonaws', module='aws-java-sdk-ec2', version='1.11.198')
import com.amazonaws.services.ec2.* import com.amazonaws.services.ec2.model.* import com.amazonaws.regions.*
重要的是,上面的代码可能不会在管道中工作,但当作为共享库的一部分加载时,它应该与最新的插件版本一起工作。
到目前为止,我发现唯一有效的方法是在管道中运行此程序,以了解正在检查哪些目录:
println System.getProperty("java.ext.dirs")
而在我的情况下,它正在往里看
/usr/java/packages/lib/ext
所以我把我想加载的jar放在那个位置(在必须创建目录之后),然后重新启动Jenkins。
之后,我成功地导入并使用了该库。
看起来非常古怪,这种事情可能会被认为是一个错误,并在没有通知的情况下被删除。
可以在jenkins管道共享库中导入和使用常规java库吗?我想导入AWS SDK for java,并在管道代码中直接使用它。我必须将其添加到共享库的src dir中吗?
由于我无法访问组织中的“管理Jenkins”菜单,我无法在“管理Jenkins”中的“全局管道库”中配置共享库。 没有在Manage Jenkins中进行配置,是否有其他方法实现此功能? (或) 是否可以通过管道脚本配置“全球管道库”部分,而不管访问权限如何? 如果可能,请您在答案中共享一些代码片段。
问题内容: 我尝试了各种方式,但似乎没有任何效果。这是我的詹金文件。 阶段脚本的输出(“初始化变量”)没有任何作用,它没有设置全局变量ZIP_NODE的值: 然后我们进入阶段(代码-Build),我们没有得到ZIP_NODE的值。请参阅22:34:17的echo声明 感谢@awefsome,我有一些观察,我想补充一下细节:当我使用下面的代码时,我得到了想要的输出,即ZIP_NODE的正确值: 但是
问题内容: 先前曾问过一个有关如何覆盖环境指令中定义的变量的问题,看来这是不可能的。 我想在一个阶段中设置一个变量,并使其可用于其他阶段。在声明性管道中,似乎唯一的方法是在script {}块中。 例如,我需要在结帐后设置一些变量。因此,在结帐阶段结束时,我有一个script {}块来设置这些var,并且可以在其他阶段访问它们。 这可行,但感觉不对。并且出于可读性考虑,我更愿意在管道的顶部声明这些
我想使用这个java库[1]enj-library 我将这个库编译成jar,然后在eclipse下创建了一个新的插件项目“来自现有JAR档案的插件” 然后我试着将它添加到我的包,但它没有 2.我需要它作为添加包,但我得到了 3.我添加了类路径,我的包开始了,但我得到了类未找到异常 [1]https://github.com/dog 网关/enj-library 我在OSGI捆绑包包含这个库如何?
我正在尝试设置JavaFX环境,因此我引用了相应的jar。为了运行代码,我需要在launch.json中使用一些VM参数(“vmArgs”:--module path/Users/adrif/Downloads/javafx-sdk-14.0.2.1/lib--add modules javafx.controls,javafx.fxml”)。我在一个多项目文件夹中工作,因此每次创建一个新项目时,