Я пытаюсь использовать 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, но я немного застрял в понимании того, как все работает, и как мне настроить его наиболее простым способом.