Tworzę środowisko testowe Jenkins przy użyciudoker dla CI. Mam zainstalowany pojemnik z Jenkins i wszystkie zadania przeniesione z moich poprzednich Jenkins. Teraz utknąłem z tym problemem, w którym muszę uruchomić testy, które wymagają jednostki DB i PHP.
Nie chcę instalować ich w moich dżinsachkontener jak mam dedykowane kontenery dla DB, phpunit. Moje pytanie brzmi więc, jak mogę uruchomić zadanie Jenkinsa, aby wykonać testy w oknie dokowanym zawierającym niezbędne wymagania wstępne.
Mam dwie opcje, ale nie jestem pewien, czy są wykonalne,
Opcja 1:
Kiedy uruchomisz zadanie w Jenkins, uruchom docker run [kontener ze wszystkimi zależnościami] [skrypt do uruchomienia testu] Ale nie jestem pewien, czy możemy uruchomić uruchamianie dokera z wnętrza kontenera?
Opcja 2:
Utwórz nowy kontener i zainstaluj jenkins slaveNa tym. Dodaj ten pojemnik do jenkins-master i uruchom test na slave. Upewnij się, że slave ma linki do bazy danych i kontenerów jednostek PHP. czy to możliwe?
Dzięki
Odpowiedzi:
6 dla odpowiedzi № 1Nie jestem pewien, czy odpowiem na twoje pytanie, ale w Deklaratywnym rurociągu Jenkinsa https://jenkins.io/doc/book/pipeline/syntax/ możesz łatwo uruchomić kontenery dokerów, na których możesz chcieć wykonać kroki specyficzne dla Twojej technologii, takie jak
php --version
Jeśli Twój Jenkins działa jako kontener Docker,możesz chcieć rozszerzyć ten obraz za pomocą klienta Docker, co pozwala połączyć się z hostem Docker i spawnować nowe kontenery Docker, ponieważ rodzeństwo kontenera Jenkins nie jest dzieckiem. W tym celu należy wskazać docker.sock na ten z hosta przypisującego woluminy w oknie dokowanym uruchomionym w następujący sposób:
docker run -v /var/run/docker.sock:/var/run/docker.sock
Pełny opis takiego rozwiązania można znaleźć w tym poście na blogu: https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
Prosty potok do uruchamiania dokera z php i działaniem php --version
wygląda tak.
pipeline {
agent { docker "php" }
stages {
stage("build") {
steps {
sh "php --version"
}
}
}
}
Przykład znaleziony tutaj https://jenkins.io/doc/pipeline/tour/hello-world/
Mam nadzieję, że trochę pomaga.
1 dla odpowiedzi nr 2
Polecam wybrać opcję 2
Użyj wyzwalacza zadań Jenkins, aby uruchamiać zadania w węźle Jenkins slave zamiast w kontenerze Jenkins.
I użyć wtyczka dokującej Jenkinsa aby zarządzać kontenerami dokerów, które są DB, phpunit, traktować je jak węzeł jenkins slave, będzie to znacznie łatwiejsze.
6 dla odpowiedzi nr 3
Nie jestem pewien, czy odpowiem na twoje pytanie, ale w Deklaratywnym rurociągu Jenkinsa https://jenkins.io/doc/book/pipeline/syntax/ możesz łatwo uruchomić kontenery dokerów, na których możesz chcieć wykonać kroki specyficzne dla Twojej technologii, takie jak
php --version
Jeśli Twój Jenkins działa jako kontener Docker,możesz chcieć rozszerzyć ten obraz za pomocą klienta Docker, co pozwala połączyć się z hostem Docker i spawnować nowe kontenery Docker, ponieważ rodzeństwo kontenera Jenkins nie jest dzieckiem. W tym celu należy wskazać docker.sock na ten z hosta przypisującego woluminy w oknie dokowanym uruchomionym w następujący sposób:
docker run -v /var/run/docker.sock:/var/run/docker.sock
Pełny opis takiego rozwiązania można znaleźć w tym poście na blogu: https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
Prosty potok do uruchamiania dokera z php i działaniem php --version
wygląda tak.
pipeline {
agent { docker "php" }
stages {
stage("build") {
steps {
sh "php --version"
}
}
}
}
Przykład znaleziony tutaj https://jenkins.io/doc/pipeline/tour/hello-world/
Mam nadzieję, że trochę pomaga.
1 dla odpowiedzi nr 4
Polecam wybrać opcję 2
Użyj wyzwalacza zadań Jenkins, aby uruchamiać zadania w węźle Jenkins slave zamiast w kontenerze Jenkins.
I użyć wtyczka dokującej Jenkinsa aby zarządzać kontenerami dokerów, które są DB, phpunit, traktować je jak węzeł jenkins slave, będzie to znacznie łatwiejsze.