/ / Jenkins przy użyciu okna dokowanego: Jak uruchomić testy? - Jenkins, doker

Jenkins za pomocą docker: Jak uruchomić testy? - jenkins, doker

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 № 1

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 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.