Как правильно и просто настроить Gitlab-CI / CD для весеннего проекта Java - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь использовать Gitlab-ci в качестве моего CI / CD-конвейера для мультимодульного проекта Java Maven. Как настроить / исправить мою конфигурацию?


решаемые : Наконец, я обнаружил, что мне нужно было использовать jUNITRunner +, указав мои сценарии .sql в моих тестовых классах, вместо того, чтобы думать, что gitlab может это сделать (я думаю, что это возможно, но я не смог реализовать это). я добавил это в мои тестовые классы:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/com/dummy/myerp/testbusiness/business/bootstrapContext.xml"})
@Sql(scripts = { "classpath:/com/dummy/myerp/technical/01_create_schema.sql",
        "classpath:/com/dummy/myerp/technical/02_create_tables.sql",
        "classpath:/com/dummy/myerp/technical/21_insert_data_demo.sql" })
public class TestIntComptabiliteManagerImpl extends BusinessTestCase{

Также исправил мой скрипт .sql, добавив DROP SCHEMA:

DROP SCHEMA IF EXISTS MYERP cascade;
CREATE SCHEMA MYERP;

13/05/19 ошибка: Я протестировал много вариантов, некоторые из них работали, другие нет. В настоящее время я получаю « сбой соединения » или « соединение отклонено », когда gitlab пытается запустить мой профиль test-business . Ошибка 16/05/19: я попытался изменить URL в файл datasource.properties, например: url=jdbc:postgresql://runner@postgres:5432/db_myerp вместо localhost: 9032 (я использовал этот URL для своих локальных интеграционных тестов), но теперь я получил ошибку:

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.postgresql.util.PSQLException: The connection attempt failed.
    at com.dummy.myerp.testbusiness.business.TestIntComptabiliteManagerImpl.insertEcritureComptable(TestIntComptabiliteManagerImpl.java:127)
Caused by: org.postgresql.util.PSQLException: The connection attempt failed.
    at com.dummy.myerp.testbusiness.business.TestIntComptabiliteManagerImpl.insertEcritureComptable(TestIntComptabiliteManagerImpl.java:127)
Caused by: java.net.UnknownHostException: runner@postgres
    at com.dummy.myerp.testbusiness.business.TestIntComptabiliteManagerImpl.insertEcritureComptable(TestIntComptabiliteManagerImpl.java:127)

Я попытался настроить файл bootstrapContext.xml для загрузки других контекстов. Я также попытался добавить файл datasource.properties. Я много раз модифицировал мой .gitlab-ci.yml файл конфигурации.

У меня есть тесты junit, которые я выполняю локально, и интеграционные тесты (профиль «test-business»), которые я хочу запустить на gitlab-ci.com с помощью их онлайн-решения CI / CD.

Моя настройка:

Вот мое дерево файлов в intelliJ: Дерево файлов в IntelliJ Дерево файлов 2-ая часть

gitlab-ci.yml:

---
before_script:

image: "maven:latest"
services:
  - "postgres:latest"
stages:
  - test
test:
  script:
    - "echo \" TEST INTEGRATION - BUSINESS\""
    - "mvn clean install -f src/pom.xml -P test-business"
  stage: test
variables:
  DATABASE_URL: "postgres://runner@postgres:5432/db_myerp
  POSTGRES_DB: db_myerp
  POSTGRES_PASSWORD: myerp
  POSTGRES_SCRIPT_CREATION_SCHEMA: 01_create_schema.sql
  POSTGRES_SCRIPT_CREATION_TABLES: 02_create_tables.sql
  POSTGRES_SCRIPT_INSERT_DATA: 21_insert_data_demo.sql
  POSTGRES_USER: usr_myerp

(Примечание: -f src/pom.xml указывает, где находится мой файл pom.xml для gitlab, потому что он не в корне gitlab.)

datasource.properties (в myerp-business ... ресурсы)

driver=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/db_myerp
dbuser=usr_myerp
dbpassword=myerp

Примечание: насчет URL, я не уверен, я пытался изменить его разное время для целей тестирования. Локально на моем компьютере я использую докер на localhost: 9032, но на gitlab-ci я должен использовать сервис докера, верно?

BootstrapContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:ctx="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>datasource.properties</value>
            </list>
        </property>
        <property name="ignoreUnresolvablePlaceholders" value="false"/>
        <property name="fileEncoding" value="UTF-8"/>
    </bean>
   <!-- <bean id = "dataSourceMYERP"
          class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name = "driverClassName" value = "org.postgresql.Driver"/>
        <property name = "url" value = "jdbc:postgresql://localhost:9032/db_myerp"/>
        <property name = "username" value = "usr_myerp"/>
        <property name = "password" value = "myerp"/>
    </bean>-->
    <import resource="classpath:com/dummy/myerp/business/applicationContext.xml"/>
    <import resource="classpath:com/dummy/myerp/business/transactionContext.xml"/>
    <import resource="classpath:com/dummy/myerp/consumer/sqlContext.xml"/>
    <import resource="classpath:com/dummy/myerp/consumer/applicationContext.xml"/>
    <import resource="classpath:com/dummy/myerp/technical/applicationContext.xml"/>
</beans>

Parent pom.xml:

Ссылка на родительский pom.xml

В итоге:

У меня есть многомодульный проект, в котором используются модульные и интеграционные тесты. Локально я использую докер, который запускает мой локальный postgreSQL. Пока тесты работают. Я хотел бы правильно использовать онлайн-решение Gitlab-ci / cd, но я немного застрял в понимании того, как все работает, и как мне настроить его наиболее простым способом.

...