Перейти к содержанию

Настройка GitFlic агента при использовании самоподписного сертификата

Если сервер GitFlic Self-hosted настроен с самоподписанным сертификатом, то для корректной работы агентов необходимо выполнить ряд дополнительных настроек.

В данной инструкции описаны шаги для всех типов агентов и для агентов, запускаемых в Docker-контейнере.

Добавление сертификата в доверенные

Для всех типов агента в первую очередь необходимо добавить самоподписанный сертификат в доверенные сертификаты и в Java Key Store.

  1. Скопируйте самоподписанный сертификат на сервер, где планируется запуск агентов

  2. Добавьте сертификат в доверенные сертификаты

    sudo cp selfsigned.crt /usr/local/share/ca-certificates/selfsigned.crt
    sudo update-ca-certificates 
    
    sudo cp selfsigned.crt /etc/pki/ca-trust/source/anchors/
    sudo update-ca-trust extract
    
    sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain selfsigned.crt
    

    где selfsigned.crt - самоподписанный сертификат

  3. Импортируйте сертификат в Java Key Store (JKS)

    keytool -import -noprompt \
        -storepass changeit \
        -trustcacerts \
        -alias selfsigned-cert \
        -file selfsigned.crt \
        -keystore "$JAVA_HOME/lib/security/cacerts"
    

    Убедитесь, что переменная $JAVA_HOME доступна в вашем окружении. В противном случае укажите путь до инсталляции OpenJDK вручную.

  4. Выполните регистрацию агента и убедитесь, что она завершается без ошибок

Настройка агента с типом Docker

Для агента с типом Docker необходимо передавать самоподписанный сертификат в контейнер, в котором выполняется конвейер. Данная возможность доступна в агенте версии 4.0.0 и выше.

  1. Убедитесь, что используется агент версии 4.0.0 и выше

  2. Убедитесь, что сертификат создан с опцией SAN (Subject Alternative Name)

    Сертификат должен быть создан с указанием SAN. При использовании сертификата для localhost, необходимо также добавить в SAN host.docker.internal.

  3. Настройте передачу сертификата в контейнер конвейера

    Для передачи сертификата в контейнер конвейера, настройте в конфигурации агента монтирование самоподписного сертификата.

    Пример:

    docker.volumes[0]=/home/user/selfsigned.crt:/etc/gitflic-runner/certs/selfsigned.crt
    

    где /home/user/selfsigned.crt - путь до сертификата на хосте, а /etc/gitflic-runner/certs/selfsigned.crt - путь в контейнере

  4. Добавьте переменную CA_CERTIFICATES_PATH в CI/CD

    Добавьте в CI/CD переменную CA_CERTIFICATES_PATH (например, через настройки CI/CD в веб-интерфейсе или в файле gitflic-ci.yaml и в качестве ее значения укажите путь до сертификата в файловой системе контейнера, который вы прописали в конфигурации агента (п.3)

    variables:
      CA_CERTIFICATES_PATH: /etc/gitflic-runner/certs/selfsigned.crt
    

Настройка агента, запускаемого в Docker контейнере

Если агент запускается в Docker контейнере или через официальный Docker Compose, то необходимо собрать и использовать собственный образ агента.

  1. Создайте Dockerfile и укажите базовый образ

    FROM registry.gitflic.ru/company/gitflic/runner:<Версия_агента>
    
  2. Добавьте команду для копирования сертификата в образ

    Пример:

    COPY /home/user/selfsigned.crt /usr/local/share/ca-certificates/selfsigned.crt
    

    где /home/user/selfsigned.crt - путь на хосте до самоподписного сертификата

  3. Добавьте команды для импорта данного сертификата в доверенное хранилище и в Java Key Store

    RUN update-ca-certificates
    RUN keytool -import -noprompt \
        -storepass changeit \
        -trustcacerts \
        -alias selfsigned-cert \
        -file /usr/local/share/ca-certificates/selfsigned.crt \
        -keystore "$JAVA_HOME/lib/security/cacerts"
    
  4. Соберите образ агента

    docker build -t registry.gitflic.ru/company/gitflic/runner:custom .
    
  5. Создайте файл для дополнительных параметров агента, например additional.properties, и укажите в нем параметр с Volume

    docker.volumes[0]=/home/user/selfsigned.crt:/etc/gitflic-runner/certs/selfsigned.crt
    

    Вместо /home/user/selfsigned.crt укажите путь к самоподписному сертификату на хосте, так как внутри контейнера конвейера задействуется сокет Docker хоста, а не контейнера с агентом.

  6. Скопируйте созданный файл в Docker Volume runner-config

    docker run --rm \
      -v runner-config:/data \
      -v "$(pwd)":/src \
      alpine cp /src/additional.properties /data/
    

    Команда выполняется в директории с файлом additional.properties, созданным в п.5

  7. Добавьте переменную CA_CERTIFICATES_PATH в CI/CD

    variables:
      CA_CERTIFICATES_PATH: /etc/gitflic-runner/certs/selfsigned.crt
    
  8. Запустите агента

    docker run \
      --env "REG_URL=<URL полученный в приложении GitFlic>" \
      --env "REG_TOKEN=<Регистрационный токен агента, полученный в интерфейсе GitFlic>" \
      --volume runner-config:/gitflic-runner/config \
      --volume runner-log:/gitflic-runner/log \
      --volume //var/run/docker.sock://var/run/docker.sock \
      --detach \
    registry.gitflic.ru/company/gitflic/runner:custom
    

    Укажите собранный образ в файле docker-compose.yaml и выполните запуск

    docker compose down && docker compose up
    

Самостоятельная сборка вспомогательного образа для агента с типом Docker

В случае, если вы не хотите использовать решение, описанное выше, и указывать дополнительные параметры для каждого агента, вы можете собрать собственный вспомогательный образ для работы агента с типом Docker, разместить его в реестре и использовать повсеместно:

  1. Создайте Dockerfile по аналогии с образом агента, в качестве базового образа укажите официальный образ gitflic-runner-helper

    FROM registry.gitflic.ru/company/gitflic/gitflic-runner-helper:<версия_агента>
    
    COPY ./selfsigned.crt /usr/local/share/ca-certificates/custom-certs/
    
    RUN update-ca-certificates && \
        keytool -import -noprompt \
        -storepass changeit \
        -trustcacerts \
        -alias selfsigned-cert \
        -file /usr/local/share/ca-certificates/custom-certs/selfsigned.crt \
        -keystore /etc/ssl/certs/java/cacerts
    

    Где selfsigned.crt - самоподписанный сертификат

  2. Соберите образ

    docker build -t registry.gitflic.ru/company/gitflic/gitflic-runner-helper:custom .
    
  3. Добавьте в агента параметр для указания собранного образа

    application.properties
    runner.helperImage=registry.gitflic.ru/company/gitflic/gitflic-runner-helper:custom
    
    docker-compose.yaml
    environment:
        HELPER_IMAGE: "registry.gitflic.ru/company/gitflic/gitflic-runner-helper:custom"
    
  4. Запустите агента