Nexus中的jar的URL由Rundeck Dows中的maven_artifact生成,与Nexus中的jar的名称不匹配

时间:2019-10-08 10:09:54

标签: maven jenkins nexus rundeck

目标: 我们为Jenkins构建设计了管道脚本。 -Jenkins应该从GITLAB签出代码 -然后构建jar并将其部署到Nexus Repository。 -然后Jenkins应该触发Rundeck Server执行其Playbook。 -Rundeck Playbook由maven_artifact组成,可以从nexus存储库下载jar并将其部署到目标服务器。

问题: -构建jar之后,当詹金斯(Jenkins)将jar上传到Nexus时,时间戳会附加到jar的名称之后。例如: [INFO]上传:https://nexus_server/repository/maven-snapshots/app_name/1.0.0-SNAPSHOT/app_name-1.0.0-20191007.101057-7.jar

  • 当Rundeck中的maven_artifact函数尝试从Nexus Repository下载时,自动生成的时间戳与Nexus Repository中的时间戳不匹配,导致 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剧本脚本:

---
- 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

观察: 我观察到,如果我从STS IDE进行mvn clean install deploy,则jar将上传到Nexus Repository。然后,如果我直接运行Rundeck Server,则确切的时间戳是由Rundeck中的maven_artifact方法生成的。但是,当我从Jenkins服务器进行构建时,似乎rundeck生成的时间戳与nexus存储库中的时间戳不匹配。

任何帮助将不胜感激。

0 个答案:

没有答案