作者:Roux | 来源:互联网 | 2023-05-18 12:11
我正在使用Gitlab,Jenkins和 - 可能 - Nexus构建一个工作流程(我需要一个工件存储).我想让GitLab存储版本/二进制文件 - 是否可以方便地进行存储?
我不希望有另一个服务可以从中下载发行版(和文档)但是以某种方式与存储库管理器集成,就像在GitHub中处理发布一样.有线索吗?
1> VonC..:
2015年11月更新:GitLab 8.2现在支持发布.
通过其API,您现在可以创建和更新与标记关联的relase.
目前,它只能将发行说明(降价文本和附件)添加到git标签(又称发行版).
首先上传发布二进制文件
创建新版本并在说明中放置上传二进制文件的链接
原始答案2015年3月
这项工作正在进行中,并在建议4156755中提出:
我们接受Ciro最小提案的合并请求:
对于https://github.com/cirosantilli/test/releases/tag/3.0下的每个存储库标记,允许上载和下载文件列表.
上传和下载可以直接从标签列表视图完成.
如果标记被删除,则上传将被销毁.(我们不接受最近评论中提到的标签消息编辑)
对该建议的评论包括:
更有趣的是下一步.
我真的想要一种方法让公共下载工件从"发布"而不能访问源代码(即除了维基,"发布",问题跟踪器之外的任何其他东西,只为项目团队创建私有源).
但是,这样的附加功能看起来更通用,我提交了一个单独的功能请求.
尽管如此,我在此重复我的观点:
虽然"发布"的简单版本仍然很好,但很多人可以轻松地在GitLab外部设置外部文件服务器并将发布/标记描述中的URL指向此服务器.
换句话说,如果没有未来的整合图景,"发布"可能看起来并不吸引人.
2> Eenoku..:
这个答案将与VonC的答案基本相同,只是针对经验不足的CI用户以逐步的方式进行了描述。
假设您拥有一个非常酷的commit 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本质上与特定的标签绑定在一起,该标签随后又与特定的提交绑定在一起。然后,只需提供指向这些文件的链接即可执行与二进制文件的连接。
有趣的是,您description
支持Markdown,但是*.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 API删除发行版!
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
。