Je zapotřebí zaregistrovat runner jako privileged!
sudo gitlab-runner register -n \
--url https://gitlab.com/ \
--registration-token 4cwPkysLcMzEmDPsQsXM \
--executor docker \
--description "privileged" \
--docker-image "docker:19.03.12" \
--docker-privileged \
--docker-volumes "/certs/client" \
--tag-list "privileged"
Možná zavolat & restartovat hosta (to jsem zavolal když jsem byl zoufalý a nic mi nefungovalo, musím ještě ověřit jestli to je skutečně nutné nebo ne):
sudo usermod -aG docker gitlab-runner
Nastavení v .gitlab-ci.yml:
Použití v testu:
GenericContainer container = new GenericContainer(
new ImageFromDockerfile()
// je nutné dovnitř namapovat aplikaci a Dockerfile
// String je kam se to dovnitř kontejneru uloží
// Path je kde se nachází soubory na hostu
.withFileFromPath("target/app.jar", Path.of("./target/app.jar"))
.withFileFromPath("Dockerfile", Path.of("./Dockerfile"))
);
container
// uvnitř aplikace běží na portu 8080
.withExposedPorts(8080)
// cokoli se vypíše na stdout a errout, tak se vypisuje do logu (na třídě je @Slf4j)
.withLogConsumer(new Slf4jLogConsumer(log))
.withStartupTimeout(Duration.ofMinutes(10)) // výchozí je 60 vteřin
.start();
// získá na jaký port hosta se namapovalo cokoli co je na portu 8080
Integer containerMappedPort = container.getMappedPort(8080);
// získá IP adresu hosta (může to být localhost, ale nemusí)
String containerIpAddress = container.getContainerIpAddress();
Dockerfile:
FROM adoptopenjdk/maven-openjdk11
WORKDIR /app
COPY target/app.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=test"]
Školení mi pomohlo ujasnit si jak má správně probíhat testování kódu, představilo užitečné knihovny a nástroje. Vše bylo podáno zábavnou formou, takže nebyl problém udržet pozornost. Navíc byl výhodou dostatek
Jedno z nejlepších školení za poslední roky. Kromě seznámení se Springem apod. mě velmi příjemně překvapila hluboká znalost probírané látky a schopnost ji srozumitelně vysvětlit v případě ad hoc dotazů.
Přestože jsem Cčkař, tak jsem se na školení JUnit dozvěděl nové věci. Zejména co se týče metodiky jednotkového testování a některých odborných termínů.