Jenkins声明性管道,从Artifactory下载最新上传(构建)并获取属性

时间:2019-06-12 09:29:02

标签: jenkins-pipeline artifactory jenkins-groovy jfrog-cli

非常欢迎您解决有关该问题的任何建议! :)

可以下载最新版本,但该对象不包含任何属性。 是否可以从下载的版本中获取属性?

目标是获得一个带有预定义值的输入框,其中显示了先前的版本,即“ R1G”,并为用户提供了将值编辑为R2A或任何其他值或仅中止的选项(中止表示将存在没有版本)。 用户还可以选择不执行任何操作,这将导致超时并最终中止

我想

  • 从Artifactory存储库下载最新版本
  • 将内部版本号存储在“ def prev_build”中
  • 在输入中显示要更新的用户的prev_build(自定义编号)

'''一些代码

SELECT md.username,
       m.id,
       NVL2( md.sector,      m.sector,      NULL ) AS sector,
       NVL2( md.industry,    m.industry,    NULL ) AS industry,
       NVL2( md.subindustry, m.subindustry, NULL ) AS subindustry
FROM   ( SELECT *
         FROM   metadata
         PIVOT ( MAX(1) FOR short_desc IN (
           'sector'      AS sector,
           'Industry'    AS industry,
           'Subindustry' AS subindustry
         ) ) ) md
       INNER JOIN master m
       ON ( md.org_id = m.org_id )
WHERE  md.org_id = 1

'''片段结尾

输出为null或我给定的默认值var,而不是预期的版本号。

2 个答案:

答案 0 :(得分:1)

是的,首先,这些属性应该存在于您要下载的工件中。

build.number等是工件的buildinfo.json文件的一部分。这些不是属性,而是某种元数据。该信息将在工件中的“构建”菜单下可见。选择仓库和内部版本号。

在最后一列/选项卡上将有buildinfo。单击该按钮-该文件将保存与工件对应的所有所需信息。

build.number和其他信息将由CI推送/上载到工件。

例如,在Jenkins的情况下,尝试推送至工件“捕获并发布构建信息”时有一个选项可用->此步骤可以完成

答案 1 :(得分:0)

非常感谢您的帮助。 我看到您的建议有效,但是当我得到您的答案时,我已经实施了另一个效果很好的解决方案

我正在使用可用的查询语言。  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)
                                }

                            }
                        }