Jenkins Artifactory Plugin vs. Maven - PullRequest
       41

Jenkins Artifactory Plugin vs. Maven

0 голосов
/ 07 апреля 2020

Пара вопросов:

  1. Есть ли что-то очевидное, чего мне не хватает в плане авторизации с учетными данными и плагином?
  2. Почему происходит сбой загрузки на файл pom, но не фактический артефакт?
  3. В чем преимущество использования плагина Jenkins Artifactory вместо использования команд Maven?

Я пытался настроить конвейер Jenkins с помощью Jenkins Artifactory Plugin. Я продолжаю сталкиваться с ответом 401 от Artifactory, когда достигается шаг, содержащий rtMavenRun. В журналах я вижу это:

Примечание: Я заменил URL для краткости

Downloading from eti-artifacts-snapshot: http://<URL>/work-queue-api/1.1.0-SNAPSHOT/maven-metadata.xml
Uploading to eti-artifacts-snapshot: http://<URL>/work-queue-api/1.1.0-SNAPSHOT/work-queue-api-1.1.0-20200407.120051-1.jar
Progress (1): 0.5/66 MB
Progress (1): 1.0/66 MB
....
Progress (1): 64/66 MB
Progress (1): 65/66 MB
Progress (1): 66/66 MB
Progress (1): 66 MB   

Uploading to eti-artifacts-snapshot: http://<URL>/libs-snapshot/com/etisoftware/work-queue-api/1.1.0-SNAPSHOT/work-queue-api-1.1.0-20200407.120051-1.pom
Progress (1): 4.1/7.2 kB
Progress (1): 7.2 kB    

[main] INFO org.apache.maven.cli.event.ExecutionEventLogger - ------------------------------------------------------------------------
[main] INFO org.apache.maven.cli.event.ExecutionEventLogger - BUILD FAILURE
[main] INFO org.apache.maven.cli.event.ExecutionEventLogger - ------------------------------------------------------------------------
[main] INFO org.apache.maven.cli.event.ExecutionEventLogger - Total time:  01:06 min
[main] INFO org.apache.maven.cli.event.ExecutionEventLogger - Finished at: 2020-04-07T08:00:57-04:00
[main] INFO org.apache.maven.cli.event.ExecutionEventLogger - ------------------------------------------------------------------------
[main] ERROR org.apache.maven.cli.MavenCli - Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-cli) on project work-queue-api: Failed to deploy artifacts: Could not transfer artifact work-queue-api:jar:1.1.0-20200407.120051-1 from/to eti-artifacts-snapshot (http://<URL>/libs-snapshot): Transfer failed for http://<URL>/artifactory/libs-snapshot-local/com/etisoftware/work-queue-api/1.1.0-SNAPSHOT/work-queue-api-1.1.0-20200407.120051-1.jar 401 Unauthorized -> [Help 1]

Обратите внимание, что, похоже, загружается файл JAR, но это терпит неудачу на пом. Таким образом, очевидным ответом является то, что у пользователя нет прав на загрузку некоторых вещей. Конфигурация артефакта в Jenkins использует те же учетные данные, что и мой файл m2/settings.xml. Когда я запускаю mvn clean package deploy, он работает как положено.

Затем я изменил свой Jenkinsfile, чтобы он просто использовал команды mvn напрямую, и он тоже работал, как и ожидалось. Опять же это будет использовать файл настроек. xml.

Это конвейер при использовании плагина. Это не работает, я получаю ответ 401.

pipeline {
    agent any
    stages {
        stage ('Artifactory configuration') {
            steps {
                rtMavenDeployer (
                    id: "RT_MAVEN_DEPLOYER",
                    serverId: "ETI_ARTIFACTORY",
                    releaseRepo: "libs-release-local",
                    snapshotRepo: "libs-snapshot-local"
                )

                rtMavenResolver (
                    id: 'RT_MAVEN_RESOLVER',
                    serverId: 'ETI_ARTIFACTORY',
                    releaseRepo: 'libs-release',
                    snapshotRepo: 'libs-snapshot'
                )   
            }
        }        
        stage('Maven exec') { 
            steps {
                rtMavenRun (
                    pom: 'pom.xml',
                    goals: 'clean package deploy',
                    tool: 'M2_TOOL',
                    resolverId: 'RT_MAVEN_RESOLVER',
                    deployerId: 'RT_MAVEN_DEPLOYER'
                )
            }
        }
        stage ('Publish build info') {
            steps {
                rtPublishBuildInfo (
                    serverId: "ETI_ARTIFACTORY"
                )
            }
        }
        stage('Build a Docker image and push to Artifactory'){
            steps {
                sh 'mvn docker:build docker:push'
            }
        }
    }
}

Это настройка конвейера с помощью команд оболочки, это работает.

pipeline {
    agent any
    stages {
        stage('Maven exec') { 
            steps {
                sh 'mvn clean package deploy'
            }
        }
        stage('Build a Docker image and push to Artifactory'){
            steps {
                sh 'mvn docker:build docker:push'
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

В этом ответе рассматриваются преимущества использования API конвейерного конвейера Artifactory по сравнению с непосредственным вызовом maven (другой вопрос об ответе 401 уже был дан здесь). Существует три основных преимущества использования API конвейера Artifactory.

  1. Параллельное развертывание Maven - Недавно мы опубликовали этот пост в блоге, в котором обсуждается это преимущество .

  2. Безопасность - При использовании API конвейерного конвейера Artifactory вы можете управлять учетными данными в Jenkins, а не сохранять их в настройках . xml или как переменные среды. Дженкинс позаботится о шифровании учетных данных и управлении ими.

  3. Улучшенный контроль - С помощью API конвейера Artifactory вам больше не нужно управлять URL-адресами серверов Artifactory и хранилища в настройках . xml или пом. xml. Вы имеете полный контроль над разрешением сборки и целями развертывания из сценария конвейера. Вы можете узнать больше об этом здесь .

0 голосов
/ 07 апреля 2020

Как указывает Эяль Бен Моше , решение состоит в том, чтобы использовать цель "установки", а не цель "развертывания". Который, если бы я правильно прочитал пример , я бы увидел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...