2015-06-13 4 views
2

Есть ли плагин Jenkins, который может выполнять поиск в группе артефакт-версии (GAV) моего репозитория Nexus и отображать результаты? Я хотел бы, чтобы результаты были доступны в параметризованной сборке в качестве выбора (выпадающее меню).Jenkins build параметризован с выбором версий артефакта Nexus (все GAV)

ответ

3

Я добавил заводной сценарий к Dynamic Choice Parameter (см Jenkins Plugins)

Некоторые препятствия были:

  1. Наш сервер Nexus выдает базовой аутентификации вызов, так что я не мог просто использовать заводной "http://blah ".toURL(). text
  2. Я не хотел загружать отсутствующие groovy jars, такие как httpbuilder, поэтому я просто использовал класс Java URLConnection и кодированный пользователь : pass a s заголовок.
  3. Использовал REST api для Nexus, чтобы получить версии, но должен был различать выпуск и моментальные снимки. Я добавил групповую аутентификацию, чтобы только разработчики имели доступ к моментальным снимкам.
  4. GAV сортировка не является прямой. Существует лучший способ сортировки GAV (с использованием org.apache.maven.artifact.versioning.ComparableVersion), но я пока не реализовал его, поэтому сейчас просто сортирую, чтобы сначала выстроились меньшие строки.
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

Нет необходимости для пользовательских скриптов на Ruby. Существует в настоящее время специальный плагин, который делает то, что вам требуется: Maven Metadata Plugin for Jenkins CI server

Просто пометьте «параметризованного Build» и «Добавить параметр» типа «Список Maven артефакта версии»:

  • Имя MY_SNAPSHOT_JAR
  • Repository Базовый URL (это один сложно) http://localhost/nexus/service/local/repositories/snapshots/content

Затем добавьте команду оболочки для Wget/УПП/и т.д., вы можете использовать следующие переменные решенные штекером in:

wget "$MY_SNAPSHOT_JAR_ARTIFACT_URL" 
echo "$MY_SNAPSHOT_JAR_VERSION" - the version you selected in the dropdown or that was selected as part of an automated build 
echo "$MY_SNAPSHOT_JAR_ARTIFACT_URL" - the full URL to the actual artifact selected. You can use something like "wget" to download that artifact and do something with it. 
echo "$MY_SNAPSHOT_JAR_GROUP_ID" - echoes back your configuration 
echo "$MY_SNAPSHOT_JAR_ARTIFACT_ID" - echoes back your configuration 
echo "$MY_SNAPSHOT_JAR_CLASSIFIER" - echoes back your configuration 
echo "$MY_SNAPSHOT_JAR_PACKAGING" - echoes back your configuration 

К сожалению, вы не можете спросить о снимке и отпустить его в том же выпадающем списке. Возможным обходным путем является добавление другого параметра для MY_RELEASE_JAR (таким образом, другой раскрывающийся список, несколько запутанный для пользователя). Другим обходным решением является отдельная работа по развертыванию релиза.

 Смежные вопросы

  • Нет связанных вопросов^_^