Ćwiczenie — kompilowanie obrazu aplikacji
W tej lekcji utworzysz potok przejściowy funkcji GitHub Actions, tworząc obraz aplikacji i wypychając go do usługi Azure Container Registry.
Na poniższej ilustracji przedstawiono zaprojektowany potok ciągłej integracji/ciągłego wdrażania:
W tym ćwiczeniu utworzysz potok przejściowy, wykonując następujące czynności:
- Utwórz przepływ pracy funkcji GitHub Actions.
on push
Utwórz wyzwalacz.- Skompiluj i wypchnij obraz aplikacji.
- Ustaw wpisy tajne.
- Uruchom to zadanie.
Tworzenie przepływu pracy funkcji GitHub Actions
Przepływy pracy w usłudze GitHub są podzielone na zadania, a zadania są podzielone na kroki. Każdy krok może mieć wiele poleceń i użyć wielu akcji do wykonania.
Aby rozpocząć tworzenie potoku, przejdź do rozwidlenia przykładowego repozytorium w witrynie internetowej GitHub.
Wybierz kartę Działania.
Wybierz link, aby samodzielnie skonfigurować przepływ pracy.
W tym momencie potok jest tylko pustym plikiem w katalogu .github/workflows w repozytorium. Usługa GitHub udostępnia wstępnie utworzone składniki niezbędne do budowy większości potoków. Aby rozpocząć, skopiuj i wklej następujący kod w okienku Edytuj nowy plik :
# This is a basic workflow to help you get started with Actions name: CI # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the main branch on: push: branches: [ main ] pull_request: branches: [ main ] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 # Runs a single command using the runners shell - name: Run a one-line script run: echo Hello, world! # Runs a set of commands using the runners shell - name: Run a multi-line script run: | echo Add other actions to build, echo test, and deploy your project.
Powyżej okienka Edit new file (Edytowanie nowego pliku), zmień nazwę pliku z main.yml na build-staging.yml.
Zmień klucz z
CI
naname
Build and push the latest build to staging
.# This is a basic workflow to help you get started with Actions name: Build and push the latest build to staging
Modyfikowanie wyzwalacza "włączone"
Podstawowy szablon przepływu pracy zawiera dwa wyzwalacze:
- Dowolne wypchnięcie kodu do gałęzi głównej
- Dowolne żądanie ściągnięcia w gałęzi głównej
Potok nie jest potrzebny do uruchomienia w żądaniu ściągnięcia, więc zmodyfikuj go, aby zachować tylko wyzwalacz wypychania, zmieniając wyzwalacze w kluczu on
. Usuń drugi wyzwalacz i pozostaw tylko tagi push
.
name: Build and push the latest build to staging
on:
push:
branches: [ main ]
Konfigurowanie kroku wyewidencjonowania
Następnie rozpocznij pracę nad krokami zadania. W tym procesie implementujesz zarówno zadania kompilacji, jak i zadania wdrażania na diagramie projektu potoku.
W obszarze
jobs
zmień nazwębuild
klucza nabuild_push_image
.Chcesz, aby ten przepływ pracy był uruchamiany w systemie Ubuntu 20.04, więc zmień
runs-on
klucz zubuntu-latest
naubuntu-20.04
.Usuń dwa ostatnie polecenia w kluczu
steps
, które są tylko przykładami szablonu.Plik bez komentarzy powinien wyglądać następująco:
name: Build and push the latest build to staging on: push: branches: [ main ] jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2
Masz teraz krok, który używa checkout
akcji. Ta akcja klonuje repozytorium do środowiska zadań. Ten krok jest odpowiednikiem pierwszej akcji Sklonuj repozytorium na diagramie projektowania potoku.
Dodawanie kroków platformy Docker
Następnie dodaj akcje w celu skompilowania obrazu platformy Docker. Możesz dostosować użycie tych akcji. W tym przykładzie użyto tylko kilku dostępnych parametrów. Więcej informacji zawiera dokumentacja akcji kompilowania i wypychania w usłudze GitHub.
Na karcie Marketplace w prawym panelu wyszukaj nazwę logowania platformy Docker i wybierz pierwszy wynik opublikowany przez platformę Docker.
Uwaga
Akcje platformy Docker przed wersją 2 miały wbudowany przepływ logowania, ale w wersjach 2 i nowszych te akcje są oddzielone, dlatego potrzebne są dwie akcje, aby poprawnie ustawić przepływ pracy.
W obszarze Instalacja wybierz ikonę kopiowania, aby skopiować kod YAML użycia.
Wklej skopiowany kod YAML poniżej
actions/checkout@v2
akcji.Ważne
Uważnie korzystaj z wcięć, gdy używasz kodu YAML. Klucz
name
powinien być wyrównany z poprzednim kluczemuses
.Dodaj następujące wartości do
registry
kluczy ,username
ipassword
:registry
:${{ secrets.ACR_NAME }}
username
:${{ secrets.ACR_LOGIN }}
password
:${{ secrets.ACR_PASSWORD }}
Usuń inne klucze, ponieważ nie są one używane w tym ćwiczeniu.
W panelu po prawej stronie w obszarze Marketplace wyszukaj obrazy kompilowania i wypychania docker, a następnie wybierz pierwszy wynik opublikowany przez platformę Docker.
W obszarze Instalacja wybierz ikonę kopiowania, aby skopiować kod YAML użycia.
Wklej skopiowany kod YAML poniżej ostatniego klucza z wcześniej skopiowanej
docker-login
akcji.name
Zmień nazwę klucza zBuild and push Docker images
naBuild and push staging images
.Dodaj następujące wartości do
context
kluczy ,push
itags
:context
:.
push
:true
tags
:${{secrets.ACR_NAME}}/contoso-website:latest
Usuń inne klucze, ponieważ nie są one używane w tym ćwiczeniu.
Dodaj kolejną akcję wywołaną
docker/setup-buildx-action
między akcją wyewidencjonowania a akcją logowania, aby skonfigurować aparat kompilacji do użycia przez platformę Docker. Skopiuj poniższy fragment kodu i wklej go między akcjamicheckout
ilogin
.- name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0
Końcowy plik, bez komentarzy, powinien wyglądać jak w poniższym przykładzie:
name: Build and push the latest build to staging on: push: branches: [ main ] jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Docker Login uses: docker/login-action@v3.0.0 with: registry: ${{ secrets.ACR_NAME }} username: ${{ secrets.ACR_LOGIN }} password: ${{ secrets.ACR_PASSWORD }} - name: Build and push staging images uses: docker/build-push-action@v5.0.0 with: context: . push: true tags: ${{secrets.ACR_NAME}}/contoso-website:latest
Zatwierdzanie zmian
Aby zatwierdzić zmiany, wybierz przycisk Zatwierdź zmiany w prawym górnym rogu. Na ekranie Zatwierdzanie zmian wprowadź opis zatwierdzenia, a następnie wybierz pozycję Zatwierdź zmiany.
Wybranie pozycji Zatwierdź zmiany powoduje wyzwolenie nowej kompilacji, ale ta kompilacja kończy się niepowodzeniem, ponieważ nie ustawiono jeszcze wpisów tajnych.
Ustawianie wpisów tajnych
Aby ustawić wpisy tajne, na stronie repozytorium GitHub wybierz kartę Ustawienia, a następnie wybierz pozycję Wpisy tajne i zmienne>Akcje z menu po lewej stronie. Zdefiniuj następujące wpisy tajne używane przez przepływ pracy:
ACR_NAME
ACR_Name
: wartość zwrócona przez skrypt instalacyjnyACR_LOGIN
ACR Login Username
: wartość zwrócona przez skrypt instalacyjnyACR_PASSWORD
ACR Login Password
: wartość zwrócona przez skrypt instalacyjnyRESOURCE_GROUP
Resource Group Name
: wartość zwrócona przez skrypt instalacyjnyCLUSTER_NAME
: contoso-video
Aby zdefiniować każdy wpis tajny:
- Wybierz pozycję Nowy wpis tajny repozytorium.
- W polu Nazwa wprowadź nazwę wpisu tajnego z poprzedniej listy.
- W polu Wpis tajny wprowadź wartość zapisaną ze skryptu instalacji lub uruchom zapytanie usługi Cloud Shell, aby uzyskać wartość.
- Wybierz przycisk Add secret (Dodaj wpis tajny).
Uruchamianie opcjonalnych zapytań w celu pobrania wartości wpisów tajnych
Jeśli nie masz wartości zwróconych przez skrypt konfiguracji, możesz uruchomić następujące polecenia w usłudze Azure Cloud Shell, aby uzyskać informacje:
ACR_NAME
:az acr list --query "[?contains(resourceGroup, 'mslearn-gh-pipelines')].loginServer" -o table
ACR_LOGIN
:az acr credential show --name <ACR_NAME> --query "username" -o table
ACR_PASSWORD
:az acr credential show --name <ACR_NAME> --query "passwords[0].value" -o table
RESOURCE_GROUP
:az aks list -o tsv --query "[?name=='contoso-video'].resourceGroup"
Uruchamianie zadania
Wybierz kartę Działania.
Wybierz jedyne wykonanie na liście— zadanie build-staging.yml, które zakończyło się niepowodzeniem.
W prawym górnym rogu wybierz pozycję Uruchom ponownie zadania>Ponownie uruchom wszystkie zadania, a następnie na ekranie Ponowne uruchamianie wszystkich zadań wybierz pozycję Uruchom ponownie zadania.
Po zakończeniu kompilacji uruchom polecenie
az acr repository list --name <ACR_NAME> -o table
w usłudze Cloud Shell , aby potwierdzić, żecontoso-website
w wynikach pojawi się repozytorium usługi Container Registry.
Przejdź do następnej lekcji, aby skompilować produkcyjny przepływ pracy.