J'ai un Dockerfile qui se termine par
ENTRYPOINT ["node", "index.js"]
CMD ["--help"]
Le index.js
Peut prendre quelques arguments différents et j'ai également besoin d'exposer un port pour le conteneur, donc si je l'exécute manuellement, je fais quelque chose comme:
docker run -p 3000:3000 my_container:latest --arg1 somearg --arg2 anotherarg
Comment faire cela dans un fichier Jenkins? Mon test communiquera avec ce conteneur, il doit donc être exécuté avant d'exécuter le test. J'utilise withRun()
pour le faire fonctionner avant le test mais je ne vois pas comment spécifier le --arg1 somearg --arg2 anotherarg
stage('TestMicroservice') {
//
// HOW DO I SPECIFY '--arg1 somearg --arg2 anotherarg'?
//
docker.image("my_container:latest").withRun('-p 3000:3000') {
sh 'npm run test-microservice'
}
}
Vous pouvez utiliser le deuxième argument de withRun
.withRun('-p 3000:3000', '--arg1 somearg --arg2 anotherarg')
Utilisez .withRun('-p 3000:3000', '--arg1 arg1 --arg2 arg2')
. La documentation pour cela se trouve dans le docker-workflow-plugin ici .
Vous pouvez également passer des arguments de conteneur en utilisant la méthode inside. Ci-dessous, un exemple tiré de https://jenkins.io/doc/book/pipeline/docker/#caching-data-for-containers (cliquez sur le lien Toggle Scripted Pipeline pour le voir)
node {
/* Requires the Docker Pipeline plugin to be installed */
docker.image('maven:3-Alpine').inside('-v $HOME/.m2:/root/.m2') {
stage('Build') {
sh 'mvn -B'
}
}
}