Как избежать ошибки аутентификации пользователя Conan SSL с плагином Jenkins Artifactory? - PullRequest
0 голосов
/ 28 мая 2018

Моя компания является новичком в Conan, Artifactory и Jenkins, но мы создали несколько тестовых сценариев конвейера несколько месяцев назад и использовали плагин Jenkins Artifactory для публикации некоторых пакетов Conan на нашем сервере Artifactory.Эти сценарии теперь не работают с ошибкой сертификации SSL.

Мы используем следующие пакеты:

  • Jenkins v2.121
  • Jenkins Artifactory Plugin v2.16.1
  • Artifactory Pro v5.10.3
  • Conan v1.3.3

Наш этап "упаковать и опубликовать" в наших сценариях конвейера выглядит примерно так, когда речь идет о конфигурации Artifactory:

stage('Package and Publish') {
    def artifactory_name = "MyCompanyArtifactory"
    def artifactory_repo = "conan-local"

    def server = Artifactory.server artifactory_name
    def client = Artifactory.newConanClient()
    def serverName = client.remote.add server: server, repo: artifactory_repo

    client.run(command: "export-pkg . ci-user/stable -s os=Linux -s arch=x86_64 -s build_type=Debug")
    client.run(command: "export-pkg . ci-user/stable -s os=Linux -s arch=x86_64 -s build_type=Release")
    String myCmd = "upload MyLib/* --all -r ${serverName} --confirm"
    def bInfo = client.run(command: myCmd)
    //server.publishBuildInfo bInfo
}

Этот код работал одно время, но я считаю, что он перестал работать, когда наш ИТ-отдел переключил Artifactory на доступ HTTPS.Теперь Jenkins выдает ошибку при попытке установить пользователя Conan для нашего репо:

[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Package and Publish)
[Pipeline] getArtifactoryServer
[Pipeline] initConanClient
[shared-mylib] $ sh -c 'conan config set log.trace_file=\"/home/builduser/jenkins/workspace/shared-mylib@tmp/conan.tmp261537390058591873/conan_log.log\" '
[Pipeline] conanAddRemote
[shared-mylib] $ sh -c "conan remote add b519966f-f612-4094-b3ea-453a017cf793 https://artifactory.mycompany.com/artifactory/api/conan/conan-local "
WARN: Remotes registry file missing, creating default one in /home/builduser/jenkins/workspace/shared-rtplib@tmp/conan.tmp261537390058591873/.conan/registry.txt
[Pipeline] conanAddUser
Adding conan user 'ci-user', server 'b519966f-f612-4094-b3ea-453a017cf793'
[shared-mylib] $ sh -c ********
ERROR: HTTPSConnectionPool(host='artifactory.mycompany.com', port=443): Max retries exceeded with url: /artifactory/api/conan/conan-local/v1/users/authenticate (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:726)'),))

Это поведение не ограничивается доступом Jenkins;это также происходит, когда обычные пользователи пытаются получить доступ к репозиторию Artifactory Conan, но мы можем обойти его, добавив удаленное репо с Verify_SSL как False (в конце следующей команды):

conan remote add myco-conan-local https://artifactory.mycompany.com/artifactory/api/conan/conan-local False

Iповерьте, документация Conan указывает на то, что у нас есть два варианта:

  • Отключить проверку SSL с помощью команды conan remote (см. выше)
  • Добавить файл crt сервера вфайл cacert.pem в домашнем каталоге conan.

К сожалению, я не смог выяснить, как реализовать какое-либо из решений, когда речь идет о сценарии конвейера Jenkins.Итак, мои вопросы:

  1. Есть ли способ отключить проверку SSL с помощью команды client.remote.add (или что-то подобное) в сценарии конвейера Jenkins?
  2. Есть ли способ включить необходимый серверный сертификат через конвейерный сценарий Jenkins (чтобы он автоматически добавлялся в домашний каталог conan, специфичный для рабочей области)?

Опция # 1вероятно, предпочтительнее для более простого краткосрочного решения, но я хотел бы понять, как реализуется вариант № 2.

Спасибо за чтение.

1 Ответ

0 голосов
/ 29 мая 2018

Команда:

$ conan remote add <remote-name> <remote-url> False -f

вызывает перезапись существующего <remote-name> параметра verifyHttps = False

Хотя DSL плагина не содержит интерфейса с этим аргументом, он позволяет выполнитьпроизвольные команды, так что вы можете сделать что-то вроде:

node {
    def server = Artifactory.server "artifactory"
    def client = Artifactory.newConanClient()
    def serverName = client.remote.add server: server, repo: "conan-local" 

    stage("Setremotehttp"){
        String command = "remote add ${serverName} http://localhost:8081/artifactory/api/conan/conan-local False -f"          
        client.run(command: command)
    }
    stage("Search"){
        String command = "search zlib -r=${serverName}"          
        client.run(command: command) 
    } 
}

Требуется URL-адрес удаленного, что немного дублирует, но я проверил, и он работает, так что может быть использован в качестве обходного пути.

...