Kompiluj i wdrażaj w usłudze Azure Kubernetes ServiceBuild and deploy to Azure Kubernetes Service

Azure PipelinesAzure Pipelines

Usługa Azure Kubernetes zarządza hostowanym środowiskiem Kubernetes, dzięki czemu można szybciej i łatwiej wdrażać aplikacje z kontenerami i zarządzać nimi.Azure Kubernetes Service manages your hosted Kubernetes environment, making it quicker and easier for you to deploy and manage containerized applications. Ta usługa eliminuje również obciążenie trwających operacji i konserwacji dzięki aprowizacji, uaktualnianiu i skalowaniu zasobów na żądanie bez przełączania aplikacji do trybu offline.This service also eliminates the burden of ongoing operations and maintenance by provisioning, upgrading, and scaling resources on demand, without taking your applications offline.

W tym przewodniku krok po kroku dowiesz się, jak utworzyć potok, który ciągle kompiluje i wdraża aplikację.In this step-by-step guide, you'll learn how to create a pipeline that continuously builds and deploys your app. Za każdym razem, gdy zmieniasz kod w repozytorium zawierającym pliku dockerfile, obrazy są przekazywane do Azure Container Registry, a manifesty są wdrażane w klastrze usługi Azure Kubernetes Service.Every time you change your code in a repository that contains a Dockerfile, the images are pushed to your Azure Container Registry, and the manifests are then deployed to your Azure Kubernetes Service cluster.

Wymagania wstępnePrerequisites

Aby upewnić się, że projekt platformy Azure DevOps ma autoryzację wymaganą do uzyskania dostępu do subskrypcji platformy Azure, Utwórz połączenie usługi Azure Resource Manager.To ensure that your Azure DevOps project has the authorization required to access your Azure subscription, create an Azure Resource Manager service connection. Połączenie z usługą jest wymagane w przypadku utworzenia potoku w projekcie w celu wdrożenia go w usłudze Azure Kubernetes Service.The service connection is required when you create a pipeline in the project to deploy to Azure Kubernetes Service. W przeciwnym razie listy rozwijane dla klastra i Container Registry są puste.Otherwise, the drop-down lists for Cluster and Container Registry are empty.

  • Konto usługi GitHub, w którym można utworzyć repozytorium.A GitHub account, where you can create a repository. Jeśli nie masz takiego konta, możesz je utworzyć bezpłatnie.If you don't have one, you can create one for free.

  • Organizacja usługi Azure DevOps.An Azure DevOps organization. Jeśli nie masz takiego konta, możesz je utworzyć bezpłatnie.If you don't have one, you can create one for free. (Organizacja usługi Azure DevOps różni się od Twojej organizacji w serwisie GitHub.(An Azure DevOps organization is different from your GitHub organization. Nadaj im tę samą nazwę, jeśli chcesz wyrównać wyrównanie między nimi.)Give them the same name if you want alignment between them.)

    Jeśli Twój zespół ma już jeden, upewnij się, że jesteś administratorem projektu usługi Azure DevOps, którego chcesz użyć.If your team already has one, then make sure you're an administrator of the Azure DevOps project that you want to use.

  • Konto platformy Azure.An Azure account. Jeśli nie masz takiego konta, możesz je utworzyć bezpłatnie.If you don't have one, you can create one for free.

    Porada

    Jeśli jesteś nowym programem, najprostszym sposobem na rozpoczęcie pracy jest użycie tego samego adresu e-mail co właściciel organizacji Azure Pipelines i subskrypcji platformy Azure.If you're new at this, the easiest way to get started is to use the same email address as the owner of both the Azure Pipelines organization and the Azure subscription.

Uzyskiwanie koduGet the code

Rozwidlenie następującego repozytorium zawierającego przykładową aplikację i pliku dockerfile:Fork the following repository containing a sample application and a Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Tworzenie zasobów platformy AzureCreate the Azure resources

Zaloguj się do witryny Azure Portal, a następnie wybierz przycisk Cloud Shell w prawym górnym rogu.Sign in to the Azure Portal, and then select the Cloud Shell button in the upper-right corner.

Tworzenie rejestru kontenerówCreate a container registry

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name myContainerRegistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys \
    --kubernetes-version 1.16.10

Zaloguj się do Azure PipelinesSign in to Azure Pipelines

Zaloguj się do Azure Pipelines.Sign in to Azure Pipelines. Po zalogowaniu się w przeglądarce https://dev.azure.com/my-organization-name zostanie wyświetlony pulpit nawigacyjny usługi Azure DevOps.After you sign in, your browser goes to https://dev.azure.com/my-organization-name and displays your Azure DevOps dashboard.

W ramach wybranej organizacji Utwórz projekt.Within your selected organization, create a project. Jeśli nie masz żadnych projektów w organizacji, zobaczysz ekran Utwórz projekt, aby rozpocząć .If you don't have any projects in your organization, you see a Create a project to get started screen. W przeciwnym razie wybierz przycisk Utwórz projekt w prawym górnym rogu pulpitu nawigacyjnego.Otherwise, select the Create Project button in the upper-right corner of the dashboard.

Tworzenie potokuCreate the pipeline

Połącz i wybierz repozytoriumConnect and select repository

  1. Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.Sign in to your Azure DevOps organization and navigate to your project.

  2. Przejdź do pozycji potoki, a następnie wybierz pozycję Nowy potok.Go to Pipelines, and then select New Pipeline.

  3. Wykonaj kroki kreatora, wybierając najpierw witrynę GitHub jako lokalizację kodu źródłowego.Walk through the steps of the wizard by first selecting GitHub as the location of your source code.

  4. Być może nastąpi przekierowanie do usługi GitHub w celu zalogowania się.You might be redirected to GitHub to sign in. W takim przypadku wprowadź swoje poświadczenia usługi GitHub.If so, enter your GitHub credentials.

  5. Gdy zostanie wyświetlona lista repozytoriów, wybierz repozytorium.When the list of repositories appears, select your repository.

  6. Być może nastąpi przekierowanie do usługi GitHub w celu zainstalowania aplikacji Azure Pipelines.You might be redirected to GitHub to install the Azure Pipelines app. W takim przypadku wybierz pozycję Zatwierdź & Zainstaluj.If so, select Approve & install.

Gdy zostanie wyświetlona karta Konfiguracja , wybierz pozycję Wdróż w usłudze Azure Kubernetes.When the Configure tab appears, select Deploy to Azure Kubernetes Service.

  1. Jeśli zostanie wyświetlony monit, wybierz subskrypcję, w której został utworzony rejestr i klaster.If you are prompted, select the subscription in which you created your registry and cluster.

  2. Wybierz myapp klaster.Select the myapp cluster.

  3. W obszarze Przestrzeń nazw wybierz pozycję istniejące, a następnie wybierz pozycję domyślne.For Namespace, select Existing, and then select default.

  4. Wybierz nazwę rejestru kontenerów.Select the name of your container registry.

  5. Możesz pozostawić nazwę obrazu i port usługi ustawiony na wartości domyślne.You can leave the image name and the service port set to the defaults.

  6. Zaznacz pole wyboru Włącz aplikację Przejrzyj dla żądań ściągnięcia , aby przejrzeć konfigurację powiązaną z aplikacją do uwzględnienia w ramach potoku YAML generowanego automatycznie w kolejnych krokach.Set the Enable Review App for Pull Requests checkbox for review app related configuration to be included in the pipeline YAML auto-generated in subsequent steps.

  7. Wybierz pozycję Weryfikuj i Konfiguruj.Select Validate and configure.

    Ponieważ Azure Pipelines tworzy potok,:As Azure Pipelines creates your pipeline, it:

    • Tworzy połączenie usługi rejestru platformy Docker , aby umożliwić potokowi wypychanie obrazów do rejestru kontenerów.Creates a Docker registry service connection to enable your pipeline to push images into your container registry.

    • Tworzy środowisko i zasób Kubernetes w środowisku.Creates an environment and a Kubernetes resource within the environment. W przypadku klastra z włączoną funkcją RBAC utworzony zasób Kubernetes niejawnie tworzy obiekty ServiceAccount i Rolebinding w klastrze, tak aby utworzone konto ServiceAccount nie mogło wykonać operacji poza wybraną przestrzenią nazw.For an RBAC enabled cluster, the created Kubernetes resource implicitly creates ServiceAccount and RoleBinding objects in the cluster so that the created ServiceAccount can't perform operations outside the chosen namespace.

    • Generuje plik Azure-Pipelines. yml , który definiuje potoku.Generates an azure-pipelines.yml file, which defines your pipeline.

    • Generuje pliki manifestu Kubernetes.Generates Kubernetes manifest files. Te pliki są generowane przez Hydrating szablonów Deployment. yml i Service. yml na podstawie wybranych powyżej elementów.These files are generated by hydrating the deployment.yml and service.yml templates based on selections you made above.

  8. Gdy pojawi się nowy potok, przejrzyj YAML, aby zobaczyć, co robi.When your new pipeline appears, review the YAML to see what it does. Aby uzyskać więcej informacji, zobacz jak skompilować potok poniżej.For more information, see how we build your pipeline below. Gdy wszystko będzie gotowe, wybierz pozycję Zapisz i uruchom.When you're ready, select Save and run.

  9. Zostanie wyświetlone zatwierdzenie, które spowoduje utworzenie nowego potoku.The commit that will create your new pipeline appears. Możesz zobaczyć wygenerowane pliki wymienione powyżej.You can see the generated files mentioned above. Wybierz polecenie Zapisz i uruchom.Select Save and run.

  10. Jeśli chcesz, Zmień komunikat dotyczący zatwierdzenia na taki, jak dodanie potoku do naszego repozytorium.If you want, change the Commit message to something like Add pipeline to our repository. Gdy wszystko będzie gotowe, wybierz pozycję Zapisz i uruchom , aby zatwierdzić nowy potok do repozytorium, a następnie zacznij od pierwszego uruchomienia nowego potoku.When you're ready, select Save and run to commit the new pipeline into your repo, and then begin the first run of your new pipeline!

Zapoznaj się z uruchomieniem potoku i wdrożoną aplikacjąSee the pipeline run, and your app deployed

Gdy potok jest uruchomiony, Obejrzyj jako etap kompilacji, a następnie etap wdrażania, przejdź od niebieskiego (działającego) na zielony (ukończono).As your pipeline runs, watch as your build stage, and then your deployment stage, go from blue (running) to green (completed). Możesz wybrać etapy i zadania, aby obejrzeć potok w działaniu.You can select the stages and jobs to watch your pipeline in action.

Uwaga

Jeśli używasz agenta hostowanego przez firmę Microsoft, musisz dodać zakres adresów IP agenta hostowanego przez firmę Microsoft do zapory.If you're using a Microsoft-hosted agent, you must add the IP range of the Microsoft-hosted agent to your firewall. Pobierz tygodniową listę zakresów adresów IP z pliku cotygodniowego JSON, który jest publikowany w każdą środę.Get the weekly list of IP ranges from the weekly JSON file, which is published every Wednesday. Nowe zakresy adresów IP zaczynają obowiązywać w następujących poniedziałek.The new IP ranges become effective the following Monday. Aby uzyskać więcej informacji, zobacz Agenci hostowani przez firmę Microsoft.For more information, see Microsoft-hosted agents. Aby znaleźć zakresy adresów IP wymagane przez organizację usługi Azure DevOps, Dowiedz się, jak zidentyfikować możliwe zakresy adresów IP dla agentów hostowanych przez firmę Microsoft.To find the IP ranges that are required for your Azure DevOps organization, learn how to identify the possible IP ranges for Microsoft-hosted agents.

Po zakończeniu przebiegu potoku Sprawdź, co się stało, a następnie przejdź do wdrożonej aplikacji.After the pipeline run is finished, explore what happened and then go see your app deployed. Z podsumowania potoku:From the pipeline summary:

  1. Wybierz kartę środowiska .Select the Environments tab.

  2. Wybierz pozycję Wyświetl środowisko.Select View environment.

  3. Wybierz wystąpienie, jeśli Twoja aplikacja dla przestrzeni nazw została wdrożona.Select the instance if your app for the namespace you deployed to. Jeśli przejdziesz do wartości domyślnych wspomnianych powyżej, będzie to aplikacja MojaApl w domyślnej przestrzeni nazw.If you stuck to the defaults we mentioned above, then it will be the myapp app in the default namespace.

  4. Wybierz kartę usługi .Select the Services tab.

  5. Wybierz i skopiuj zewnętrzny adres IP do Schowka.Select and copy the external IP address to your clipboard.

  6. Otwórz nową kartę lub okno przeglądarki, a następnie wprowadź < adres IP > : 8080.Open a new browser tab or window and enter <IP address>:8080.

Jeśli tworzysz naszą przykładową aplikację, w przeglądarce pojawi się tekst Hello World .If you're building our sample app, then Hello world appears in your browser.

Jak skompilować potokHow we build your pipeline

Po zakończeniu wybierania opcji, a następnie w celu sprawdzenia poprawności i skonfigurowania potoku (patrz powyżej) Azure Pipelines utworzyć potoku za pomocą szablonu usługi Azure Kubernetes .When you finished selecting options and then proceeded to validate and configure the pipeline (see above) Azure Pipelines created a pipeline for you, using the Deploy to Azure Kubernetes Service template.

Etap kompilacji używa zadania platformy Docker do kompilowania i wypychania obrazu do Azure Container Registry.The build stage uses the Docker task to build and push the image to the Azure Container Registry.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
          
    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

Zadanie wdrażania używa zadania manifestu Kubernetes , aby utworzyć imagePullSecret wymagane przez węzły klastra Kubernetes do ściągania z zasobu Azure Container Registry.The deployment job uses the Kubernetes manifest task to create the imagePullSecret required by Kubernetes cluster nodes to pull from the Azure Container Registry resource. Pliki manifestu są następnie używane przez zadanie manifestu Kubernetes do wdrożenia w klastrze Kubernetes.Manifest files are then used by the Kubernetes manifest task to deploy to the Kubernetes cluster.

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'azooinmyluggagepipelinesjavascriptdocker.aksnamespace'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
              
          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

Oczyszczanie zasobówClean up resources

Za każdym razem, gdy utworzysz zasoby utworzone powyżej, możesz je usunąć za pomocą następującego polecenia:Whenever you're done with the resources you created above, you can use the following command to delete them:

az group delete --name myapp-rg

Gdy pojawi się monit, wpisz y.Type y when prompted.

az group delete --name MC_myapp-rg_myapp_eastus

Gdy pojawi się monit, wpisz y.Type y when prompted.

Więcej tutajLearn more

Zapraszamy do Dowiedz się więcej na temat:We invite you to learn more about: