我试图用JSR 269格式编写一个注释处理器,它使用javac的Compiler Tree API来做一些源代码分析.我对成员选择表达式感兴趣,例如方法调用.
我可以很容易地获得所选方法(或字段等)的名称.但我想知道该成员的选择类型,我似乎无法找到一种直接的方法来做到这一点.Trees.getTypeMirror返回null我尝试调用的所有内容(而Javadoc没有提示).
我想我可以详尽地分析每一种表达对成员的左侧选择,并通过回归分析确定的静态类型的表达式:NewClassTree,TypeCastTree,MethodInvocationTree,ArrayAccessTree,和其他许多人.但这似乎是很容易出错的工作,显然javac已经知道表达式的静态类型,因为它需要这些信息用于许多目的.但是如何访问此类型信息?
到目前为止我所拥有的:
import com.sun.source.tree.MemberSelectTree;
import com.sun.source.tree.MethodInvocationTree;
import com.sun.source.util.TreePath;
import com.sun.source.util.TreePathScanner;
import com.sun.source.util.Trees;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
@SupportedAnnotationTypes("*")
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class PublicProcessor extends AbstractProcessor {
public @Override boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element e : roundEnv.getRootElements()) {
final Trees trees = Trees.instance(processingEnv);
final TreePath root = trees.getPath(e);
new …Run Code Online (Sandbox Code Playgroud) 我有一个接受NodeLabelParameter插件提供的"Node"参数的工作,我想通过"构建"步骤从jenkins"Workflow"工作中调用它.
当我使用Snippet Generator和"Build a job"时,生成的代码是:
build job: 'test job', parameters: [<object of type org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterValue>]
Run Code Online (Sandbox Code Playgroud)
当然这是无效的.
我试过这个(我在NodeLabelParameter插件代码中找到了这个构造函数):
build job: 'test job', parameters: [[new org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterValue('UPSTREAM_NODE', '', 'my_node')]]
Run Code Online (Sandbox Code Playgroud)
但构建失败并出现此异常:
java.lang.ClassCastException: org.jenkinsci.plugins.workflow.support.steps.build.BuildTriggerStep.parameters expects class hudson.model.ParameterValue but received class java.util.ArrayList
at org.jenkinsci.plugins.workflow.structs.DescribableHelper.coerce(DescribableHelper.java:250)
...
Run Code Online (Sandbox Code Playgroud)
从工作流作业中使用此类参数的正确语法是什么?
谢谢
编写Jenkins管道脚本时,从并行步骤访问变量是否安全?文档不清楚.
例如,此管道代码修改来自并行分支的公共计数器和队列:
def donecount = 0;
def work = [6,5,4,3,2,1,0]
def branches = [:]
for (int i = 0; i < 3; i++) {
branches["worker-${i}"] = {
while (true) {
def item = null
try {
item = work.remove(0)
} catch (java.lang.IndexOutOfBoundsException e) {
break
}
echo "Working for ${item} seconds"
sleep time:item
donecount += 1
}
}
}
branches.failFast = true
parallel branches
echo "Completed ${donecount} tasks"
Run Code Online (Sandbox Code Playgroud) 我通过 python 脚本从“服务器 A”中的作业(父作业)触发“服务器 B”中的作业(子作业)。我有 2-3 份家长工作。所以我想知道哪个父作业触发了子作业。我如何知道哪个父作业触发了子作业?
我可以将父作业名称传递给子作业名称吗?或者我可以直接从子作业中获取父母姓名吗?(环境变量/使用python脚本)
我想在不同的机器上使用相同的工作.但我不想每次都改变工作的配置.我可以将机器名称标签作为参数传递并在不同的机器上运行作业吗?(不是同时).
我想在运行作业时将参数传递给我在配置中编写的脚本(批处理脚本).我们可以这样做吗?
我可以从工作中获得返回值并在下一份工作中使用它吗?
我有一个简单的groovy脚本:
node ("master")
{
echo "I am about to try to use String.format"
def jjj = String.format("bob")
echo jjj
}
Run Code Online (Sandbox Code Playgroud)
如果我将此脚本直接放入我的作业配置并运行它,它运行正常.
但是,如果我将该脚本放入一个文件中然后通过"SCM的工作流脚本"加载,我就会收到错误
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified staticMethod java.lang.String format java.lang.String
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?是否可以关闭"SCM工作流脚本"的沙箱,就像"工作流脚本"一样?
或者是否有一些沙盒批准的格式化字符串的方式?
为什么它阻止我首先格式化字符串?
我开始为jenkins(以前的工作流程)管道工作
我正在使用IntelliJ作为IDE
是否有GDSL文档的来源或某种方式我可以知道哪些groovy在管道中可接受,哪些不是?
还有一种方法,我可以在检查我的Jenkinsfile之前测试运行GDSL吗?
我有一个构建流程,该流程按顺序构建4个作业
例如;
build(Job 1)
build(Job 2)
build(Job 3)
build(Job 4)
Run Code Online (Sandbox Code Playgroud)
我也想运行作业4,即使先前的任何作业也失败了。如何在构建流程中做到这一点?
我正在尝试使用工作流插件创建一个git-pull-request-checker.有没有办法设置构建的描述(例如PR#123: fixed a bug),以便它在以前的构建列表中可见?
我有一个Jenkins Job接受File作为参数并使用相同的文件我想触发下游项目.我该怎么做 ?看来jenkins不支持将文件作为参数传递给下游项目.我正在使用"触发/调用其他项目的构建"来触发下游项目.
当前,为了启用或禁用作业,用户必须在基于 Matrix 的安全配置中具有作业配置权限。我们希望能够独立于作业配置权限来管理启用/禁用作业权限。有一些夜间作业,我们希望每个用户都能够在不触及/破坏配置的情况下启用和禁用项目。
谢谢