Назад | Перейти на главную страницу

GitLab: глобальные (на уровне экземпляра) переменные для CI-сборок

Как я могу настроить глобальные переменные среды в GitLab, которые не зависят от проекта, но применяются ко всем проектам? Классические варианты использования - это ключи развертывания, учетные данные реестра докеров и информация о подключении прокси.

Люди спрашивают об этом уже три года, как вы можете видеть по следующей ссылке. К сожалению, вопрос закрыт.

https://gitlab.com/gitlab-org/gitlab-foss/issues/3897

А пока я помог себе.

Настроить

sudo vi gitlab_global_env.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# sudo pip3 install requests

import os
import requests
import sys
import time

gitlab_url = 'https://gitlab.example.com/api/v4/'

# https://gitlab.example.com/profile/personal_access_tokens
headers = {'PRIVATE-TOKEN': '***TODO***'}

lol = {
    'HTTP_PROXY': 'http://corporateproxy:8123',
    'HTTPS_PROXY': 'http://corporateproxy:8123',
    'NO_PROXY': '127.0.0.1,localhost,.local'  # max. 1024 chars!
}

r = requests.get(f'{gitlab_url}projects?per_page=100', headers=headers)  # max. 100 projects without paging!
projects = r.json()

for elt in projects:
    pid = elt['id']
    path_with_namespace = elt['path_with_namespace']
    visibility = elt['visibility']
    print(f'pid: {pid} -- path_with_namespace: {path_with_namespace} -- visibility: {visibility}')
    for k, v in lol.items():
        # https://docs.gitlab.com/ce/api/project_level_variables.html
        # https://docs.gitlab.com/ee/api/project_level_variables.html
        # Create:
        r = requests.post(f'{gitlab_url}/projects/{pid}/variables', data={'key': k, 'value': v}, headers=headers)
        create = r.json()
        if create.get('message'):
            # print(create)
            # Update:
            r = requests.put(f'{gitlab_url}/projects/{pid}/variables/{k}', data={'value': v}, headers=headers)
            update = r.json()
            if update.get('message'):
                print(update)

Бегать

sudo python3 gitlab_global_env.py

Пример вывода

pid: 1 -- path_with_namespace: group/repo -- visibility: private

Проверьте

Project, Settings, CI / CD, Variables, Collapse.

Протестировано с Python 3.6.8