Reading file from Workspace in Jenkins with Groovy script

前端 未结 7 1549
广开言路
广开言路 2020-11-30 04:12

I want to add a Build step with the Groovy plugin to read a file and trigger a build fail depending on the content of the file.

How can I inject the workspace file p

相关标签:
7条回答
  • 2020-11-30 04:22

    Although this question is only related to finding directory path ($WORKSPACE) however I had a requirement to read the file from workspace and parse it into JSON object to read sonar issues ( ignore minor/notes issues )

    Might help someone, this is how I did it- from readFile

    jsonParse(readFile('xyz.json')) 
    

    and jsonParse method-

    @NonCPS
    def jsonParse(text) {
            return new groovy.json.JsonSlurperClassic().parseText(text);
    }
    

    This will also require script approval in ManageJenkins-> In-process script approval

    0 讨论(0)
  • 2020-11-30 04:23

    If you are trying to read a file from the workspace during a pipeline build step, there's a method for that:

    readFile('name-of-file.groovy')
    

    For reference, see https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace.

    0 讨论(0)
  • 2020-11-30 04:26

    I realize this question was about creating a plugin, but since the new Jenkins 2 Pipeline builds use Groovy, I found myself here while trying to figure out how to read a file from a workspace in a Pipeline build. So maybe I can help someone like me out in the future.

    Turns out it's very easy, there is a readfile step, and I should have rtfm:

    env.WORKSPACE = pwd()
    def version = readFile "${env.WORKSPACE}/version.txt"
    
    0 讨论(0)
  • 2020-11-30 04:27

    Based on your comments, you would be better off with Text-finder plugin.

    It allows to search file(s), as well as console, for a regular expression and then set the build either unstable or failed if found.

    As for the Groovy, you can use the following to access ${WORKSPACE} environment variable:
    def workspace = manager.build.getEnvVars()["WORKSPACE"]

    0 讨论(0)
  • 2020-11-30 04:37

    As mentioned in a different post Read .txt file from workspace groovy script in Jenkins I was struggling to make it work for the pom modules for a file in the workspace, in the Extended Choice Parameter. Here is my solution with the printlns:

    import groovy.util.XmlSlurper
    import java.util.Map
    import jenkins.*
    import jenkins.model.*
    import hudson.*
    import hudson.model.*    
    
    try{
    //get Jenkins instance
        def jenkins = Jenkins.instance
    //get job Item
        def item = jenkins.getItemByFullName("The_JOB_NAME")
        println item
    // get workspacePath for the job Item
        def workspacePath = jenkins.getWorkspaceFor (item)
        println workspacePath
    
        def file = new File(workspacePath.toString()+"\\pom.xml")
        def pomFile = new XmlSlurper().parse(file)
        def pomModules = pomFile.modules.children().join(",")
        return pomModules
    } catch (Exception ex){
        println ex.message
    }
    
    0 讨论(0)
  • 2020-11-30 04:38

    If you already have the Groovy (Postbuild) plugin installed, I think it's a valid desire to get this done with (generic) Groovy instead of installing a (specialized) plugin.

    That said, you can get the workspace using manager.build.workspace.getRemote(). Don't forget to add File.separator between path and file name.

    0 讨论(0)
提交回复
热议问题