Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Podczas gdy wiele usług platformy Azure ma wtyczki Jenkins, większość z tych wtyczek zakończyła wsparcie od 29 lutego 2024 r. Interfejs wiersza polecenia platformy Azure to obecnie zalecany sposób integracji serwera Jenkins z usługami platformy Azure. Aby uzyskać więcej informacji, zapoznaj się z artykułem wtyczki serwera Jenkins dla usługi Azure.
Aby zautomatyzować fazę kompilowania i testowania tworzenia aplikacji, możesz użyć potoku ciągłej integracji i wdrażania (CI/CD). W tym samouczku utworzysz pipeline CI/CD na maszynie wirtualnej Azure, który obejmuje:
- Tworzenie maszyny wirtualnej serwera Jenkins
- Instalowanie i konfigurowanie usługi Jenkins
- Tworzenie integracji webhooku między GitHubem a Jenkinsem
- Tworzenie i wyzwalanie zadań kompilacji usługi Jenkins na podstawie zatwierdzeń usługi GitHub
- Tworzenie obrazu platformy Docker dla aplikacji
- Weryfikowanie zatwierdzeń usługi GitHub kompilowanie nowego obrazu platformy Docker i aktualizacji uruchomionej aplikacji
Ten samouczek używa wiersza polecenia w usłudze Azure Cloud Shell, który jest stale aktualizowany do najnowszej wersji. Aby otworzyć Cloud Shell, wybierz opcję Wypróbuj w górnej części dowolnego bloku kodu.
Jeśli zdecydujesz się zainstalować i używać CLI lokalnie, ten samouczek wymaga, abyś miał zainstalowaną wersję Azure CLI 2.0.30 lub nowszą. Uruchom az --version
, aby znaleźć wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
Tworzenie wystąpienia narzędzia Jenkins
W poprzednim samouczku dotyczącym dostosowywania maszyny wirtualnej z systemem Linux podczas pierwszego rozruchu przedstawiono sposób automatyzowania dostosowywania maszyny wirtualnej przy użyciu pakietu cloud-init. W tym samouczku użyto pliku cloud-init do zainstalowania serwera Jenkins i platformy Docker na maszynie wirtualnej. Jenkins to popularny serwer automatyzacji typu open source, który bezproblemowo integruje się z platformą Azure, aby umożliwić ciągłą integrację i ciągłe dostarczanie (CD). Aby uzyskać więcej samouczków dotyczących korzystania z usługi Jenkins, zobacz narzędzie Jenkins w usłudze Azure Hub.
W bieżącej powłoce utwórz plik o nazwie cloud-init-jenkins.txt i wklej następującą konfigurację. Na przykład utwórz plik w usłudze Cloud Shell, a nie na maszynie lokalnej. Wprowadź sensible-editor cloud-init-jenkins.txt
polecenie , aby utworzyć plik i wyświetlić listę dostępnych edytorów. Upewnij się, że cały plik cloud-init został poprawnie skopiowany, zwłaszcza pierwsza linia.
#cloud-config
package_upgrade: true
write_files:
- path: /etc/systemd/system/docker.service.d/docker.conf
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
- path: /etc/docker/daemon.json
content: |
{
"hosts": ["fd://","tcp://127.0.0.1:2375"]
}
runcmd:
- apt install openjdk-8-jre-headless -y
- wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
- sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
- apt-get update && apt-get install jenkins -y
- curl -sSL https://get.docker.com/ | sh
- usermod -aG docker azureuser
- usermod -aG docker jenkins
- service jenkins restart
Zanim będzie można utworzyć maszynę wirtualną, utwórz grupę zasobów za pomocą polecenia az group create. Poniższy przykład tworzy grupę zasobów o nazwie myResourceGroupJenkins w lokalizacji eastus :
az group create --name myResourceGroupJenkins --location eastus
Teraz utwórz maszynę wirtualną za pomocą az vm create. Użyj parametru --custom-data
do przekazania swojego pliku konfiguracyjnego cloud-init. Podaj pełną ścieżkę do cloud-init-jenkins.txt , jeśli plik został zapisany poza obecnym katalogem roboczym.
az vm create --resource-group myResourceGroupJenkins \
--name myVM \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data cloud-init-jenkins.txt
Utworzenie i skonfigurowanie maszyny wirtualnej może potrwać kilka minut.
Aby zezwolić na ruch internetowy do maszyny wirtualnej, użyj polecenia az vm open-port, aby otworzyć port 8080 dla ruchu usługi Jenkins oraz port 1337 dla aplikacji Node.js wykorzystywanej do uruchamiania przykładowej aplikacji.
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 8080 --priority 1001
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 1337 --priority 1002
Konfigurowanie usługi Jenkins
Aby uzyskać dostęp do wystąpienia Jenkins, zdobądź publiczny adres IP maszyny wirtualnej.
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
W celach bezpieczeństwa należy wprowadzić początkowe hasło administratora przechowywane w pliku tekstowym na maszynie wirtualnej, aby rozpocząć instalację serwera Jenkins. Użyj publicznego adresu IP uzyskanego w poprzednim kroku do protokołu SSH na maszynie wirtualnej:
ssh azureuser@<publicIps>
Sprawdź, czy narzędzie Jenkins jest uruchomione przy użyciu service
polecenia :
$ service jenkins status
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Tue 2019-02-12 16:16:11 UTC; 55s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 4103)
CGroup: /system.slice/jenkins.service
Feb 12 16:16:10 myVM systemd[1]: Starting LSB: Start Jenkins at boot time...
...
Wyświetl plik initialAdminPassword
dla instalacji narzędzia Jenkins i skopiuj go:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Jeśli plik nie jest jeszcze dostępny, poczekaj kilka minut, aż pakiet cloud-init ukończy instalację serwera Jenkins i platformy Docker.
Teraz otwórz przeglądarkę internetową i przejdź do strony http://<publicIps>:8080
. Wykonaj początkową konfigurację serwera Jenkins w następujący sposób:
- Wybierz Wybierz wtyczki do zainstalowania
- Wyszukaj ciąg GitHub w polu tekstowym u góry. Zaznacz pole wyboru dla usługi GitHub, a następnie wybierz pozycję Zainstaluj
- Utwórz pierwszego użytkownika administratora. Wprowadź nazwę użytkownika, taką jak administrator, a następnie podaj własne bezpieczne hasło. Na koniec wpisz pełną nazwę i adres e-mail.
- Wybierz pozycję Zapisz i zakończ
- Gdy narzędzie Jenkins będzie gotowe, wybierz pozycję Rozpocznij korzystanie z usługi Jenkins
- Jeśli przeglądarka internetowa wyświetli pustą stronę po rozpoczęciu korzystania z serwera Jenkins, uruchom ponownie usługę Jenkins. W sesji SSH wpisz
sudo service jenkins restart
, a następnie odśwież przeglądarkę internetową.
- Jeśli przeglądarka internetowa wyświetli pustą stronę po rozpoczęciu korzystania z serwera Jenkins, uruchom ponownie usługę Jenkins. W sesji SSH wpisz
- W razie potrzeby zaloguj się do serwera Jenkins przy użyciu utworzonej nazwy użytkownika i hasła.
Utwórz webhook GitHub
Aby skonfigurować integrację z usługą GitHub, otwórz przykładową aplikacjęNode.js Hello World z repozytorium przykładów platformy Azure. Aby sforkować repozytorium na własne konto GitHub, wybierz przycisk Fork w prawym górnym rogu.
Utwórz webhook wewnątrz utworzonego forku.
- Wybierz Ustawienia, a następnie wybierz Webhooki na lewej stronie.
- Wybierz Dodaj webhook, a następnie wpisz Jenkins w polu filtrowania.
- W polu Adres URL ładunku wprowadź
http://<publicIps>:8080/github-webhook/
. Upewnij się, że dołączysz ciąg końcowy / - W polu Typ zawartości wybierz pozycję application/x-www-form-urlencoded.
- Które zdarzenia chcesz użyć do uruchomienia tego webhooka?, wybierz Tylko zdarzenie push.
- Ustaw opcję Aktywna jako zaznaczoną.
- Kliknij Dodaj webhook.
Tworzenie zadania narzędzia Jenkins
Aby Jenkins odpowiedział na zdarzenie w GitHub, takie jak zatwierdzenie kodu, utwórz zadanie w Jenkinsie. Użyj adresów URL dla własnego rozwidlenia usługi GitHub.
W witrynie internetowej usługi Jenkins wybierz pozycję Utwórz nowe zadania na stronie głównej:
- Wprowadź HelloWorld jako nazwę zadania. Wybierz pozycję Projekt Freestyle, a następnie wybierz przycisk OK.
- W sekcji Ogólne wybierz Projekt GitHub i wprowadź adres URL rozwidlonemu repozytorium, taki jak
https://github.com/cynthn/nodejs-docs-hello-world
- W sekcji Zarządzanie kodem źródłowym wybierz opcję Git, wprowadź adres URL swojego rozwidlenia repozytorium .git, na przykład
https://github.com/cynthn/nodejs-docs-hello-world.git
- W sekcji Build Triggers (Wyzwalacze kompilacji) wybierz GitHub hook trigger for GITscm polling.
- W sekcji Kompilacja wybierz pozycję Dodaj krok kompilacji. Wybierz pozycję Uruchom powłokę, a następnie wprowadź
echo "Test"
w oknie polecenia. - Wybierz pozycję Zapisz w dolnej części okna zadań.
Testowanie integracji z usługą GitHub
Aby przetestować integrację usługi GitHub z usługą Jenkins, zatwierdź zmianę w rozwidleniu.
Wróć do webowego interfejsu GitHub, wybierz sforkowane repozytorium, a następnie wybierz plik index.js. Wybierz ikonę ołówka, aby edytować ten plik i zrobić tak, żeby wiersz 6 brzmiał:
response.end("Hello World!");
Aby zatwierdzić zmiany, wybierz przycisk Zatwierdź zmiany u dołu.
W usłudze Jenkins nowa kompilacja rozpoczyna się w sekcji Historia kompilacji w lewym dolnym rogu strony zadania. Wybierz link numeru kompilacji i z lewej strony wybierz Dane wyjściowe konsoli. Możesz wyświetlić kroki wykonywane przez narzędzie Jenkins, gdy kod jest ściągany z usługi GitHub, a akcja kompilacji generuje komunikat Test
do konsoli. Za każdym razem, gdy commit jest wykonywany w GitHub, webhook dociera do serwera Jenkins i wyzwala nową kompilację.
Definiowanie obrazu kompilacji platformy Docker
Aby zobaczyć aplikację Node.js uruchomioną na podstawie zatwierdzeń w GitHub, zbudujmy obraz Docker, aby uruchomić aplikację. Obraz jest tworzony na podstawie pliku Dockerfile, który definiuje sposób konfigurowania kontenera uruchamianego przez aplikację.
Z poziomu połączenia SSH z maszyną wirtualną przejdź do katalogu obszaru roboczego serwera Jenkins o nazwie po zadaniu utworzonym w poprzednim kroku. Przykład o nazwie HelloWorld.
cd /var/lib/jenkins/workspace/HelloWorld
Utwórz plik w tym katalogu obszaru roboczego z sudo sensible-editor Dockerfile
i wklej do niego następującą zawartość. Upewnij się, że cały plik Dockerfile został poprawnie skopiowany, zwłaszcza w pierwszym wierszu:
FROM node:alpine
EXPOSE 1337
WORKDIR /var/www
COPY package.json /var/www/
RUN npm install
COPY index.js /var/www/
Ten plik Dockerfile używa obrazu podstawowego Node.js przy użyciu systemu Alpine Linux, uwidacznia port 1337 uruchomiony przez aplikację Hello World, a następnie kopiuje pliki aplikacji i inicjuje go.
Tworzenie reguł kompilacji usługi Jenkins
W poprzednim kroku utworzono podstawową regułę kompilacji serwera Jenkins, która generuje komunikat do konsoli. Utwórzmy krok kompilacji, aby użyć naszego pliku Dockerfile i uruchomić aplikację.
Po powrocie do wystąpienia narzędzia Jenkins wybierz zadanie utworzone w poprzednim kroku. Wybierz pozycję Konfiguruj po lewej stronie i przewiń w dół do sekcji Kompilacja :
Usuń istniejący
echo "Test"
krok kompilacji. Wybierz czerwony X w prawym górnym rogu istniejącego pola etapu kompilacji.Wybierz Dodaj krok kompilacji, a następnie wybierz Uruchom w powłoce systemowej
W polu Polecenie wprowadź następujące polecenia platformy Docker, a następnie wybierz pozycję Zapisz:
docker build --tag helloworld:$BUILD_NUMBER . docker stop helloworld && docker rm helloworld docker run --name helloworld -p 1337:1337 helloworld:$BUILD_NUMBER node /var/www/index.js &
Kroki kompilacji platformy Docker tworzą obraz i tagują go przy użyciu numeru kompilacji narzędzia Jenkins, aby można było zachować historię obrazów. Wszystkie istniejące kontenery z uruchomioną aplikacją zostaną zatrzymane, a następnie usunięte. Nowy kontener jest następnie uruchamiany przy użyciu obrazu i uruchamia aplikację Node.js na podstawie najnowszych zatwierdzeń w usłudze GitHub.
Testowanie potoku
Aby zobaczyć cały potok w akcji, ponownie zmodyfikuj plik index.js w rozwidlonym repozytorium GitHub i wybierz Zatwierdź zmianę. Nowe zadanie jest uruchamiane w usłudze Jenkins na podstawie webhooka z GitHub. Utworzenie obrazu platformy Docker i uruchomienie aplikacji w nowym kontenerze potrwa kilka sekund.
W razie potrzeby ponownie uzyskaj publiczny adres IP maszyny wirtualnej:
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
Otwórz przeglądarkę internetową i wprowadź http://<publicIps>:1337
. Aplikacja Node.js jest wyświetlana i odzwierciedla najnowsze zatwierdzenia w fork GitHub w następujący sposób:
Teraz wprowadź kolejną edycję pliku index.js w usłudze GitHub i zatwierdź zmianę. Poczekaj kilka sekund na ukończenie zadania w usłudze Jenkins, a następnie odśwież przeglądarkę internetową, aby wyświetlić zaktualizowaną wersję aplikacji uruchomionej w nowym kontenerze w następujący sposób:
Dalsze kroki
W tym samouczku skonfigurowano usługę GitHub do uruchamiania zadania kompilacji narzędzia Jenkins w każdym zatwierdzeniu kodu, a następnie wdrażania kontenera platformy Docker w celu przetestowania aplikacji. Nauczyłeś się, jak:
- Tworzenie maszyny wirtualnej serwera Jenkins
- Instalowanie i konfigurowanie usługi Jenkins
- Tworzenie integracji webhooku między GitHubem a Jenkinsem
- Tworzenie i wyzwalanie zadań kompilacji usługi Jenkins na podstawie zatwierdzeń usługi GitHub
- Tworzenie obrazu platformy Docker dla aplikacji
- Weryfikowanie zatwierdzeń usługi GitHub kompilowanie nowego obrazu platformy Docker i aktualizacji uruchomionej aplikacji
Przejdź do następnego samouczka, aby dowiedzieć się więcej o tym, jak zintegrować usługę Jenkins z usługą Azure DevOps Services.