小编Jes*_*ick的帖子

如何从javac插件中获取MemberSelectTree中表达式的类型?

我试图用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)

java javac annotation-processing

5
推荐指数
1
解决办法
1911
查看次数

如何使用NodeLabelParameter插件中的参数和Jenkins Workflow的"构建"步骤

我有一个接受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)

从工作流作业中使用此类参数的正确语法是什么?

谢谢

groovy jenkins jenkins-workflow

5
推荐指数
1
解决办法
4578
查看次数

使用Jenkins Pipeline脚本,从并行步骤访问全局变量是否安全?

编写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)

groovy jenkins jenkins-workflow jenkins-pipeline

5
推荐指数
1
解决办法
2335
查看次数

如何获取触发特定作业的项目详细信息?

我通过 python 脚本从“服务器 A”中的作业(父作业)触发“服务器 B”中的作业(子作业)。我有 2-3 份家长工作。所以我想知道哪个父作业触发了子作业。我如何知道哪个父作业触发了子作业?

我可以将父作业名称传递给子作业名称吗?或者我可以直接从子作业中获取父母姓名吗?(环境变量/使用python脚本)

jenkins jenkins-plugins jenkins-scriptler

5
推荐指数
2
解决办法
7400
查看次数

如何创建参数化的Jenkins作业?

我想在不同的机器上使用相同的工作.但我不想每次都改变工作的配置.我可以将机器名称标签作为参数传递并在不同的机器上运行作业吗?(不是同时).

我想在运行作业时将参数传递给我在配置中编写的脚本(批处理脚本).我们可以这样做吗?

我可以从工作中获得返回值并在下一份工作中使用它吗?

jenkins jenkins-plugins jenkins-scriptler jenkins-cli

4
推荐指数
2
解决办法
1万
查看次数

Sandbox阻止我格式化字符串

我有一个简单的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工作流脚本"的沙箱,就像"工作流脚本"一样?

或者是否有一些沙盒批准的格式化字符串的方式?

为什么它阻止我首先格式化字符串?

groovy jenkins-workflow

4
推荐指数
1
解决办法
8856
查看次数

DSL的管道源

我开始为jenkins(以前的工作流程)管道工作

我正在使用IntelliJ作为IDE

是否有GDSL文档的来源或某种方式我可以知道哪些groovy在管道中可接受,哪些不是?

还有一种方法,我可以在检查我的Jenkinsfile之前测试运行GDSL吗?

dsl jenkins spring-dsl cloudbees jenkins-workflow

4
推荐指数
1
解决办法
2116
查看次数

即使先前的作业在Jenkins Build流程中失败,依序运行下一个作业

我有一个构建流程,该流程按顺序构建4个作业

例如;

build(Job 1)
build(Job 2)
build(Job 3)
build(Job 4)
Run Code Online (Sandbox Code Playgroud)

我也想运行作业4,即使先前的任何作业也失败了。如何在构建流程中做到这一点?

jenkins jenkins-plugins jenkins-build-flow jenkins-workflow

3
推荐指数
1
解决办法
4011
查看次数

以编程方式设置构建描述

我正在尝试使用工作流插件创建一个git-pull-request-checker.有没有办法设置构建的描述(例如PR#123: fixed a bug),以便它在以前的构建列表中可见?

groovy jenkins-workflow

2
推荐指数
1
解决办法
1772
查看次数

如何使用File参数作为参数触发下游jenkins作业?

我有一个Jenkins Job接受File作为参数并使用相同的文件我想触发下游项目.我该怎么做 ?看来jenkins不支持将文件作为参数传递给下游项目.我正在使用"触发/调用其他项目的构建"来触发下游项目.

jenkins

2
推荐指数
1
解决办法
8181
查看次数

在 jenkins 中禁用和启用作业

当前,为了启用或禁用作业,用户必须在基于 Matrix 的安全配置中具有作业配置权限。我们希望能够独立于作业配置权限来管理启用/禁用作业权限。有一些夜间作业,我们希望每个用户都能够在不触及/破坏配置的情况下启用和禁用项目。

谢谢

build-process jenkins

1
推荐指数
1
解决办法
3万
查看次数