Захват уникального номера сборки Maven SNAPSHOT - PullRequest
3 голосов
/ 09 июля 2010

Я ищу способ получения уникального номера сборки SNAPSHOT, который был сгенерирован на этапе сборки mvn deploy. Я хотел бы иметь возможность передать эту версию (во время сборки Hudson) другому процессу, используемому для развертывания на сервере приложений. Ключом здесь является возможность получить точный номер сборки Maven SNAPSHOT, например:

foobar-0.4-20100707.060244-11.war

Я заметил, что Хадсон захватывает эту информацию, если вы архивируете артефакт сборки maven, но не ясно, как я могу выставить эту переменную и передать ее другому заданию (что я и хочу сделать). Я вижу эту переменную в домашнем каталоге Hudson, например:

/hudson/jobs/JOB_NAME/builds/24/org.ace.widgets$foobar/archive/org.ace.widgets/foobar/0.4-20100707.060244-11

Есть ли какие-нибудь эксперты Maven и / или Hudson, которые имеют какое-либо представление о том, как раскрыть номер сборки SNAPSHOT? Хадсон это делает?

Ответы [ 3 ]

2 голосов
/ 28 июля 2010

Ознакомьтесь с моим ответом на эту немного другую проблему , где я использую GMaven для доступа к метаданным проекта после развертывания. Общим для них является то, что у вас есть доступ к уникальному номеру сборки. Таким образом, вы можете адаптировать скрипт так, чтобы после прочтения метаданных проекта (после развертывания) он сохранял уникальную версию в свойствах maven:

pom.properties['uniqueVersion'] = uniqueVersion

Если appserver-deploy-process также является плагином maven, откройте это свойство, в противном случае сохраните его как файл, используя что-то вроде этого:

new File(pom.build.directory, "uniqueVersion.txt").text = uniqueVersion

Теперь вы можете получить его из target / uniqueVersion.txt, используя скрипт оболочки или около того.

1 голос
/ 08 декабря 2010

Немного опоздал, но я только заметил, что у вас точно такая же проблема, с которой я столкнулся. Мне нужно было иметь возможность развертывать произвольные артефакты сборки, созданные на компьютере с Windows, на машинах AIX. Процесс развертывания нужно было запускать локально на блоках AIX. Таким образом, я определил ведомых на блоках AIX, которые загружают артефакты сборки из задания сборки, которое запускается на коробке Windows. Мастер находится на коробке Windows.

Короче говоря. Задание на сборку архивирует необходимые артефакты и запускает задание на развертывание с URL-адресом сборки в качестве параметра (на самом деле это «параметр выполнения», но строка также будет работать). Задание развертывания использует wget для определения URL-адреса артефакта (оно ищет идентификатор артефакта, содержащий определенные тексты, например, имя артефакта без версии), и снова загружает артефакт с wget. wget сохраняет его без версии, так что все мои сценарии развертывания могут работать с неверным именем. Вы также можете использовать первый шаг, чтобы узнать и имя артефакта.

wget использует удаленный API (версия xml). Если вы не хотите использовать wget, есть инструмент командной строки, который сделает соединение за вас.

Вы можете проверить его, добавив следующие строки к URL-адресу выполнения задания сборки и использовать полученный URL-адрес в своем веб-браузере.

#to find the path (URL) of the artifact
api/xml?xpath=*/artifact[contains(fileName,"MyApp")]/relativePath/text()

#to find the path (URL) of the artifact with more than 1 string to match
#the match must identify exactly one artifact, otherwise you will 
#get an error message
api/xml?xpath=*/artifact[contains(fileName,"MyApp") and contains(fileName,".ear")]/relativePath/text()

#To download the artifact 
#replace $relativePath with the actual output from one of the queries above
artifact/$relativePath
0 голосов
/ 17 августа 2015

Исходя из ответа Шона Патрика Флойда, хотя этот вопрос старый, я хотел бы поделиться полным примером кода, который записывает uniqueVersion в свойство maven. Пожалуйста, имейте в виду, что доступ к внутренностям Maven осуществляется с помощью рефлексии, так что это может легко сломаться в будущих версиях Maven. Я протестировал его на Maven 3.2.5.

        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.groovy.maven</groupId>
                    <artifactId>gmaven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>set-uniqueVersion-property</id>
                            <phase>deploy</phase>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <configuration>
                                <source>
                                    <![CDATA[
                                    def uniqueVersion = null;
                                    println "Grabbing uniqueVersion...";
                                    project.artifact.metadataList.each{
                                        if(it.class.simpleName=='ProjectArtifactMetadata'){
                                            def afi = it.class.superclass.superclass.getDeclaredField('artifact');
                                            afi.accessible = true;
                                            uniqueVersion = it.artifact.version;
                                        }
                                    };
                                    project.properties['uniqueVersion'] = uniqueVersion;
                                    println("Unique Version grabbed: $uniqueVersion");
                                    ]]>
                                </source>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>                   
            </plugins>
        </build>

Если вы хотите использовать это свойство в других подключаемых модулях maven, убедитесь, что их выполнение выполняется в фазе развертывания после set-uniqueVersion-property выполнения. Если вы предпочитаете записывать уникальную версию в файл, просто добавьте

new File(pom.build.directory, "uniqueVersion.txt").text = uniqueVersion

как уже сказал Шон Патрик.

...