Ćwiczenie — kompilowanie obrazu aplikacji

Ukończone

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:

Diagram that shows the procession from triggers, through three build steps, to the deploy steps in a pipeline.

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.

  1. Wybierz kartę Działania.

  2. Wybierz link, aby samodzielnie skonfigurować przepływ pracy.

    Screenshot that shows the Get started with GitHub Actions page on the GitHub website.

    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.
    
  3. Powyżej okienka Edit new file (Edytowanie nowego pliku), zmień nazwę pliku z main.yml na build-staging.yml.

    Screenshot that shows an example file being edited in the Edit new file pane on the GitHub website.

  4. Zmień klucz z CI na name 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.

  1. W obszarze jobszmień nazwę build klucza na build_push_image.

  2. Chcesz, aby ten przepływ pracy był uruchamiany w systemie Ubuntu 20.04, więc zmień runs-on klucz z ubuntu-latest na ubuntu-20.04.

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

  1. Na karcie Marketplace w prawym panelu wyszukaj nazwę logowania platformy Docker i wybierz pierwszy wynik opublikowany przez platformę Docker.

    Screenshot showing the search results listing Docker Login.

    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.

  2. W obszarze Instalacja wybierz ikonę kopiowania, aby skopiować kod YAML użycia.

    Screenshot showing the copy function and selecting the Docker Login task.

  3. 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 kluczem uses.

  4. Dodaj następujące wartości do registrykluczy , usernamei password :

    • registry: ${{ secrets.ACR_NAME }}
    • username: ${{ secrets.ACR_LOGIN }}
    • password: ${{ secrets.ACR_PASSWORD }}
  5. Usuń inne klucze, ponieważ nie są one używane w tym ćwiczeniu.

  6. W panelu po prawej stronie w obszarze Marketplace wyszukaj obrazy kompilowania i wypychania docker, a następnie wybierz pierwszy wynik opublikowany przez platformę Docker.

    Screenshot that shows the search results that list Build and push Docker images.

  7. W obszarze Instalacja wybierz ikonę kopiowania, aby skopiować kod YAML użycia.

  8. Wklej skopiowany kod YAML poniżej ostatniego klucza z wcześniej skopiowanej docker-login akcji.

  9. name Zmień nazwę klucza z Build and push Docker images na Build and push staging images.

  10. Dodaj następujące wartości do contextkluczy , pushi tags :

    • context: .
    • push: true
    • tags: ${{secrets.ACR_NAME}}/contoso-website:latest
  11. Usuń inne klucze, ponieważ nie są one używane w tym ćwiczeniu.

  12. 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 akcjami checkout i login .

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

Screenshot that shows the Commit changes button in the Commit changes pane.

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_NAMEACR_Name: wartość zwrócona przez skrypt instalacyjny
  • ACR_LOGINACR Login Username: wartość zwrócona przez skrypt instalacyjny
  • ACR_PASSWORDACR Login Password: wartość zwrócona przez skrypt instalacyjny
  • RESOURCE_GROUPResource Group Name: wartość zwrócona przez skrypt instalacyjny
  • CLUSTER_NAME: contoso-video

Aby zdefiniować każdy wpis tajny:

  1. Wybierz pozycję Nowy wpis tajny repozytorium.
  2. W polu Nazwa wprowadź nazwę wpisu tajnego z poprzedniej listy.
  3. W polu Wpis tajny wprowadź wartość zapisaną ze skryptu instalacji lub uruchom zapytanie usługi Cloud Shell, aby uzyskać wartość.
  4. 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

  1. Wybierz kartę Działania.

  2. Wybierz jedyne wykonanie na liście— zadanie build-staging.yml, które zakończyło się niepowodzeniem.

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

    Screenshot that shows the Re-run jobs and Re-run all jobs buttons.

  4. Po zakończeniu kompilacji uruchom polecenie az acr repository list --name <ACR_NAME> -o table w usłudze Cloud Shell , aby potwierdzić, że contoso-website w wynikach pojawi się repozytorium usługi Container Registry.

Przejdź do następnej lekcji, aby skompilować produkcyjny przepływ pracy.