将构建信息发布到 jenkins 的通用 artefactory 仓库

Publish build information to generic artefactory repo from jenkins

我正在尝试为嵌入式系统设置持续集成工具链。

因此我正在使用 jenkins(declerative pipeline)检查我的 SVN Repo 并为 mikrocontroller 构建 hexfile。 在此阶段之后,我想将包含所有构建信息(使用的编译器、环境变量等)的 hex 文件发布到我的人工服务器。 我的目的是,每个构建都与附加的 hex 文件一起存储在 artifactory 服务器中,这样我也可以在几年内使用相同的编译器和相同的工具链重现构建。

Jenkins 非常适合我的目的。我也可以将 hexfiles 和 buildinformation 推送到 artefactory,但是 buildinfo 和 hexfile 之间没有联系。

我的问题是,我想从 jenkins 部署一个构建到我的 artefactory 服务器,其中附加了 hexfile。目前,我只能将包含有关构建的所有相关信息的构建信息发布到 artefactory,但是应该附加 artefactory 的选项卡是空的。 hexfile 本身部署在一个单独的 repo 中。

谁能帮我把 hex 文件附加到构建信息中? 提前谢谢你:)

我的实际部署代码如下所示:


        stage('Deploy') 
        {
            steps {
                script {
                    echo 'Deploying....'
                    
                   // upload the hey and json files to artefactory
                    rtUpload (
                        serverId: 'artefact_server',
                        spec: '''{
                              "files": [
                                {
                                  "pattern": ".\release\**.hex",
                                  "target": "generic-local"
                                },
                                {
                                  "pattern": ".\release\**.json",
                                  "target": "generic-local"
                                }
                             ]
                        }''',
                        failNoOp: true
                    )
                    
                    // collect and upload build information
                    def server = Artifactory.server 'artefact_server'
                    buildInfo = Artifactory.newBuildInfo()
                    buildInfo.env.capture = true
                    buildInfo.env.collect()
                    server.publishBuildInfo buildInfo

                }       

我认为这里的问题是您同时使用脚本和声明方式部署构建。 rtUpload is based on declarative and the build publish基于脚本。

我建议参考 JFrog 的 GitHub page 示例项目,并参考随附的 wiki 以便更好地理解。

感谢 Muhammed 的帮助,我现在已经解决了这个问题。

我将我的脚本更改为以下代码,现在它工作正常并且工件附加到 artifactory 中的构建。创建构建信息时,我忘记附上上传规范。当使用 scipted 管道进行构建信息和工件上传时,这可以在创建构建信息对象时完成。 非常感谢。

                def uploadSpec = """{
                  "files": [
                    {
                      "pattern": ".\release\**.hex",
                      "target": "generic-local"
                    },
                    {
                          "pattern": ".\release\**.json",
                          "target": "generic-local"
                    }
                 ]
                }"""
                
                def server = Artifactory.server 'artefact_server'
                buildInfo = server.upload spec: uploadSpec
                buildInfo.env.capture = true
                buildInfo.env.collect()
                
                server.upload spec: uploadSpec                  
                server.publishBuildInfo buildInfo