Выполните развертывание приложения на нескольких серверах с помощью одного и того же задания Jenkins. - PullRequest
0 голосов
/ 18 марта 2019

Я использую Jenkins CI для автоматизации развертывания моего Java-приложения, и в настоящее время я использую следующие конфигурации сборки для файла pom.xml:

<!-- teste1 config -->
<deploy.jboss.teste1.host>192.168.0.1</deploy.jboss.teste1.host>
<deploy.jboss.teste1.port>9999</deploy.jboss.teste1.port>
<deploy.jboss.teste1.user>admin</deploy.jboss.teste1.user>
<deploy.jboss.teste1.password>admin</deploy.jboss.teste1.password>

<liquibase.teste1.database>db_01</liquibase.teste1.database>
<liquibase.teste1.host>192.168.0.2</liquibase.teste1.host>
<liquibase.teste1.user>admin</liquibase.teste1.user>
<liquibase.teste1.password>admin</liquibase.teste1.password>

<!-- teste2 config -->
<deploy.jboss.teste2.host>192.168.0.3</deploy.jboss.teste2.host>
<deploy.jboss.teste2.port>9999</deploy.jboss.teste2.port>
<deploy.jboss.teste2.user>admin</deploy.jboss.teste2.user>
<deploy.jboss.teste2.password>admin</deploy.jboss.teste2.password>

<liquibase.teste2.database>db_02</liquibase.teste2.database>
<liquibase.teste2.host>192.168.0.4</liquibase.teste2.host>
<liquibase.teste2.user>admin</liquibase.teste2.user>
<liquibase.teste2.password>admin</liquibase.teste2.password>

<profile>
    <id>teste1</id>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.jboss.as.plugins</groupId>
                <artifactId>jboss-as-maven-plugin</artifactId>
                <version>7.7.Final</version>
                <configuration>
                    <hostname>${deploy.jboss.teste1.host}</hostname>
                    <port>${deploy.jboss.teste1.port}</port>
                    <username>${deploy.jboss.teste1.user}</username>
                    <password>${deploy.jboss.teste1.password}</password>
                    <name>${backend.deployment-name}</name>
                    <filename>${project.build.finalName}.war</filename>
                    <skip>${skipDeployment}</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>deploy-jar</id>
                        <phase>install</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.4.1</version>

                <configuration>
                    <changeLogFile>${liquibase.changelog.file}</changeLogFile>
                    <diffChangeLogFile>${liquibase.changelog.file}</diffChangeLogFile>
                    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                    <driver>com.mysql.jdbc.Driver</driver>
                    <url>jdbc:mysql://${liquibase.teste1.host}:3306/${liquibase.teste1.database}?zeroDateTimeBehavior=convertToNull</url>
                    <username>${liquibase.teste1.user}</username>
                    <password>${liquibase.teste1.password}</password>
                </configuration>

                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.34</version>
                    </dependency>
                </dependencies>

                <executions>
                    <execution>
                        <id>update</id>
                        <phase>deploy</phase>
                       <goals>
                         <goal>update</goal>
                       </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>
<profile>
    <id>teste2</id>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.jboss.as.plugins</groupId>
                <artifactId>jboss-as-maven-plugin</artifactId>
                <version>7.7.Final</version>
                <configuration>
                    <hostname>${deploy.jboss.teste2.host}</hostname>
                    <port>${deploy.jboss.teste2.port}</port>
                    <username>${deploy.jboss.teste2.user}</username>
                    <password>${deploy.jboss.teste2.password}</password>
                    <name>${backend.deployment-name}</name>
                    <filename>${project.build.finalName}.war</filename>
                    <skip>${skipDeployment}</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>deploy-jar</id>
                        <phase>install</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.4.1</version>

                <configuration>
                    <changeLogFile>${liquibase.changelog.file}</changeLogFile>
                    <diffChangeLogFile>${liquibase.changelog.file}</diffChangeLogFile>
                    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                    <driver>com.mysql.jdbc.Driver</driver>
                    <url>jdbc:mysql://${liquibase.teste2.host}:3306/${liquibase.teste2.database}?zeroDateTimeBehavior=convertToNull</url>
                    <username>${liquibase.teste2.user}</username>
                    <password>${liquibase.teste2.password}</password>
                </configuration>

                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.34</version>
                    </dependency>
                </dependencies>

                <executions>
                    <execution>
                        <id>update</id>
                        <phase>deploy</phase>
                       <goals>
                         <goal>update</goal>
                       </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

И в Jenkins я создал два задания, по одному для каждого профиля, и в каждом задании выполняется следующая команда maven:

clean package jboss-as:deploy javadoc:javadoc liquibase:update -P teste1
clean package jboss-as:deploy javadoc:javadoc liquibase:update -P teste2

Но я бы хотел развернуть приложение на двух серверах одновременно, используя одно и то же задание, но до сих пор я не смог выяснить способ выполнения такой задачи, я уже попробовал следующие команды, но без успех:

clean package jboss-as:deploy javadoc:javadoc liquibase:update -P teste1,teste2

clean package jboss-as:deploy javadoc:javadoc liquibase:update -P teste1 -P teste2

clean package jboss-as:deploy javadoc:javadoc liquibase:update -P teste1;clean package jboss-as:deploy javadoc:javadoc liquibase:update -P teste2

Во всех случаях развертывание выполняется только на одном сервере. Любая помощь приветствуется. Спасибо.

РЕДАКТИРОВАТЬ:

enter image description here

1 Ответ

0 голосов
/ 09 апреля 2019

Чтобы выполнить задачу, я бы хотел использовать инструкции «Post Steps», как показано на рисунке ниже. Это было не самое элегантное решение, но оно сработало, как и ожидалось. Если у кого-то есть лучшее решение, пожалуйста, поделитесь.

Post Steps

...