Загрузка старых версий для включения в конвейер выпуска - PullRequest
0 голосов
/ 12 февраля 2019

У нас есть собственный сервер GitLab, и мы работаем над автоматизацией наших сборок и выпусков.У нас есть много старых выпусков, которые мы создали перед использованием GitLab CI.Некоторые из них должны быть включены в пакет выпуска для определенного программного обеспечения.Релизы не расположены ни на одном сервере, к которому легко получить доступ, поэтому было бы очень легко получить к ним доступ с нашего сервера GitLab.

Можно получить доступ к тегам из API и получить артефакты отстроить рабочие места.Кажется, невозможно добавить артефакты сборки вручную, поэтому нет возможности использовать это для старых выпусков.

Можно загружать файлы в примечания к выпуску тега.Их очень просто загрузить через веб-страницу, но я не могу найти какой-либо способ загрузить их через API.Существует такая конечная точка API:

https://docs.gitlab.com/ee/api/projects.html#upload-a-file

, но "download-a-file" не существует.

Есть ли простой способ загрузить файлы в нашу личностьХостинг GitLab, а затем загружать их через API?

Все наши репозитории имеют видимость, установленную как частную.Если вы попытаетесь получить доступ к ссылке, подобной этой, без входа в систему:

http://www.example.com/group/my-project/uploads/443568a8641b1b48fc983daea27d36c0/myfile.zip

Затем вы будете перенаправлены на страницу входа.

1 Ответ

0 голосов
/ 15 февраля 2019

В качестве временного решения я использую скрипт на 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()
...