2016-12-15 7 views
3

Nexus 3にはまだREST APIがありませんが、これは私にとって非常に奇妙です。 wgetやcurlを使用して手動でのみアーティファクトをダウンロードできます。私はMavenの3を使用しているとしてではなく、成果物がこのようなタイムスタンプを使用して命名されているすべてのスナップショット:Nexus 3:最新のスナップショットを取得するには?

myartifact-1.0-20161215.141522-4.tar.gz 

は、だから、私はレポから最新のスナップショットを取得する方法を知りたいですか?私は成果物のダウンロードプロセスを自動化したいが、名前が変わるとこれを達成する方法が見つからなかった。

ありがとうございました。

+0

好奇心旺盛:Mavenと一緒にNexus 3を使用するのはなぜですか? –

+0

私たちのプロジェクトはmaven(Java)に基づいているので、あなたは何をしますか? – brest1007

+0

Nexus 3が私たちのニーズを完全に満たすまで、Nexus 2.xを使用します。 –

答えて

3

これは現在できません。このようなユースケースは、特にREST APIを構築する際に検討されており、近い将来にこの機能を期待する必要があります。

コメントで示唆されているように、当面はNexus Repository Manager 2を引き続き使用することをお勧めします。 Groovyとスクリプティングに便利な人は、Nexus Repository Manager 3をIntegration API経由で拡張して、あなたが何を記述しているかを知ることができます。その使用方法の詳細はこちら:https://books.sonatype.com/nexus-book/reference3/scripting.html

+0

こんにちは、Nexusの開発者ですか?はい、私は現在、Groovy REST APIを見ています。私はMavenプロジェクトを作成しました.Nexusのレポにスクリプトをアップロードし、スクリプトをカールで実行すると思いますか? – brest1007

+0

私は開発者の一人であり、時折間違ったコードを書くことを意味します。ここにはたくさんのスクリプトがあります(アップロード用のシェルスクリプトなど)。あなたがやりたいことをするために傾けることができます:https://github.com/sonatype/nexus-book-examples/tree/ nectus-3.x/scripting/simple-shell-example – DarthHater

+0

haha​​ありがとう、私はすでにgit cloneを行っていますが、この例ではほとんど何もありません。 – brest1007

4

Groovyでスクリプトを作成してNexusにアップロードして、必要な処理を行うことができます。

ここでは、特定のグループとリポジトリのすべてのバージョンを返すために作成したスクリプトの例を示します。 version.json

内容:

{ 
    "name": "version", 
    "type": "groovy", 
    "content": "import org.sonatype.nexus.repository.storage.Query; 
    import org.sonatype.nexus.repository.storage.StorageFacet; 
    import groovy.json.JsonOutput; 

    def groupId = args.split(',')[0]; 
    def repositoryId = args.split(',')[1]; 

    def repo = repository.repositoryManager.get(repositoryId); 
    StorageFacet storageFacet = repo.facet(StorageFacet); 
    def tx = storageFacet.txSupplier().get(); 

    tx.begin(); 
    def components = tx.findComponents(Query.builder().where('group = ').param(groupId).build(), [repo]); 
    def found = components.collect { 
    def baseVersion = it.attributes().child('maven2').get('baseVersion'); 
    \"${baseVersion}\" 
    }; 
    found = found.unique(); 
    tx.commit(); 
    def result = JsonOutput.toJson(found); 

    return result;" 
} 

ここで興味深い部分は、一般的なComponentクラスを返しtx.findComponents()です。このクラスは、コンテナに関する追加情報を、attributes()で提供します。 これを使用してbaseVersion、つまり使用するMavenのバージョン(-SNAPSHOT接尾辞付き)を取得できます。このスクリプトをインストールするには

、単に次のコマンドを実行します。あなたは、その後で簡単にそれをテストすることができます

curl -v -X POST -u <NEXUS_ADMIN>:<NEXUS_PWD> --header "Content-Type:application/json" http://<SERVER_NEXUS>/nexus/service/siesta/rest/v1/script -d @version.json 

curl -v -X POST -u <NEXUS_ADMIN>:<NEXUS_PWD> --header "Content-Type: text/plain" "http://<SERVER_NEXUS>/nexus/service/siesta/rest/v1/script/version/run" -d "com.my.groupid,snapshots" 

これは、あなたが望んでいたとして、あなたが望むすべてのバージョンを返します。

{ 
    "name" : "version", 
    "result" : "[\"1.5.2-SNAPSHOT\",\"1.5.3-SNAPSHOT\",\"1.6.1-SNAPSHOT\",\"1.5.0-SNAPSHOT\"]" 
} 

願っています。

+0

私はtry/finallyブロックの中でこれを実行し、finally部分の内部で( 'tx.close()'を介して)トランザクションを閉じることを強くお勧めします。これをスクリプトの開始点として使用し、12〜48時間のNexusのインストールが終了し、もはや成果物要求に応答しなくなりました。このスクリプトは、私の正確な状況を説明する[チケット](https://issues.sonatype.org/browse/NEXUS-14612)にも含まれています。 – richid

0

私はここで別のポストに答えを見つけた:Nexus 3 Rest api to check if component exist

を私は

found = found.unique().sort(); 

ラインにコメントし、次のパラメータを使用してそれを呼んだ:

-d'<reponame>,<groupid>,<artifactid>,<version>-SNAPSHOT,latest' 

YMMVが、これはそれをやりました私のために。私はこのクエリの結果を使ってwgetを構築することができました。

関連する問題