当前位置: 首页 > 面试题库 >

无法通过Jenkins上的管道作业的jenkinsfile中的Groovy代码(或java代码)创建文件

柯甫
2023-03-14
问题内容
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
                echo "whoami".execute().text
                script {
                    File f = new File('/home/jenkins/test2.txt');
                    f.createNewFile();
                }
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

Jenkins控制台日志:(获得例外:由用户Edgar Yu启动在持久性级别中运行:MAX_SURVIVABILITY [Pipeline]节点在/
var / jenkins_home / workspace / test2中的Jenkins上运行[Pipeline]
{[Pipeline]阶段[Pipeline] {(构建) [管道]回声大厦.. [管道]回声詹金斯

[Pipeline]脚本[Pipeline] {[Pipeline]} [Pipeline] //脚本[Pipeline]} [Pipeline]
//阶段[Pipeline]阶段[Pipeline] {(测试)由于早期失败,跳过了“测试”阶段)[管道]} [管道] //阶段[管道]阶段[管道]
{(部署)由于早期故障而跳过了“部署”阶段[管道]} [管道] //阶段[管道]} [管道] //节点[管道]管道末端
java.io.IOException:
在java.io.File.createNewFile(File.java:1012)处的java.io.UnixFileSystem.createFileExclusively(本机方法)
拒绝权限


问题答案:

这是由于Jenkins并未实现Groovy本身而是一个解释器(CPS)-https: //github.com/cloudbees/groovy-
cps

为了帮助处理所引入的复杂性,有一些常用的步骤可以解决麻烦,例如创建文件。

要立即使用Jenkins管道步骤,请使用writeFile:https
://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-writefile-code-
write-file-to-workspace

writeFile([file: 'file.txt', text: filetxt])

如果您在编写自己的文件时遇到麻烦,建议将其拆分为一个共享库,请注意,这可能会导致ScriptSecurity警报,需要批准:

final class PipelineUtils implements Serializable {
    private script=null
    private static final PipelineUtils instance = new PipelineUtils()
    @NonCPS
    String saveFile(String filename, String text) {
        String PWD = script.pwd()
        String filePath = "${PWD}/${filename}"

        File file = new File(filePath)
        file.text = text
    }
}

有关@NonCPS和不可序列化html" target="_blank">对象的信息,请参见https://github.com/jenkinsci/pipeline-
plugin/blob/master/TUTORIAL.md。



 类似资料:
  • Jenkins控制台日志:(得到异常:由用户Edgar Yu启动,运行在耐久性级别:MAX_SURVIVABILITY[Pipeline]节点,在/var/Jenkins_home/workspace/test2[Pipeline]{[Pipeline]stage[Pipeline]{(Build)[Pipeline]echo Building..[Pipeline]echo Jenkins [管

  • 我使用jenkins的代码为每个插件生成覆盖率,并显示我喜欢的管道。是否有一个插件我可以使用它(例如Cobertura,但它似乎不受管道支持)?

  • 问题内容: 我在Oracle 9的数据库blob列中存储了一些文件。 我想将那些文件存储在文件系统中。 这应该很容易,但是我找不到正确的选择。 如何在Java中执行此操作? 我知道应该是这样的…我不知道被评论为有 雾 谢谢 编辑 我终于从大卫的问题中得到了这一点。 这是我的懒惰实现: 问题答案: 您希望将blob作为输入流并将其内容转储到输出流。因此,“痛苦”应类似于: 如果您发现自己做了很多这样

  • 我已经准备好了创建约100个测试作业的工作DSL代码(主脚本)。方法是它们应该可以手动执行,并且我们希望有管道让它们在晚上执行。因此,管道作业(多个)也将被创建。没问题。 但是由于主DSL groovy脚本会很大,我希望相应的管道脚本(管道作业将加载)放在单独的文件中。由于作业太多,我已经将所有作业的配置放在一个单独的文件中,它们在MAP中定义。创建所有测试作业的逻辑都放在主脚本中,它会循环通过位

  • 问题内容: 在我的jenkins管道项目中,我可以从git fine中检出代码…但是我们需要做一些git checkins,而且显然没有缓存凭据。 这是示例输出: 有人对此有很好的解决方案吗? 谢谢 问题答案: 答案是使用强大的jenkins插件: http://getmesh.io/Blog/Jenkins+2+Pipeline+101 该插件为git访问注入SSH_AUTH_SOCK环境变量

  • 我想在管道Jenkins作业中获得最后的构建输出,并在电子邮件中附加(使用emailext插件)。Curl工作正常,并提供适当的构建输出,但我无法将其存储在变量中以附加到电子邮件中。我用的是詹金斯的最新版本。 我可以看到,对于简单的sh命令,有几个相关的帖子,但这对于curl响应存储不起作用。 1. 2. 3.