Настройка GitFlic агента при использовании самоподписного сертификата
Если сервер GitFlic Self-hosted настроен с самоподписанным сертификатом, то для корректной работы агентов необходимо выполнить ряд дополнительных настроек.
В данной инструкции описаны шаги для всех типов агентов и для агентов, запускаемых в Docker-контейнере.
Добавление сертификата в доверенные
Для всех типов агента в первую очередь необходимо добавить самоподписанный сертификат в доверенные сертификаты и в Java Key Store.
-
Скопируйте самоподписанный сертификат на сервер, где планируется запуск агентов
-
Добавьте сертификат в доверенные сертификаты
sudo cp selfsigned.crt /usr/local/share/ca-certificates/selfsigned.crt sudo update-ca-certificatessudo cp selfsigned.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust extractsudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain selfsigned.crtгде
selfsigned.crt- самоподписанный сертификат -
Импортируйте сертификат в 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 вручную.
-
Выполните регистрацию агента и убедитесь, что она завершается без ошибок
Настройка агента с типом Docker
Для агента с типом Docker необходимо передавать самоподписанный сертификат в контейнер, в котором выполняется конвейер. Данная возможность доступна в агенте версии 4.0.0 и выше.
-
Убедитесь, что используется агент версии 4.0.0 и выше
-
Убедитесь, что сертификат создан с опцией SAN (Subject Alternative Name)
Сертификат должен быть создан с указанием SAN. При использовании сертификата для
localhost, необходимо также добавить в SANhost.docker.internal. -
Настройте передачу сертификата в контейнер конвейера
Для передачи сертификата в контейнер конвейера, настройте в конфигурации агента монтирование самоподписного сертификата.
Пример:
docker.volumes[0]=/home/user/selfsigned.crt:/etc/gitflic-runner/certs/selfsigned.crtгде
/home/user/selfsigned.crt- путь до сертификата на хосте, а/etc/gitflic-runner/certs/selfsigned.crt- путь в контейнере -
Добавьте переменную
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, то необходимо собрать и использовать собственный образ агента.
-
Создайте Dockerfile и укажите базовый образ
FROM registry.gitflic.ru/company/gitflic/runner:<Версия_агента> -
Добавьте команду для копирования сертификата в образ
Пример:
COPY /home/user/selfsigned.crt /usr/local/share/ca-certificates/selfsigned.crtгде
/home/user/selfsigned.crt- путь на хосте до самоподписного сертификата -
Добавьте команды для импорта данного сертификата в доверенное хранилище и в 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" -
Соберите образ агента
docker build -t registry.gitflic.ru/company/gitflic/runner:custom . -
Создайте файл для дополнительных параметров агента, например
additional.properties, и укажите в нем параметр с Volumedocker.volumes[0]=/home/user/selfsigned.crt:/etc/gitflic-runner/certs/selfsigned.crtВместо
/home/user/selfsigned.crtукажите путь к самоподписному сертификату на хосте, так как внутри контейнера конвейера задействуется сокет Docker хоста, а не контейнера с агентом. -
Скопируйте созданный файл в Docker Volume
runner-configdocker run --rm \ -v runner-config:/data \ -v "$(pwd)":/src \ alpine cp /src/additional.properties /data/Команда выполняется в директории с файлом
additional.properties, созданным в п.5 -
Добавьте переменную
CA_CERTIFICATES_PATHв CI/CDvariables: CA_CERTIFICATES_PATH: /etc/gitflic-runner/certs/selfsigned.crt -
Запустите агента
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, разместить его в реестре и использовать повсеместно:
-
Создайте Dockerfile по аналогии с образом агента, в качестве базового образа укажите официальный образ
gitflic-runner-helperFROM 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- самоподписанный сертификат -
Соберите образ
docker build -t registry.gitflic.ru/company/gitflic/gitflic-runner-helper:custom . -
Добавьте в агента параметр для указания собранного образа
application.propertiesrunner.helperImage=registry.gitflic.ru/company/gitflic/gitflic-runner-helper:customdocker-compose.yamlenvironment: HELPER_IMAGE: "registry.gitflic.ru/company/gitflic/gitflic-runner-helper:custom" -
Запустите агента