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控制台日志:(获得例外:由用户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和不可序列化对象的信息,请参见https://github.com/jenkinsci/pipeline- plugin/blob/master/TUTORIAL.md。