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

Настройка 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 контейнере, то необходимо внести правки в Dockerfile агента и выполнить пересборку образа.

  1. Добавьте команду для копирования сертификата с хоста в контейнер с агентом

    Пример:

    COPY /home/user/selfsigned.crt /cert/selfsigned.crt
    

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

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

    RUN keytool -import -noprompt \
        -storepass changeit \
        -trustcacerts \
        -alias my-selfsigned-cert \
        -file /cert/selfsigned.crt \
        -keystore "$JAVA_HOME/lib/security/cacerts"
    
  3. Пересоберите образ и запустите агента

    docker compose up --build
    

Дополнительно

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

  1. Внесите правки в ENTRYPOINT, чтобы добавить строку с монтированием сертификата в конфигурацию агента

    ENTRYPOINT ([ -f config/application.properties ] && java -jar runner.jar start --config=config/application.properties) || 
    (java -jar runner.jar register --url ${REG_URL} --registration-token ${REG_TOKEN} && cat application.properties >> 
    config/application.properties && echo "docker.volumes[0]=/home/user/selfsigned.crt:/etc/gitflic-runner/certs/selfsigned.crt" >> 
    config/application.properties && java -jar runner.jar start --config=config/application.properties)
    

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

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

    variables:
      CA_CERTIFICATES_PATH: /etc/gitflic-runner/certs/selfsigned.crt
    
  3. Пересоберите образ и запустите агента

    docker compose up --build