Jenkins Artifactory retention具有最大生成数

Jenkins Artifactory retention具有最大生成数,jenkins,artifactory,Jenkins,Artifactory,我正在使用Jenkins的Artifactory开源版本。我们使用下面的构建信息将构建从Jenkins推送到Artifactory def server = Artifactory.server('Artifactory_Server') def targetArtifact = "Repo/${RepoName}/${archivePath}.zip" def uploadSpec = """{

我正在使用Jenkins的Artifactory开源版本。我们使用下面的构建信息将构建从Jenkins推送到Artifactory

 def server = Artifactory.server('Artifactory_Server')  
 def targetArtifact = "Repo/${RepoName}/${archivePath}.zip" 

                        def uploadSpec = """{
                        "files": [
                                {
                                    "pattern": "${archivePath}.zip",            
                                    "target":  "${targetArtifact}"                              
                                }
                            ]
                            }"""    
def buildInfo = Artifactory.newBuildInfo()
buildInfo.retention maxBuilds: 2, maxDays: 2, doNotDiscardBuilds: ["5"], deleteBuildArtifacts: true                         

buildInfo.env.capture = true        

server.upload(uploadSpec)
server.publishBuildInfo(buildInfo)  

在将生成信息发布到Artifactory服务器时,未删除或删除生成。如何删除构建

对于发现此问题的其他人,我听说构建保留设置仅在Artifactory的pro版本中有效。我还没有验证它是否在免费环境下工作,但我已经验证了以下jenkinsfile在与pro Artifactory一起使用时是否能正常工作:

node {
    // Obtain an Artifactory server instance, defined in Jenkins --> Manage:
    def server = Artifactory.server SERVER_ID
    def buildInfo = Artifactory.newBuildInfo()

    stage ('Collect env vars') {
        // By default the filter is configured to exclude "*password*,*secret*,*key*"
        buildInfo.env.filter.addInclude("*")
        buildInfo.env.filter.addExclude("DONT_COLLECT*")

        withEnv(['DO_COLLECT_FOO=BAR', 'DONT_COLLECT_FOO=BAR']) {
            buildInfo.env.collect()
        }
    }

    stage ('Access build info env vars') {
        echo buildInfo.env.vars['DO_COLLECT_FOO']   //BAR
        echo buildInfo.env.vars['DONT_COLLECT_FOO'] //null
    }

    stage ('Set build retention') {
        buildInfo.retention maxBuilds: 1, maxDays: 2, doNotDiscardBuilds: ["3"], deleteBuildArtifacts: true
    }

    stage ('Publish build info') {
        server.publishBuildInfo buildInfo
    }
}
这是从

另一个要点是,这些保留规则似乎是针对元数据(存储在中的json文件),而不是构建人工制品

还值得检查在Artifactory插件中配置的用户是否在Artifactory中拥有足够的权限来进行清理。这可以在Artifactory中通过转到: 工件->工件库浏览器->
artifactory build info->Effective Permissions

起初我还认为它不起作用,但后来我发现只有上传新的构建信息(再次触发jenkins作业)时,工件(deleteBuildArtifacts:true)和构建信息才会被删除

我使用以下管道对其进行了测试:

#!groovy

node('master') {
    sh ("touch foo${BUILD_NUMBER}.txt")
    
    def server = Artifactory.server('artifactory')
    def uploadSpec = """{
            "files": [
                {
                    "pattern": "foo${BUILD_NUMBER}.txt",
                    "target": "<repo-name>"
                }
            ]
        }"""

    def buildInfo = server.upload spec: uploadSpec
    buildInfo.retention maxDays: 1, deleteBuildArtifacts: true // this will remove all artifacts + build-info older than 1 day (retrigger job)
    //buildInfo.retention maxBuilds: 1, deleteBuildArtifacts: true // this will only keep 1 artifact + build-info
    server.publishBuildInfo(buildInfo)
}
#!棒极了
节点(“主节点”){
sh(“touch foo${BUILD_NUMBER}.txt”)
def server=Artifactory.server('Artifactory')
def uploadSpec=“”{
“文件”:[
{
“模式”:“foo${BUILD\u NUMBER}.txt”,
“目标”:”
}
]
}"""
def buildInfo=server.upload spec:uploadSpec
buildInfo.retention maxDays:1,deleteBuildArtifacts:true//这将删除所有早于1天的工件+生成信息(重新触发作业)
//buildInfo.retention maxBuilds:1,deleteBuildArtifacts:true//这将只保留1个工件+生成信息
server.publishBuildInfo(buildInfo)
}
如下所述:

人工版本:商业版7.10.2