web-dev-qa-db-ja.com

GitLabにリリース/バイナリを保存する方法は?

GitlabJenkinsおよび-おそらく-Nexus(アーティファクトストレージが必要です)でワークフローを構築しています。 GitLabにreleases/binariesを保存してもらいたい-便利な方法で可能ですか?

リリース(およびドキュメント)をダウンロードできる別のサービスは希望しませんが、リリースがたとえばGitHub。手がかりはありますか?

54
Kasia Gauza

2015年11月更新: GitLab 8.2はリリースをサポートするようになりました

APIを使用して、 タグに関連付けられたリリースを作成および更新 できるようになりました。
現時点では、gitタグ(リリースとも呼ばれる)にリリースノート(マークダウンテキストと添付ファイル)を追加する機能のみです。

2019年5月の更新:GitLab 1.11では、興味深い「 ゲストへのリリースへのアクセス 」が導入されました:

プロジェクトのゲストユーザーが、[リリース]ページで公開したリリースを表示できるようになりました。
公開されたアーティファクトをダウンロードできますが、ソースコードをダウンロードしたり、タグやコミットなどのリポジトリ情報を表示したりすることはできません


元の回答2015年3月

これは進行中であり、 提案4156755 で提案されています:

Ciroによるミニマルプロポーザルのマージリクエストを受け付けています。

  1. https://github.com/cirosantilli/test/releases/tag/3. の下の各リポジトリタグについて、ファイルのリストのアップロードとダウンロードを許可します。
  2. アップロードとダウンロードは、タグリストビューから直接実行できます。
  3. タグが削除されると、アップロードは破棄されます。 (最近のコメントに記載されているタグメッセージの編集は受け付けていません)

その提案へのコメントは次のとおりです。

それをもっと面白くするのは次のステップです。
ソースコードにアクセスすることなく、「リリース」からアーティファクトをパブリックにダウンロードできるようにしたい(つまり、Wiki、「リリース」、課題追跡などを除くプロジェクトチームのみにソースを非公開にする)。

ただし、このような追加機能はより一般的であり、私は そのための個別の機能要求を送信した です。

それにもかかわらず、私はここで私のポイントを繰り返します:
単純化された「リリース」バージョンはまだいいのですが、多くの人は外部ファイルサーバーを簡単にセットアップし、リリース/タグの説明でURLをGitLabの外部のこのサーバーにポイントできます。
言い換えれば、「リリース」は、統合の将来像がなければ今は魅力的に見えないかもしれません。

43
VonC

この答えは基本的にVonCのものと同じで、経験の少ないCIユーザー向けに段階的に説明されています。

したがって、30728cabという非常にクールなコミットがあり、このバージョンのコードを新しいリリースにしたいとします。

1)コミット用のタグを作成します

git tag -a MY_TAG_NAME 30728cab

このコマンドの後、コードに新しい変更をコミットするときと同じように、説明を入力するように求められます。

2)タグをリモートリポジトリにプッシュする

コミットでタグが自動的にプッシュされることはありません!手動でリモートにプッシュする必要があります。

git Push REMOTE_REPO_NAME REMOTE_BRANCH_NAME MY_TAG_NAME

3)ファイルをアップロードする

これで、a)GitLabリポジトリにファイルをアップロードするか、b)他の場所にアップロードして、両方の場合にリンクを保存できます。

警告:GitLabリポジトリにアップロードされたファイルは簡単に削除できず、後でそれらのリンクを見ることができません!

上記の理由により、リポジトリにバイナリをアップロードすることはお勧めしませんが、あなたはそれを求めましたので、ここに方法があります:

curl --request POST --header "Private-Token: YOUR_PRIVATE_TOKEN" --form "file=@/PATH/TO/THE/FILE/file.txt" "https://MY_GITLAB_HOSTING.COM/api/v4/projects/MY_PROJECT_ID/uploads"

プライベートトークン は、ユーザー設定->アクセストークンで作成できます。

また、本当にファイルを削除する必要がある場合プロジェクトをエクスポート 、ダウンロードしたフォルダから手動でupdatesフォルダを削除できますアーカイブ、以前のリモートリポジトリを削除し、 インポートして新しいリポジトリを作成 ダウンロードおよび変更したアーカイブ。

4)リリースを作成する

これで、最終的に Release を使用してすべてを結び付けることができます。

curl --request POST --header 'Content-Type: application/json' --header "Private-Token: YOUR_PRIVATE_TOKEN" --data '{"name": "MY_RELEASE_NAME", "tag_name": "MY_TAG_NAME", "description": "Release with the binary LINK_TO_YOUR_BINARY"}' "https://MY_GITLAB_HOSTING.COM/api/v4/projects/MY_PROJECT_ID/releases"

ご覧のとおり、Releaseは本質的に特定のタグに関連付けられており、特定のタグはその後特定のコミットに関連付けられます。これらのファイルへのリンクを提供するだけで、バイナリとの接続が実行されます。

面白い点は、descriptionMarkdown をサポートしていることですが、このような扱いにくいワンライナーでいくつかの大きな*.mdドキュメントを書くのは本当に難しいです。そこで、短いBashスクリプトを作成しました。これにより、Markdownファイルを脇に書き込んでから、それを読み取って自動的に送信することができます。

#!/bin/bash

RELEASE_NAME="$1"
TAG_NAME="$2"
PROJECT_ID="$3"
DESCRIPTION_FILE_PATH="$4"
PRIVATE_TOKEN="$5"

if [ "$5" == "" ]; then
    echo "Missing parameter! Parameters are RELEASE_NAME, TAG_NAME, PROJECT_ID, DESCRIPTION_FILE_PATH and PRIVATE_TOKEN.";
    exit 1;
fi

DESCRIPTION=''

# Load data from file
while read -r line; do
    DESCRIPTION="${DESCRIPTION}${line}\n";
done < "${DESCRIPTION_FILE_PATH}"

curl --request POST\
     --header 'Content-Type: application/json'\
     --header "Private-Token: ${PRIVATE_TOKEN}"\
     --data-binary "{\"name\": \"${RELEASE_NAME}\", \"tag_name\": \"${TAG_NAME}\", \"description\": \"${DESCRIPTION}\"}"\
     "https://MY_GITLAB_HOSTING.com/api/v4/projects/${PROJECT_ID}/releases" 

echo

だからあなたはそれを次のように使うことができます

./upload_release.sh MY_RELEASE_NAME MY_TAG_NAME MY_PROJECT_ID MY_MARKDOWN_FILE_PATH MY_PRIVATE_TOKEN

そして、これで終わりです!最初の完全なリリースがあります!

リリースの説明のヘッダーにひどいタイプミスがあったことに気付くまでは...

5)リリースを削除します(必要な場合)

ラッキーです!アップロードされたバイナリとは異なり、REST AP​​Iを使用してリリースを削除することもできます!

curl --request DELETE --header "Private-Token: MY_PRIVATE_TOKEN" "https://MY_GITLAB_HOSTING.com/api/v4/projects/MY_PROJECT_ID/releases/MY_TAG_NAME"

そして、これを連続して数回入力するのはいまだに面倒なので、別のBashスクリプトを作成しました。

#!/bin/bash

PROJECT_ID=$1
TAG_NAME=$2
PRIVATE_TOKEN=$3

if [ "$3" == "" ]; then
    echo "Missing parameter! Parameters are PROJECT_ID, TAG_NAME and PRIVATE_TOKEN.";
    exit 1;
fi

curl --request DELETE --header "Private-Token: ${PRIVATE_TOKEN}" "https://MY_GITLAB_HOSTING.com/api/v4/projects/${PROJECT_ID}/releases/${TAG_NAME}"

echo

./delete_release.sh MY_PROJECT_ID MY_TAG_NAME MY_PRIVATE_TOKENのように使用できます。

13
Eenoku

Gitlab(サーバー)自体はgitリポジトリ用です。 gitにバイナリを保存することは想定されていません。ネクサスはここに行く方法をします。リポジトリの説明またはreadmeファイルにnexusへのリンクを追加することもできます(jenkinsビルドもそこにポイントできるように)。

Gitlabと統合するGitLab Continuous Integrationをご覧ください。それはジェンキンスのようなもののようです。 Nexusのようなデータストレージが付属しているかどうかはわかりません。

1
volker

scpを使用して、GitlabCIで生成されたバイナリやレポートなどのファイルをコピーしています。

# capture test exit code
set +e
bash build/ci/test.sh; TESTS_EXIT_CODE=$?
set -e

# copy reports
sshpass -p "$SFTP_PASS" ssh -o StrictHostKeyChecking=no [email protected] "mkdir -p ${CI_REPORTS_PATH}"
sshpass -p "$SFTP_PASS" scp -r ${CI_APP_VOLUME}/tests/_output/* [email protected]:${CI_REPORTS_PATH}

# return test exit-code
exit ${TESTS_EXIT_CODE}
1
schmunk