1. 程式人生 > >Nexus基礎:使用Api進行操作

Nexus基礎:使用Api進行操作

Nexus提供了RestApi,但是一部分Api仍然需要結合Groovy等進行操作,在3.3及其以後的版本上進行了強化,但是和普通的RestApi相比仍有一些“使用上的特性”。這篇文章以建立建立raw的repository為例,來確認一下相關的使用方法。

前提準備

準備可執行的Nexus,這裡的版本為3.2.1
在這裡插入圖片描述

Api機制

這篇文章介紹的是Nexus3推出之初的Api的設計思路,主要是通過結合groovy指令碼來完成相關的功能,簡單的來說需要使用者自行提供groovy指令碼,nexus提供上傳和執行指令碼的介面,雖然有些粗糙,但是大部分功能畢竟留出了一個方式供使用者去使用,強大的groovy指令碼中至於需要實現什麼樣的功能,那就看使用者自己的需要了。在一定程度上來說,算是一個能夠創造API的API

使用步驟

步驟1: 以json檔案為載體,建立可執行的groovy指令碼

  • 格式大體如下:
{
  "name": "指令碼名稱",
  "type": "groovy",
  "content": "groovy語句"
}

注意事項:

  • 注意雙引號和單引號的使用
  • 指令碼的名稱會成為後續API的一部分,請注意命名

步驟2: 上傳json檔案

使用如下方式和介面即可上傳相應包含groovy操作的json檔案

  • 介面:/service/siesta/rest/v1/script
  • 方法:POST
  • 檔案:將步驟1中準備的檔案作為POST的內容傳入

步驟3: 執行groovy檔案

使用如介面即可執行在步驟2中上傳的groovy指令碼

  • 介面:/service/siesta/rest/v1/script/指令碼名稱/run
  • 方法:POST

此處需要注意指令碼名稱也會是執行介面中的一部分,命名變得灰常重要。

使用示例

這裡使用上述方式來演示一下如何在Nexus中建立一個Raw型別的repository。

步驟1: 以json檔案為載體,建立可執行的groovy指令碼

因為建立repository需要指定blob,如果沒有指定則會使用default,但是如果專案眾多,將會導致default非常巨大,在前面介紹nexus的使用實踐中也給出過對於不同的repository建立自己的blob,所以這裡建立如下的json檔案:

liumiaocn:~ liumiao$ cat rawrepotest1.json 
{
  "name": "rawrepotest1",
  "type": "groovy",
  "content": "def rawStore = blobStore.createFileBlobStore('rawrepotest1', 'raw');repository.createRawHosted('rawrepotest1', rawStore.name);"
}
liumiaocn:~ liumiao$

建議:因為Nexus的這種使用方式本身就不是非常完整的方式,建議使用的過程中諸如rawrepotest1全部一致,這樣blob和repository的關係也比較清楚,無非多上傳幾個大小可以忽略不計的json檔案而已。

步驟2: 上傳json檔案

liumiaocn:~ liumiao$ curl -X POST -u admin:admin123 --header "Content-Type: application/json" http://localhost:32004/service/siesta/rest/v1/script -d @rawrepotest1.json
liumiaocn:~ liumiao$

步驟3: 執行groovy檔案

liumiaocn:~ liumiao$ curl -X POST -u admin:admin123 --header "Content-Type: text/plain" http://localhost:32004/service/siesta/rest/v1/script/rawrepotest1/run
{
  "name" : "rawrepotest1",
  "result" : "RepositoryImpl$$EnhancerByGuice$$13e8178d{type=hosted, format=raw, name='rawrepotest1'}"
}liumiaocn:~ liumiao$

結果確認

blob確認

已經生成相應的blob:rawrepotest1
在這裡插入圖片描述

repository確認

已經生成相應的raw方式的repository:rawrepotest1
在這裡插入圖片描述

總結

Nexus中結合groovy能夠實現Api方式的整合,但是這種方式在使用上還有諸多的不變,多次執行是否出錯等都成為groovy指令碼確認的事項,相關功能是否會強化可能還需要看nexus後續版本的支援情況,和groovy的結合方式會不會是功能過度時期的對應方式還需進一步觀察。

參考文章

https://technology.amis.nl/2016/10/27/sonatype-nexus-3-0-using-the-new-groovy-api/
https://github.com/sonatype/nexus-book-examples/tree/nexus-3.x/scripting/complex-script
https://github.com/sonatype/nexus-book-examples/blob/nexus-3.x/scripting/complex-script/rawRepositories.groovy
https://groups.google.com/a/glists.sonatype.com/forum/#!topic/nexus-users/fB245hjTLNg