我正在使用Gitlab、Jenkins和--可能还有Nexus构建一个工作流(我需要一个工件存储)。我想让GitLab来存储GitLab--能以方便的方式存储吗?
我不希望有另一个可以下载发行版(和文档)的服务,而是让它以某种方式集成到存储库管理器中,就像在例如GitHub中处理版本一样。有什么线索吗?
发布于 2015-03-12 07:13:40
2020年10月更新:
GitLab 13.5现在提供:
将二进制资产附加到发布 如果您目前由于无法将二进制文件附加到发行版而没有在发行版中使用GitLab,那么您的工作流程就会变得简单得多。 现在您可以将二进制文件附加到来自
gitlab.ci-yml
的发布标记上。这扩展了对发布资产的支持,使其包括二进制文件,而不仅仅是资产链接或源代码。这使得您的开发团队更容易采用GitLab并使用它来自动化您的发布过程。
更新2015年11月:GitLab 8.2现在支持发行版。
有了它的API,现在可以使用创建和更新与标记关联的关系酶了。
现在,它只是向git标签(也就是发布版)添加发行说明(标记文本和附件)的能力。
更新2019年5月: GitLab 1.11引入了一个有趣的"客人获得免费服务":
现在,项目的来宾用户可以查看发布页面上发布的版本。 --它们将能够下载您发布的工件,但不允许下载源代码,也不允许查看存储库信息(如标记和提交)。
原答复:2015年3月
这正在进行中,并在建议4156755中提出
我们正在接受Ciro提出的最低限度的合并请求:
对该建议的评论包括:
让它更有趣的是下一步。 我真的很想让公众从“发行版”下载工件,而不需要访问源代码(也就是说,使源代码成为项目团队的私有资源,除了wiki、"releases“、发布跟踪器之类的东西)。但是,这样的附加特性看起来更通用,而且i 为此提交了一个单独的特性请求。不过,我在此重申我的观点: 虽然简化版本的"releases“仍然不错,但许多人可以轻松地设置外部文件服务器,并将发布/标记描述中的URL指向GitLab之外的该服务器。 换句话说,如果没有一些未来的集成图景,“发行版”现在可能看起来就没有吸引力了。
发布于 2019-03-29 02:28:41
这个答案将基本上是相同的,从VonC,刚刚描述了一步一步的方式,为经验较少的CI用户。
因此,假设您有一个非常酷的commit 30728 say,您希望将这个版本的代码作为一个新版本.
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)创建一个发行版
现在,我们终于可以使用发布将所有这些联系在一起了。
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"
您可以看到,该版本本质上是与特定标记绑定的,该标记随后被绑定到特定的提交。然后,只需提供指向这些文件的链接就可以执行与二进制文件的连接。
有趣的是,您的description
支持降价,但是很难用这样麻烦的一行代码来编写更大的*.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删除您的版本!
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
一样使用。
发布于 2019-09-14 04:04:01
我使用用python编写的命令行工具作为快捷方式。在前面的答案中描述的API方法的一些步骤(上传、发布、删除发布)。
您可以检查源代码或者自己使用它。
对于更简单的版本,如果有人对使用python和requests.py进行这些操作感兴趣,这是非常简单的。
上传
import requests
secret_token = "<your secret token>"
project_id = "<your project id>"
file_path = "your_file.txt"
api_root = "https://gitlab.com/api/v4"
headers = {
'PRIVATE-TOKEN': secret_token,
}
uri = '{}/projects/{}/uploads'.format(api_root, project_id)
files = {
'file': open(file_path, 'rb')
}
r_upload = requests.post(uri, headers=headers, files=files)
if(r_upload.status_code != 201 and r_upload.status_code != 200):
raise ValueError(f"Upload API responded with unvalid status {r_upload.status_code}") # noqa: E501
upload = r_upload.json()
Upload返回一个带有json的、链接和标记格式的链接。我发现标记格式的链接对于发布描述非常有用。因为你必须自己把链接添加到描述中。
用于创建一个发行版
import requests
secret_token = "<your secret token>"
project_id = "<your project id>"
api_root = "https://gitlab.com/api/v4"
desc = """
Your release description. **You can use markdown !**
Don't forget to add download link here.
"""
headers = {
'PRIVATE-TOKEN': secret_token,
}
data = {
"description": desc
}
r_new_release = requests.post(uri, data=data, headers=headers)
if(r_new_release.status_code != 201 and r_new_release.status_code != 200):
raise ValueError(f"Releases API responded with invalid status {r_new_release.status_code}")
new_release = r_new_release.json()
JSON响应是发布。
对于其他步骤,基本上遵循API指南并进行调整。他们都很相似。
https://stackoverflow.com/questions/29013457
复制相似问题