我们有一个自托管的GitLab服务器,正在致力于自动化我们的构建和发布。在使用GitLab CI之前,我们已经构建了许多旧版本。其中某些应包含在某些软件的发行包中。这些版本不在任何易于访问的服务器上,因此,如果可以从我们的GitLab服务器进行访问,将会非常容易。
可以从API访问标签并从构建作业中获取工件。似乎不可能手动添加构建工件,因此无法在旧版本中使用它。
可以将文件上传到标签的发行说明中。通过网页下载这些内容非常简单,但是我找不到通过API下载这些内容的任何方法。有这个API端点:
https://docs.gitlab.com/ee/api/projects.html#upload-a-file
但没有“下载文件”。
是否有一种简单的方法可以将文件上传到我们自托管的GitLab,然后通过API下载文件?
我们所有的存储库的可见性都设置为私有。如果您尝试不登录而访问这样的链接:
http://www.example.com/group/my-project/uploads/443568a8641b1b48fc983daea27d36c0/myfile.zip
然后,您将被重定向到登录页面。
答案 0 :(得分:0)
作为目前的解决方法,我使用python脚本简单地登录页面并获取文件。这需要用户名和密码。我设置了一个新用户,该用户只能访问需要它的特定项目,因此它应该足够安全,可以在该项目的构建脚本中使用。
import argparse
import sys
import mechanize
def login_and_download(url, user, password):
br = mechanize.Browser()
br.set_handle_robots(False)
br.open(url)
br.select_form(id = 'new_user')
br['user[login]'] = user
br['user[password]'] = password
response = br.submit()
filename = url.split('/')[-1] #Last part of url
with open(filename, 'wb') as f:
f.write(response.get_data())
def main():
parser = argparse.ArgumentParser(description = 'Downloads files from a private git repo')
parser.add_argument('url', help = 'The URL to download')
parser.add_argument('user', help = 'The username to use')
parser.add_argument('password', help = 'The password to use')
args = parser.parse_args()
if len(sys.argv) == 1:
parser.print_help()
sys.exit(1)
login_and_download(args.url, args.user, args.password)
if __name__ == '__main__':
main()