1

Bintray は優れたサービスのようであり、Nexus を使用するよりも優れていることについての記事がたくさんありますが、何らかの理由で、実際に成果物を Nexus から Bintray に移動するための移行スクリプトやツールはありません。Nexus リポジトリ (プライベートまたはパブリック) を Bintray に手間をかけずに移行するためのソリューションを探しています。

Bintray には REST API があることは承知しており、プロジェクト バージョンを作成し、Nexus からアーティファクトを 1 つずつアップロードできるスクリプトを作成するだけでよいようですが、何らかの理由でこの REST API からエラーが発生し続けます。実際に機能するものは付属していません。

4

2 に答える 2

1

@JBaruch が既に述べたように、それを行うツールがないため、これを行うスクリプトを作成する必要がありました。スクリプトは非常に不安定で、遅く、保守が難しい場合があるため、注意して使用してください。また、スクリプトは非常に基本的なものであり、後で手動で修正する必要がある場合があることに注意してください。

# run inside of your nexus repo directory, like /opt/nexus/sonatype_work/my_maven_repository

BINTRAY_USER=""
BINTRAY_TOKEN=""
BINTRAY_API="https://api.bintray.com"
BINTRAY_REPO="your_org/maven"

for META_FILE in `find . -type f -name 'maven-metadata.xml' ! -path "*/.nexus/*"  ! -path "*/.meta/*" ! -path "*/.index/*"`;
do
    echo "Meta-file: $META_FILE"
    PRODUCT_DIR=`dirname ${META_FILE#./}`
    PRODUCT_ID=`basename $PRODUCT_DIR`
    PACKAGE_DIR=`dirname $PRODUCT_DIR`
    PACKAGE=`echo $PACKAGE_DIR | tr '/' '.'`
    echo "Found product $PRODUCT_ID in $PACKAGE at path $PRODUCT_DIR"

    # make project on bintray
    PROJECT_ID="$PACKAGE:$PRODUCT_ID"
    PROJ_TMPL='{
        "name": "%s",
        "desc": "%s",
        "licenses": ["Apache-2.0"],
        "vcs_url": "https://github.com/your_org/",
        "public_download_numbers": false,
        "public_stats": true
    }'
    PROJ_DEF=`printf "$PROJ_TMPL" $PROJECT_ID $PACKAGE.$PRODUCT_ID`
    PROJ_URL="$BINTRAY_API/packages/$BINTRAY_REPO"

    echo "Posting $PROJ_DEF to $PROJ_URL"
    curl -H "Content-Type: application/json" -d "$PROJ_DEF" -u$BINTRAY_USER:$BINTRAY_TOKEN $PROJ_URL
    echo ""

    for VERSION_DIR in `find $PRODUCT_DIR/* -maxdepth 1 -type d ! -name . ! -name .. ! -name '.meta' ! -name '.index' ! -name '.nexus'`;
    do
        VERSION=`basename $VERSION_DIR`
        echo "Found version $VERSION of product $PACKAGE.$PRODUCT_ID"

        # make version on bintray
        VERSION_TMPL='{
            "name": "%s",
            "desc": "%s"
        }'
        VERSION_DEF=`printf "$VERSION_TMPL" $VERSION "$VERSION release of $PACKAGE:$PRODUCT_ID"`
        VERSION_URL="$BINTRAY_API/packages/$BINTRAY_REPO/$PROJECT_ID/versions"
        echo "Posting $VERSION_DEF to $VERSION_URL"

        curl -H "Content-Type: application/json" -d "$VERSION_DEF" -u$BINTRAY_USER:$BINTRAY_TOKEN $VERSION_URL
        echo ""

        for FILE in `find $VERSION_DIR -type f`;
        do
            URI="$BINTRAY_API/content/$BINTRAY_REPO/$PROJECT_ID/$VERSION/$FILE;publish=1"
            echo "Uploading file $FILE to $URI"
            curl -T $FILE -u$BINTRAY_USER:$BINTRAY_TOKEN $URI
            echo ""
        done
    done
done
echo "+--------------------------------+"
echo "| Migration script finished! \o/ |"
echo "+================================+"
于 2015-12-14T20:49:40.487 に答える
1

現在、この種の移行専用のツールはありません。REST API は確かにそれを行う方法です。

于 2015-11-30T15:01:42.543 に答える