J'essaie de faire en sorte que Docker configure un environnement de test complet dans lequel je peux exécuter des tests d'intégration, mais jusqu'à présent, cela ne fonctionne pas vraiment et j'ai même des problèmes pour récupérer les journaux.
Je veux donc l'exécuter comme un pipeline et je veux utiliser jenkinsfile. Voici ce que j'ai obtenu jusqu'à présent :
pipeline {
agent any
stages {
stage('build war') {
agent {
docker {
image 'gradle:latest'
reuseNode true
}
}
steps {
sh 'gradle war -b oven/build.gradle'
}
}
stage('test') {
steps {
script {
docker.image('mysql:latest').withRun('-e "MYSQL_ROOT_PASSWORD=password" -e "MYSQL_USER=root" -e "MYSQL_DATABASE=highlygroceries"') { c ->
docker.image('munhunger/highly-oven').withRun('-e "test=test"') { h ->
docker.image('mysql:latest').inside("--link ${c.id}:db") {
sh 'while ! mysqladmin ping -hdb --silent; do sleep 1; done'
}
docker.image('munhunger/highly-oven').inside("--link ${c.id}:db -e 'DB_URL=db:3306' -e 'DB_PASS=password' -e 'DB_USER=root'") {
sh 'sleep 5'
}
docker.image('gradle:latest').inside("--link ${h.id}:backend -e 'OVEN_URL=http://backend:8080'") {
sh 'gradle test -b oven/build.gradle'
}
sh "docker logs ${h.id}"
}
}
}
}
}
stage('build dockerimage') {
steps {
script {
dir('oven') {
def image = docker.build("munhunger/highly-oven")
docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
image.push("${env.BUILD_NUMBER}")
image.push("latest")
}
}
}
}
}
}
}
Mais il semble y avoir un problème avec la connexion entre mon backend et la base de données...
Tout ce que j'obtiens des journaux de construction est ceci :
se.munhunger.oven.rest.UserTest > System is up and running, Creating a user, it returns 204 upon creation FAILED
java.lang.AssertionError at UserTest.java:38
qui pointe vers :
Assert.assertEquals("non 204 from backend", 204,
client.target(baseURL + "/api/user")
.request()
.header("email", "mail@mail.mail")
.post(Entity.json(null))
.getStatus());
Je pense que la connexion entre le testeur et le backend fonctionne car le test suivant est réussi
Assert.assertEquals(200,
client.target(baseURL + "/swagger")
.request()
.get()
.getStatus());
Ce qui m'amène à la question principale : comment obtenir les logs de mon image docker backend ? J'ai l'impression que sans cela, il est pratiquement impossible de déboguer ce qui ne va pas.
Modifier J'ai fait sortir quelques journaux, mais au mauvais moment. Si je passe à ce qui suit :
docker.image('mysql:latest').withRun('-e "MYSQL_ROOT_PASSWORD=password" -e "MYSQL_USER=root" -e "MYSQL_DATABASE=highlygroceries"') { c ->
docker.image('munhunger/highly-oven').withRun('-e "test=test"') { h ->
docker.image('mysql:latest').inside("--link ${c.id}:db") {
sh 'while ! mysqladmin ping -hdb --silent; do sleep 1; done'
}
docker.image('munhunger/highly-oven').inside("--link ${c.id}:db -e 'DB_URL=db:3306' -e 'DB_PASS=password' -e 'DB_USER=root'") {
sh 'sleep 5'
}
sh "docker logs ${h.id}"
docker.image('gradle:latest').inside("--link ${h.id}:backend -e 'OVEN_URL=http://backend:8080'") {
sh 'gradle test -b oven/build.gradle'
}
sh "docker logs ${h.id}"
}
}
J'obtiens tous les journaux du démarrage, mais il n'imprime pas les journaux après l'échec du test.