Jenkins 和 Nexus Repository Manager 选择参数

Jenkins and Nexus Repository Manager Choice Parameter

我知道 Jenkins 中有一个 Nexus Platform 插件 https://plugins.jenkins.io/nexus-jenkins-plugin/,但我不确定以下内容是否可行,我们将不胜感激。

在 Jenkins 中,你有 Git 选择参数,这允许你在你的工作中构建特定的标签/分支,Sonatype Nexus 有类似的东西吗?我们有一个内部联系,我们可以在其中上传和标记 docker 图像。

我目前有一份 Jenkins 作业,我必须手动输入图像版本。 Jenkins 有没有办法获得一个选择参数,我可以在其中查询 nexus 中的所有标签。

所以例如我可以 运行 命令 - > docker pull internal/application/service:0.0.1 所以开发人员会上传一个新版本,例如 0.0.2

我想从 Jenkins 显示 0.0.1 或 0.0.2 的列表,供支持团队构建。 不确定目前是否可行?

更新 2020/07/15

我已经阅读了主动选择参数插件。这允许您执行 groovy 脚本。

所以我创建了下面的 </p> <pre><code>import groovy.json.JsonSlurper // GET try { def get = new URL("http://internalserver:8081/service/rest/v1/search?repository=docker-internal&name=application/service/moo").openConnection(); def getRC = get.getResponseCode(); //println(getRC); if (getRC.equals(200)) { //println(get.getInputStream().getText()); JsonSlurper slurper = new JsonSlurper() Map parsedJson = slurper.parseText(get.getInputStream().getText()) tags = parsedJson.items.version //println(tags) def sorted_tags = [] sorted_tags.push(tags) println(sorted_tags) } }catch(Exception e){ println(e) }

如果我 运行 从我的 IDE 此代码确实打印出标签,但如果我将它添加到活动选择插件,我的下拉菜单是空白的?

Maven Artifact ChoiceListProvider (Nexus)可能会满足您的要求。

With this extension its possible to use the Service API from a Maven Repositories like Nexus, Maven-Central or Artifactory to search for artifacts using groupId, artifactId and packaging.

This plugin will let the user choose a version from the available artifacts in the repository and will publish the URL as an environment variable. The Plugin will return the full URL of the choosen artifact, so that it will be available during the build, i.E. you can retrieve the artifact by using "wget" Example

然后您可能必须解析(groovy?)生成的环境变量以作为您的参数。

好的,我让它工作 Jenkins 组合框需要 return 类型。 所以如果有人想做类似的事情,下面对我有用。

<code>
import groovy.json.JsonSlurper
try {
    def get = new URL("http://yourinternalnexusurl:8018/applicacation/v1...etc").openConnection();
    def getRC = get.getResponseCode();
    if (getRC.equals(200)) {
        def nexus_response = [:]
        nexus_response = new JsonSlurper().parseText(get.getInputStream().getText())
        def image_tag_list = []
        for (tag in nexus_response.items.version){
            image_tag_list.add(tag)
        }
       return image_tag_list.sort()
    }
}catch(Exception e){
    println(e)
}
</code>