上载旧版本以包含在发布管道中

时间:2019-02-12 06:52:25

标签: gitlab gitlab-ci gitlab-api

我们有一个自托管的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

然后,您将被重定向到登录页面。

1 个答案:

答案 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()
相关问题