是否有Jenkins插件可以对我的Nexus仓库进行群组工件版本(GAV)搜索并列出结果?我希望结果可以在参数化构建中作为选项(下拉列表)。
答案 0 :(得分:3)
我在Dynamic Choice Parameter添加了一个groovy脚本(参见Jenkins Plugins)
一些障碍是:
import hudson.model.* import jenkins.model.* def versions=[ ] def snapshots=[ ] // The artifactName could be passed in from another parameter (eg. Extended Choice Parameter) linked to this 'dynamic choice' parameter. def address = "https://xyzcompany.com/nexus/service/local/lucene/search?r=releases&g=com.xyzcompany&a=artifactName&c=features&p=xml" def urlInfo = address.toURL() // Consider using tokenstring technique instead of basic auth if pro version of Nexus. def authString = "user:pass"; // replace 'user' with username, 'pass' with password. def authStr="Basic " + authString.bytes.encodeBase64().toString() // Using URLConnection instead of HTTPBuilder et al. def connection = urlInfo.openConnection() connection.setRequestProperty( "Authorization" , authStr) def xml="${connection.content.text}" def root = new XmlParser().parseText( xml ) root.data.artifact.each { if (it.artifactHits.artifactHit.repositoryId.text() == "releases") versions.add("${it.version.text()}"); else snapshots.add("${it.version.text()}"); } // There is a better way to GAV sort (using org.apache.maven.artifact.versioning.ComparableVersion) but I have not implemented it yet so for now, I'm simply sorting so the smaller strings line up first. versions.sort { -it.size() } Collections.reverse(versions) // Only certain users should be able to see the SNAPSHOT versions def userid = User.current().id def auths = Jenkins.instance.securityRealm.loadUserByUsername(userid).authorities.collect{a -> a.authority} if (["OffShoreDevGroup", "DevGroup"].intersect(auths)) { snapshots.sort { -it.size() } Collections.reverse(snapshots) versions+=snapshots } versions.add(" "); // My build uses a blank version string to simply report what is already deployed to the container. return versions;
答案 1 :(得分:3)
无需自定义Ruby脚本。现在有一个专门的插件可以满足您的需求: Maven Metadata Plugin for Jenkins CI server
只需标记“List Maven工件版本”类型的“参数化构建”和“添加参数”:
DATA Step
JOIN
然后向wget / scp / etc添加一个shell命令,你可以使用插件解析的以下变量:
PROC SQL
不幸的是,您无法在同一下拉列表中询问快照和发布。一种可能的解决方法是为MY_RELEASE_JAR添加另一个参数(因此另一个下拉列表,对用户来说有点混乱)。另一种解决方法是为发布部署提供单独的作业。
答案 2 :(得分:0)
选择“动态选择参数”插件,并将以下代码与您自己的主机groupId,artifactId一起放置。
我们可以使用元数据API,您可以同时使用快照repo或release repo或public,仅限制最后5个版本。
def host="https://msnexus.xxx.com"
def groupId="com.xxx.cd".replaceAll("\\.", "/")
def artifactId="common-log"
def nexus_url="${host}/repository/public/${groupId}/${artifactId}/maven-metadata.xml"
def response=nexus_url.toURL().text
def metadata = new XmlParser().parseText(response)
metadata.versioning.versions.version.takeRight(5).collect({it.text()}).reverse()