Ich habe mit Jenkins in einem Maven-Container gebaut. Wie auch immer, ich wollte auf einmal ein Docker-Image erstellen. Es dauerte länger als ich erwartet hatte.
src
Dockerfile
Jenkinsfile
pom.xml
Die Quelle und die oben genannten Dateien werden im Git-Repository gespeichert.
Dockerfile
FROM tomcat:jdk14-openjdk
COPY target/*.war /usr/local/tomcat/webapps/
Die vom Build erstellte Kriegsdatei wird unter Webanwendungen gespeichert. Verwalten Sie im selben Repository wie Ihr Code.
Jenkinsfile
pipeline {
agent any
stages {
stage('delete_workspace') {
steps {
deleteDir()
}
}
stage('build') {
agent {
docker {
label 'master'
image 'maven:3.6.3-openjdk-14'
}
}
steps {
// Run Maven on a Unix agent.
sh "mvn clean package"
}
post {
success {
archiveArtifacts 'target/*.war'
}
}
}
stage('docker build') {
agent { label 'master'}
steps {
sh 'docker build -t test-tomcat:0.1 .'
}
////Beim Löschen nachträglich.
// post {
// always {
// deleteDir()
// }
// }
}
}
}
Erstellt mit deklarativer Pipeline.
stage
pipeline {
agent any
stages {
Wenn kein Agent vorhanden ist, ist der Job fehlgeschlagen, daher wird er beschrieben.
delete_workspace
stage('delete_workspace') {
steps {
deleteDir()
}
}
Es gibt ein Muster, um den Arbeitsbereich im Voraus zu löschen und immer nachträglich auszuführen. Wenn jedoch ein Fehler im Job auftritt, ist es schwierig, ihn persönlich zu isolieren, wenn er gelöscht wird. Daher ist es eine Gruppe, ihn vor dem Job auszuführen.
build
agent {
docker {
label 'master'
image 'maven:3.6.3-openjdk-14'
}
}
Der Maven-Container wird auf dem Masterknoten ausgeführt. Es dauerte eine Weile, bis mir klar wurde, dass sich die Knotenbezeichnung in dieser Position befand.
steps {
// Run Maven on a Unix agent.
sh "mvn clean package"
}
post {
success {
archiveArtifacts 'target/*.war'
}
}
Maven baut und speichert Artefakte.
docker build
stage('docker build') {
agent { label 'master'}
steps {
sh 'docker build -t test-tomcat:0.1 .'
}
////Beim Löschen nachträglich.
// post {
// always {
// deleteDir()
// }
// }
}
Da ich Docker auf dem Master gestartet habe, geben Sie Agent als Master an. Da die im Maven-Container erstellten Artefakte und Docker-Dateien im Arbeitsbereich des Hosts gespeichert sind, Führen Sie Docker Build so aus, wie es ist.
Ich wusste nicht, dass ein Gebäude ohne Container die Build-Ergebnisse im Host-Arbeitsbereich belassen würde. Die Erstellung hat lange gedauert. Ich fand auch, dass ich in Scripted Pipeline schreiben musste, um verschiedene Dinge mit Docker in Jenkins zu tun. Für Jenkins ist es einfacher, Ansible- oder Docker-Compose-Befehle aufzurufen, als hart mit Pipelines zu arbeiten. Ich hatte das Gefühl, dass es leicht zu pflegen war. Welches ist es eigentlich?
https://www.jenkins.io/doc/book/pipeline/docker/
Recommended Posts