Как я получаю имя Банки Знатока как часть Гудзонского задания?

У меня есть Знаток 3 задания, настроенные в моем Гудзонском сервере.

Когда Гудзонский сервер успешно создает банку Знатока, у меня есть банка, развертываемая на репозитории SCP на другом сервере.

Я хочу выполнить relink.sh сценарий на удаленном хосте, где один из параметров является названием недавно поставленного файла банки (например,/usr/bin/relink.sh myproject-0.0.2-SNAPSHOT.jar).

Как я получаю тот Основанный на знатоке файл / имя версии в переменную, которую я могу затем использовать в своем Гудзонском вызове для выполнения удаленного сценария?

0
задан 18 August 2014 в 20:58
3 ответа

Я не уверен, можете ли вы передать переменную или нет, но обходным решением будет сначала скопировать файл в каталог инсценировки, а не напрямую в то место, куда вы хотите его передать. Затем пусть ваш скрипт посмотрит в каталог инсценировки для файла и переместит его:

STAGE_DIR=/path/to/stage
DEST_DIR=/path/to/dest
LINK=/path/to/link.jar

while read file; do
    mv $file $DEST_DIR
    ln -s -f $DEST_DIR/$(basename $file) $LINK
done < <( find $STAGE_DIR -name "myproject*SNAPSHOT.jar" )

Вы можете захотеть сделать некоторую проверку на ошибки и выйти с не 0, если есть, например, более чем один файл, который совпадает, нет файлов и т.д. Вы решили проблему?

0
ответ дан 5 December 2019 в 13:31

Как и предполагал @zerodiff, похоже, есть несколько способов сделать это через Гудзон, но все они кажутся хрупкими и сложными в обслуживании при управлении большим количеством проектов. Вместо этого я использовал плагин тележки Maven для реализации развертывания через Maven, а не через Hudson.

Конфигурация, которую я использовал в проектах maven:

<properties>
    <!-- Deploy -->
    <dev.server.hostname>192.168.1.1</dev.server.hostname>
    <application.name>test-application</application.name>
    <!-- Deploy -->
</properties>

<build>
    <extensions>
        <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>1.0</version>
        </extension>
    </extensions>
</build>

<profiles>
    <profile>
        <id>hudson</id>
        <activation>
            <property>
                <name>env</name>
                <value>hudson</value>
            </property>
        </activation>
        <build>
            <filters>
                <filter>src/main/filters/${env}-linux.properties</filter>
                <filter>src/main/filters/${env}.properties</filter>
            </filters>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>wagon-maven-plugin</artifactId>
                    <version>1.0-beta-5</version>
                    <executions>
                        <execution>
                            <id>dev-deploy</id>
                            <phase>deploy</phase>
                            <goals>
                                <goal>upload</goal>
                            </goals>
                            <configuration>
                                <fromDir>${project.build.directory}</fromDir>
                                <includes>${project.build.finalName}.jar</includes>
                                <url>scp://${dev.server.hostname}/</url>
                                <toDir>/opt/${application.name}</toDir>
                                <serverId>dev-deploy-server</serverId>
                            </configuration>
                        </execution>
                        <execution>
                            <id>execute-dev-deploy-commands</id>
                            <phase>deploy</phase>
                            <goals>
                                <goal>sshexec</goal>
                            </goals>
                            <configuration>
                                <url>scp://${dev.server.hostname}/</url>
                                <serverId>dev-deploy-server</serverId>
                                <commands>
                                    <command>sudo /etc/init.d/${application.name} stop</command>
                                    <command>sleep 2</command>
                                    <command>sudo /opt/${application.name}/relink.sh ${project.build.finalName}.jar</command>
                                    <command>sudo /etc/init.d/${application.name} start</command>
                                </commands>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

В моих настройках maven. xml, у меня есть учетные данные сервера dev-deploy-server:

    <server>
        <id>dev-deploy-server</id>
        <username>hudson_bot</username>
    </server>

С плагином Maven на Hudson я добавил директиву "Invoke Maven 3" Build и:

  • Goals: clean deployment
  • Properties: env=hudson

Наконец, я настроил безопасность между двумя серверами так, чтобы "hudson_bot" мог выполнять скрипты на сервере dev-deploy-server и дал hudson_bot sudoer NO_PASSWD привилегии для двух упомянутых скриптов в элементе выполнения ssh.

0
ответ дан 5 December 2019 в 13:31

Вы хотите получить имя артефакта jar от самого Maven, чтобы предотвратить корректировку вашего скрипта, когда разработчики изменяют идентификатор или версию артефакта. Сканирование файлов * .jar не является элегантным, поскольку оно будет соответствовать большему количеству, чем основной артефакт (например, * - javadoc.jar ). Итак, чтобы получить основную версию артефакта от Maven, я полагаюсь на два факта:

  • по умолчанию,плагин jar использует идентификатор и версию артефакта для окончательного артефакта jar, например target / the-service-0.0.1-SNAPSHOT.jar
  • идентификатор, группа и версия артефакта хранятся в pom.properties

     $ cat target / maven-archiver / pom.properties
     # Создано Apache Maven
     # Пт, ​​06 июля, 15:10:03 CEST 2018
    версия = 0.0.1-SNAPSHOT
    groupId = net.company
    artifactId = услуга
     

Обратите внимание, что разработчики Java по-прежнему могут изменить папку сборки по умолчанию target и прервать работу Hudson.

0
ответ дан 5 December 2019 в 13:31

Теги

Похожие вопросы