【问题标题】:Nexus 3 create clean up policy with Groovy scriptNexus 3 使用 Groovy 脚本创建清理策略
【发布时间】:2021-03-18 13:05:24
【问题描述】:

我想使用 Groovy 在 nexus 3 上为 maven 和 docker 存储库创建清理策略。 到目前为止,我发现的所有解决方案和示例都是清理脚本和清理任务。 我希望使用 Groovy 创建一个清理策略,将其附加到存储库(maven 或 docker)并创建一个使用该策略定期运行的任务。

【问题讨论】:

    标签: groovy nexus nexus3


    【解决方案1】:

    更新:这是新的解决方案。第一个 groovy 脚本创建并将策略附加到 Docker 存储库,第二个 groovy 脚本正在创建 Docker 存储库

    import org.sonatype.nexus.cleanup.storage.CleanupPolicyStorage
    
    def createPolicy (policyName) {
        try {
            def policyStorage = container.lookup(CleanupPolicyStorage.class.getName())
            def cleanupPolicy = policyStorage.newCleanupPolicy()
            cleanupPolicy.setName(policyName)
            cleanupPolicy.setNotes('')
            cleanupPolicy.setMode('deletion')
            cleanupPolicy.setFormat('docker')
            cleanupPolicy.setCriteria(['regex': '.*SNAPSHOT'])
            policyStorage.add(cleanupPolicy)
        } catch (e) {
            log.info("Cleanup policy already exists, skipping...")
        }
    
    }
    
    def attachPolicy (policyName, repositoryName) {
        try {
            def repo = repository.repositoryManager.get(repositoryName)
            def cleanupPolicyAttribute = [policyName: [policyName].toSet()]
            def conf = repo.getConfiguration()
            conf.getAttributes().put("cleanup", cleanupPolicyAttribute)
            repo.stop()
            repo.update(conf)
            repo.start()
        } catch (e) {
            log.info("Attaching policy fail")
        }
    }
    
    createPolicy('dockerCleanupPolicy')
    attachPolicy('dockerCleanupPolicy', 'docker-NameOfTheRepo')
    

    使用这个脚本,我们正在创建存储库。请记住,在较旧的 nexus 版本中,您应该导入 import org.sonatype.nexus.repository.storage.WritePolicy 而不是 import org.sonatype.nexus.repository.config.WritePolicy

    import org.sonatype.nexus.blobstore.api.BlobStoreManager
    import org.sonatype.nexus.repository.config.WritePolicy
    
    def createDockerHosted(repoName, repoHttpPort){
        try {
            repository.createDockerHosted(repoName, repoHttpPort, null, BlobStoreManager.DEFAULT_BLOBSTORE_NAME, true, false, WritePolicy.ALLOW)
        } catch (e) {
            log.info("Repo already exists, skipping...")
        }
    }
    createDockerHosted('docker-NameOfTheRepo', 5001)
    

    旧解决方案 找到了,这是你如何做的一个例子

    import org.sonatype.nexus.cleanup.storage.CleanupPolicyStorage;
    def policyStorage = container.lookup(CleanupPolicyStorage.class.getName());
    def cleanupPolicy = policyStorage.newCleanupPolicy();
    cleanupPolicy.setName('name');
    cleanupPolicy.setNotes('');
    cleanupPolicy.setMode('deletion');
    cleanupPolicy.setFormat('raw');
    cleanupPolicy.setCriteria(['lastBlobUpdated':'432000']);
    policyStorage.add(cleanupPolicy);
    
    

    【讨论】:

    • 这会正确创建清理策略。但是为了使用这个策略,我们必须将它添加到存储库中。知道如何将此策略添加到存储库吗?
    • @U.Ahmad 我已经通过在 Nexus 上创建 Docker 存储库并创建将策略附加到 Docker 存储库来更新我的答案。我希望我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多