2015-10-16 29 views
3

我想從工作流groovy腳本中利用Jenkins Java。在工作流腳本中使用Jenkins Java API

我發現很難掌握我能做什麼和不能做什麼,有沒有什麼好的資源如何做到這一點。

此刻我想要做的就是在工作空間路徑,我已經儘可能

def jenkins = Jenkins.instance; 
def build = jenkins.getItem(env.JOB_NAME).getBuild(env.BUILD_NUMBER) 

拿到但這似乎是一個死衚衕,似乎沒有要實際上你可以用這些對象做任何有用的事情。

如果任何人都可以通過任何資源給我提供可以這樣做的有用事物的例子,或者幫助解決我獲得工作空間路徑的具體問題,那將是非常好的。

回答

5

您可以使用標準工作流程步驟pwd()來獲取工作區路徑,而無需使用任何Jenkins API。

就其他案例而言,沒有特定的文檔總結了您可以使用Workflow腳本中的Jenkins API做什麼,因爲它無論是Jenkins API允許您通常執行的任何操作(請參閱Javadoc)。需要注意的兩個注意事項:

  • 幾乎所有此類調用都將被Groovy沙箱拒絕(並且許多不安全的白名單)。這意味着除非您是管理員,否則您不能在受保護的Jenkins安裝中編寫此類腳本。 more
  • 大多數API對象不會是Serializable,這意味着您必須將它們的使用封裝在標有@NonCPS註釋的方法中。該方法可能需要參數並返回任何可序列化(或原始)類型。 more
  • 目前沒有支持的方式來訪問在本地工作區上下文中定義的Jenkins模型對象。 JENKINS-28385會有所幫助。同時,常常有解決方法;例如,如果您想要在node {}塊內使用Node,則可以使用Jenkins.instance.getNode(env.NODE_NAME)
0

這並不回答您的總體問題,但env.WORKSPACE會爲您提供工作空間的絕對路徑:)在工作流作業配置中打開片段生成器,向下滾動,您將看到所有可用的環境變量。

+1

env.WORKSPACE給我null,它確實在片段生成器中說它不被支持。 – user3617723

+0

對於這種特殊情況,您可以簡單地使用'pwd()'步驟。 –

0

如果您試圖獲取用於閱讀某些文件的工作區路徑,則應該確實使用Job DSL和readFileFromWorkspace(filePath)。 只要有一個工作區路徑並嘗試使用new File(filePath)讀取文件,如果您使用的是從屬系統,則可能無法正常工作。 更多細節在這裏 https://github.com/jenkinsci/job-dsl-plugin/wiki/Job-DSL-Commands