URL банку в Nexus, сгенерированную maven_artifact в Rundeck, не совпадает с именем баночки в Nexus - PullRequest
0 голосов
/ 08 октября 2019

Цель: Мы разработали конвейерные сценарии для сборки Jenkins. - Дженкинс должен получить код из GITLAB. - Затем собрать и развернуть jar в хранилище Nexus. - тогда Дженкинс должен запустить Rundeck Server для запуска своей Playbook. - Rundeck Playbook состоит из maven_artifact, позволяющего загрузить банку из репозитория Nexus и развернуть ее на целевом сервере.

Проблема: - После создания баночки, когда Дженкинс загружает банку в Nexus,отметка времени добавляется к названию банки. Например: [INFO] Загрузка: https://nexus_server/repository/maven-snapshots/app_name/1.0.0-SNAPSHOT/app_name-1.0.0-20191007.101057-7.jar

  • Когда функция maven_artifact в Rundeck пытается загрузить ее из репозитория Nexus, метка времени, которая генерируется автоматически, не совпадает с меткой времени в репозитории Nexusчто приводит к ошибке Http 404.

Журнал ошибок в Rundeck:

"Failed to download MD5\", lambda r: r.read())\r\n  File \"/tmp/ansible_3jIAXq/ansible_module_maven_artifact.py\", line 337, in _request\r\n    raise ValueError(failmsg + \" because of \" + info['msg'] + \"for URL \" + url_to_use)\r\nValueError: Failed to download MD5 because of HTTP Error 404: app_name/1.0.0-SNAPSHOT/app_name-1.0.0-20191007.120824-9.jar.md5for URL https://nexus_server/repository/maven-snapshots/app_name/1.0.0-SNAPSHOT/app_name-1.0.0-20191007.120824-9.jar.md5\r\n", 
"msg": "MODULE FAILURE", 

Сценарий конвейера Jenkins:

#!groovy
pipeline {
    agent { label 'maven' }
        options {
        skipDefaultCheckout()
        disableConcurrentBuilds()
        timeout(time: 1, unit: 'HOURS')
        buildDiscarder(logRotator(daysToKeepStr: '2'))
    }
     environment {
        Environmental_Variables_initialization
    }


    stages {

        stage ('Extract Application Info') {
            steps {
                script{
                    env.APP_NAME="${env.JOB_NAME}"
                    int left = env.APP_NAME.lastIndexOf('/', env.APP_NAME.lastIndexOf('/') - 1)
                    int right = env.APP_NAME.lastIndexOf('/')
                    env.APP_NAME = env.APP_NAME.substring(left+1, right)
                    env.APPLICATION_HOME_DIR  = "$APPLICATIONS_ROOT_DIR/${env.APP_NAME}"
                    echo "Ok. I will run for ${env.APP_NAME}."
                }
            }
            post {
                failure {
                    script { env.FAILURE_STAGE = 'Extract Application Info' }
                }
            }
        }

        stage ('Checkout Source') {
            steps {
                script{
                        git branch: "master", credentialsId: 'user_id', url: "https://GITLAB_Server/${GIT_GROUP}/${APP_NAME}.git", changelog: false, poll: false
                }
            }
            post {
                failure {
                    script { env.FAILURE_STAGE = 'Checkout Source' }
                }
            }
        }

        stage ('Build Source') {
            environment {
                MAVEN_OPTS = '-Xmx256m'
            }
            steps {
                sh 'mvn -B clean deploy -DargLine="-Xmx256m" -Dmaven.test.skip=true -DrunSuite=' + UNIT_TEST_SUITE
            }
            post {
                failure {
                    script { env.FAILURE_STAGE = 'Build Source' }
                }
            }
        }

        stage ('Code Analysis') {
            environment {
                MAVEN_OPTS = '-Xmx256m'
                SONAR_RUNNER_OPTS='-Xmx256m'
            }
            steps {
                sh 'mvn -B sonar:sonar -Dsonar.host.url=https://SONAR_SERVER -Dsonar.scm.disabled=true'
            }
            post {
                failure {
                    script { env.FAILURE_STAGE = 'Code Analysis' }
                }
            }
        }

        stage('Call Rundeck') {
            steps{
                script {
                    FunctionToTriggerRundeckServer([
                        jobID        : 'UUID of the job in Rundeck Server', 
                        rundeckUrl   : 'https://RUNDECK_SERVER/',
                        jobParameters: [
                            NEXUS_URL                  : "https://NEXUS_SERVER/repository/maven-snapshots",
                            VERSION                    : "1.0.0",
                            DEST                       : "/directory"
                        ],
                        credentialID : "SUserId"
                    ])
                }

            }
        }
    }
    post {
        always {
            cleanWs()
            sh 'echo "All stages finished running and workspace was cleaned."'
        }
        success {
            sh ("echo 'Job finished successfully.'")
        }

        failure {
            sh ("echo 'Job failed.'")
        }//failure
    }//post

}//pipeline

Сценарий Rundeck Playbook:

---
- name: Spring Batch Application
  hosts: "{{ SERVER }}"
  tasks:
  - maven_artifact:
      group_id: com.groupId
      artifact_id: app_name
      repository_url: '{{ NEXUS_URL }}'
      dest: '{{ DEST }}/app_name-{{ VERSION }}.jar'
      username: userId
      validate_certs: false
      state: present
      mode: 0755

Наблюдение: Я заметил, что если я выполняю mvn clean install deploy из STS IDE, jar загружается в репозиторий Nexus. и затем, если я запускаю сервер Rundeck напрямую, тогда точная метка времени генерируется методом maven_artifact в Rundeck. Но когда я делаю сборку с сервера Jenkins, создается впечатление, что сгенерированная временная метка временная метка не совпадает с временной меткой в ​​хранилище nexus.

Любая помощь приветствуется.

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