Jenkins декларативный канал, загрузите последнюю загрузку (сборку) из Artifactory и получите свойства - PullRequest
0 голосов
/ 12 июня 2019

Любые предложения по этой небольшой проблеме очень приветствуются! :)

Он отлично работает для загрузки последней сборки, но объект не содержит никаких свойств. Можно ли получить свойства из загруженной сборки?

Цель состоит в том, чтобы получить поле ввода с предопределенным значением, отображающим предыдущую версию, т.е. «R1G», и дать пользователю возможность изменить значение, например, R2A или любое другое значение, или только прервать (отмена означает, что будет нет версии). У пользователя также есть возможность ничего не делать, если время будет завершено, и, наконец, отмена .

Я хочу

  • скачать последнюю сборку из репозитория Artifactory
  • сохранить build.number в "def prev_build"
  • отображать prev_build во входных данных для обновляемого пользователя (индивидуальный номер)

'' 'некоторый код

echo 'Publiching Artifact.....'
        script{
            def artifactory_server_down=Artifactory.server 'Artifactory'
            def downLoad = """{
            "files": 
                [
                    {
                        "pattern": "reponame/",
                        "target": "${WORKSPACE}/prev/",
                        "recursive": "false",
                        "flat" : "false"
                    }
                ]
            }"""

            def buildInfodown=artifactory_server_down.download(downLoad)
            //Dont need to publish because I only need the properties
            //Grab the latest revision name here and use it again
            echo 'Retriving revision from last uploaded build.....'
            env.LAST_BUILD_NAME=buildInfodown.build.number
            //Yes its a map and I have tried with ['build.number'] but the map is empty
        }
        echo "Previous build name is $env.LAST_BUILD_NAME"  //Will not contain the old (latest)

'' 'Конец фрагмента

Вывод равен нулю или значение по умолчанию, которое я дал var, а не ожидаемый номер версии.

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Да, во-первых, свойства должны присутствовать в артефактах, которые вы пытаетесь загрузить.

Номер build.number и т. Д. Являются частью файла buildinfo.json артефактов.это не свойства, а какие-то метаданные.эта информация будет видна в меню "Builds" в артефакте.Выберите репо и номер сборки.

В последнем столбце / вкладке будет buildinfo.Нажмите на него - этот файл будет содержать всю необходимую вам информацию, соответствующую артефактам.

Файл build.number и другая информация будут переданы / загружены в артефакт CI.

Например, в случае с Jenkins существует опция, доступная при попытке отправить в артефакт «Захват и публикация информации о сборке» -> этот шаг делает работу

0 голосов
/ 17 июня 2019

Большое спасибо за вашу помощь.Я вижу, что ваше предложение работает, но когда я получил ваш ответ, уже было реализовано другое решение, которое также хорошо работает

Я использую доступный язык запросов.https://www.jfrog.com/confluence/display/RTF/Artifactory+Query+Language Незадолго до объявления моего конвейера в файле конвейера я добавил

 def artifactory_url = 'https://lote.corp.saab.se:8443/artifactory/api/search/aql'
 def artifactory_search = 'items.find({ "repo":"my_repo"},{"@product.productNumber": 
 {"$match":"produktname"}}).sort({"$desc":["created"]})'
 pipeline
    {

и ...

 stage('Get latest revision') {
                        steps {
                            script {
                                def json_text = sh(script: "curl -H 'X-JFrog-Art-Api:${env.RECIPE_API_KEY}' -X POST '${artifactory_url}' -d '${artifactory_search}' -H 'Content-Type: text/plain' -k", returnStdout: true).trim()
                                def response = readJSON text: json_text
                                VERSION = response.results[0].path;
                                echo "${VERSION}"
                                println 'using each & entry'
                                response[0].each{ entry ->
                                    println 'Key:' + entry.key + ', Value:' + 
                            entry.value
                                }
                            }
                        }
                    }

                    stage('Do relesase on master')
                            {
                            when
                                {
                                    branch "master"
                                }
                            options {
                                    timeout(time: 1, unit: 'HOURS')
                                }
                            steps {
                                script{
                                    RELEASE_SCOPE = input message: 'User input 
                                  required', ok: 'Ok to go?!',
                                    parameters: [
                                       choice(name: 'RELEASE_TYPE', choices: 
                                       'Artifactory\nClearCaseAndArtifactory\nAbort', 
                                        description: 'What is the release scope?'),
                                        string(name: 'VERSION', defaultValue: 
                                    VERSION, description: '''Edit release name please!!''',  
                              trim: false)
                                    ]
                                 }

                                    echo 'Build both RPM and Zip packages'
                                    ... gradlew -Pversion=${RELEASE_SCOPE['VERSION']} clean buildPackages"

                                script {
                                    def artifactory_server = Artifactory.server 'Artifactory'
                                    def buildInfo = Artifactory.newBuildInfo()
                                    def uploadSpec = """{
                                        "files":[
                                                {
                                                  "pattern": "${env.WORKSPACE}/prodname/release/build/distributions/prodname*.*",
                                                  "target": "test_repo/${RELEASE_SCOPE['VERSION']}/",
                                                  "props": "product.name=ProdName;build.name=${JOB_NAME};build.number=${env.BUILD_NUMBER};product.revision=${RELEASE_SCOPE['VERSION']};product.productNumber=produktname"
                                                }
                                            ]
                                        }"""
                                        println(uploadSpec)
                                        artifactory_server.upload(uploadSpec)
                                }

                            }
                        }                       
...