Artifactory限制上载到存储库,允许从另一个repo复制

Artifactory限制上载到存储库,允许从另一个repo复制,artifactory,Artifactory,如何限制用户手动将任何内容部署到存储库中,同时允许他们从另一个存储库进行复制 RepoA/Dir/File.txt RepoB/Dir 我想允许将File.txt从RepoA复制到RepoB,这需要对RepoB的部署权限。但是,我还想将手动部署限制为RepoB。任何进入RepoB的内容都只能来自RepoA 我用beforeCreate模块的用户插件尝试了这一点,这限制了手动上传,但是也限制了复制功能 storage{ beforeCreate { item -> log

如何限制用户手动将任何内容部署到存储库中,同时允许他们从另一个存储库进行复制

RepoA/Dir/File.txt  
RepoB/Dir
我想允许将File.txt从RepoA复制到RepoB,这需要对RepoB的部署权限。但是,我还想将手动部署限制为RepoB。任何进入RepoB的内容都只能来自RepoA

我用beforeCreate模块的用户插件尝试了这一点,这限制了手动上传,但是也限制了复制功能

storage{ 
  beforeCreate { item ->
    log.debug("ENTER storage -> beforeCreate")
    if (item.getRepoKey().equals("RepoB")) {
    throw new CancelException("Artifact create not permitted", 403)
    }
    log.debug("EXIT storage -> beforeCreate")
}  }

如果您想允许复制,只需添加一个检查来验证
RepoA
中是否存在相同的路径(工件)。如果有-允许:

storage { 
  beforeCreate { item ->
        log.debug("ENTER storage -> beforeCreate")
        if (item.getRepoKey().equals("RepoB") &&
            !repositories.exist(RepoPathFactory.create('RepoA', item.repoPath)) {
            throw new CancelException("Artifact create not permitted", 403)
        }
        log.debug("EXIT storage -> beforeCreate")
    }  
}

谢谢JBaruch,这个概念很好地解决了。为了让它工作,我不得不稍微修改一下语法<代码>字符串itemPath=item.repoPath.path
!repositories.exists(RepoPathFactory.create('RepoA',itemPath))
我认为我错了,根据上面注释中的语法,如果我尝试上载一个与RepoA中存在的文件同名的文件,它会在RepoA中创建该文件