我有一个groovy文件,我想从Jenkins文件运行.
即.加载script.groovy
但是,我不知道如果它存储在与Jenkinsfile相同的目录中,我该如何引用该文件.我从git加载Jenkinsfile.我注意到它创建了一个名为workspace @ script的文件夹.它不会将其放在工作区目录中.我可以硬编码的文件夹,但我不知道这个规则,看起来有点冗余,再次检出代码.
java.io.FileNotFoundException: /opt/jenkins_home/jobs/my_job/workspace/script.groovy (No such file or directory)
默认情况下,它从工作区加载,而不是workspace @脚本
我正在尝试将一个BuildFlow脚本转换为流水线(Workflow)脚本.但我发现,它并不像复制和粘贴那么容易.
Jenkinsfile
node { //get parameters from Job def builds = builds.tokenize(",") def ip_address_node = ip_address_node.trim() def port_node = port_node.trim() def branch = branch.trim() def workspace = pwd() stage 'Checking out code from esb repository' git branch: branch,url: 'ssh://git@giturl/integration_bus.git' load '../workspace@script/esb_deploybar_pipeline/deploy_esb.groovy' }
deploy_esb.groovy(这是从旧的构建流程,试图在管道中运行)
import groovy.transform.ToString import groovy.transform.EqualsAndHashCode @EqualsAndHashCode @ToString class BarDeploy { String barFile String app String integrationServer } //parse csv def csvItemsApps = new HashSet<BarDeploy>(); def csvItemsLibs = new HashSet<BarDeploy>(); def deploymentMapFile = new File(workspace + "/ESB_Deployment_Map.csv") def isFirstLine = true stage 'Parsing ESB Deployment CSV' deploymentMapFile.withReader { reader -> while(line = reader.readLine()) { if(isFirstLine) { isFirstLine = false continue } csvLine = line.split(",") app = csvLine[0] intServer = csvLine[1] def barDeploy = new BarDeploy() barDeploy.app = app barDeploy.integrationServer = intServer csvItemsApps.add(barDeploy) //get shared libs if(csvLine.length > 2 && csvLine[2] != null) { def sharedLibs = csvLine[2].split(";") sharedLibs.each { libString -> if(!libString.isAllWhitespace()) { def lib = new BarDeploy() lib.app = libString lib.integrationServer = intServer csvItemsLibs.add(lib) } }; } } }; //get list of bar files to deploy from html and consolidate bar files to deploy with apps in csv for (int i = 0; i < builds.size(); i+=3) { if(builds[i].equals("false")) { //Don't deploy bar if checkBox isn't selected continue } foundInCSV = false appToDeploy = builds[i + 1] barFileToDeploy = builds[i + 2] iterator = csvItemsApps.iterator() while (iterator.hasNext()) { barDeploy = iterator.next() if(appToDeploy.equalsIgnoreCase(barDeploy.app)) { barDeploy.barFile = barFileToDeploy foundInCSV = true } } iterator = csvItemsLibs.iterator() while (iterator.hasNext()) { barDeploy = iterator.next() if(appToDeploy.equalsIgnoreCase(barDeploy.app)) { barDeploy.barFile = barFileToDeploy foundInCSV = true } } if(foundInCSV == false) { throw new RuntimeException("App: " + appToDeploy + " not found in ESB_Deployment_Map.csv. Please add CSV Entry.") } } //Do deploy,deploy shared libs first deployCSVItemsInParallel(ip_address_node,port_node,branch,env_key,csvItemsLibs) deployCSVItemsInParallel(ip_address_node,csvItemsApps) def deploy(ip_address_node,deployItem,env_key) { def integrationServer = deployItem.integrationServer def app = deployItem.app def barFile = deployItem.barFile if(barFile == null) { return; } println("Triggering Build -> ESB App = " + app + ",Branch = " + branch + ",Barfile: " + barFile + ",Integration Server = " + integrationServer + ",IP Address: " + ip_address_node + ",Port: " + port_node + ",Env_Key: " + env_key) build_closure = { -> build("esb_deploybar",ip_address_node: ip_address_node,port_node: port_node,integrationServer: integrationServer,branch: branch,app: app,barFile: barFile,env_key: env_key) } return build_closure } def deployCSVItemsInParallel(ip_address_node,csvItems) { def build_closures = [] iterator = csvItems.iterator() while (iterator.hasNext()) { barDeploy = iterator.next() def build_closure = deploy(ip_address_node,barDeploy,env_key) if(build_closure != null) { build_closures.add(build_closure) } } if(build_closures?.size() > 0) { parallel(build_closures) } }
如果deploy_esb.groovy文件存储在与Jenkinsfile相同的SCM中,您可以执行以下操作:
node { def workspace = pwd() load "${workspace}@script/esb_deploybar_pipeline/deploy_esb.groovy" }