Плагин Maven пересек ордер на исполнение - PullRequest
0 голосов
/ 25 апреля 2019

Я пишу некоторые интеграционные тесты, используя отказоустойчивый плагин.

Я хочу выполнить следующее:

1) Запустить Docker (запуск цели в фазе предварительного тестирования интеграции)

2) Стартовая пружина (целевой старт в фазе перед интеграционным тестом)

3) Тесты (фазовая интеграционная проверка)

4) Стоповая пружина (целевой стоп послеинтеграционный тест)

5) Stop Docker (остановка цели в пост-интеграционном тесте)

Почему?Я хочу запустить Docker BEFORE Spring, чтобы все базы данных были готовы при загрузке Spring, а также я хочу остановить Docker AFTER Spring, чтобы избежать многих ошибок в Spring из-за потери соединения с базой данных.

У меня есть следующий pom.xml:

        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.20.1</version>
            <executions>
                <execution>
                    <id>run-docker-containers</id>
                    <goals>
                        <goal>start</goal>
                    </goals>
                    <configuration>
                        ...
                    </configuration>
                </execution>
                <execution>
                    <id>stop-docker-containers</id>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>pre-integration-test</id>
                    <goals>
                        <goal>start</goal>
                    </goals>
                    <configuration>
                        ...
                    </configuration>
                </execution>
                <execution>
                    <id>post-integration-test</id>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

Но с этим pom.xml я получаю следующий заказ:

1) Запуск Docker

2) Запуск Spring

3) Тесты

4) Остановка Docker

5) Остановка пружины

Это означает, что Docker остановлен ДО весны, и я не хочу этого.

Я знаю, что порядок выполнения в Maven задается порядком в pom.xml, но в этом случае мне нужно пересечь цели.

Любой совет?

Спасибо.

1 Ответ

1 голос
/ 26 апреля 2019

Порядок выполнения в Maven основан на двух компонентах:

  • Во-первых, фаза жизненного цикла , к которой привязано выполнение
  • Для выполнения, привязанного к одной и той же фазе, порядок в POM имеет приоритет.

Maven не позволяет дважды настраивать один и тот же плагин, поэтому невозможно переместить выполнение Docker Stop ниже Spring. Единственный способ, которым я знаю, чтобы исправить подобные вещи, это ввести третью фазу в микс. Кажется немного странным связывать цели «стоп» с фазой verify, и я определенно добавлю комментарии, чтобы объяснить, почему это было сделано для потомков - но это работает.

Эта конфигурация плагина выполняет следующие действия (при условии, что вы используете maven-failsafe-plugin для интеграционных тестов; если вы используете другой плагин, следуйте тем же принципам с этим плагином). Фаза жизненного цикла Maven в скобках:

1) Docker Start (предварительный интеграционный тест)

2) Spring Start (предварительный тест интеграции; конфигурация плагина Spring после Docker)

3) Выполнить тесты (интеграция-тест)

4) Spring Stop (постинтеграционный тест)

5) Docker Stop (проверить)

6) Проверка результатов теста (проверка; настройка отказоустойчивого плагина после Docker)

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.20.1</version>
    <executions>
        <execution>
            <id>run-docker-containers</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>start</goal>
            </goals>
        </execution>
        <execution>
            <id>stop-docker-containers</id>
            <phase>verify</phase>    <!-- important: note phase -->
            <goals>
                <goal>stop</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>${version.maven.failsafe.plugin}</version>
    <executions>
        <execution>
            <id>failsafe-integration-tests</id>
            <phase>integration-test</phase>
            <goals>
                <goal>integration-test</goal>
            </goals>
        </execution>
        <execution>
            <id>failsafe-verify</id>
            <phase>verify</phase>
            <goals>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>pre-integration-test</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>start</goal>
            </goals>
        </execution>
        <execution>
            <id>post-integration-test</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>stop</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...