Tworzenie i wdrażanie aplikacji internetowej w języku Python w usłudze aplikacja systemu Azure Przy użyciu usługi Azure Pipelines
Azure DevOps Services
Usługa Azure Pipelines umożliwia ciągłą integrację i ciągłe dostarczanie (CI/CD), aby utworzyć i wdrożyć aplikację internetową w języku Python w usłudze aplikacja systemu Azure w systemie Linux. Potok automatycznie kompiluje i wdraża aplikację internetową w języku Python w usłudze App Service po każdym zatwierdzeniu w repozytorium.
W tym artykule omówiono sposób wykonywania następujących zadań:
- utworzysz aplikację internetową w usłudze Azure App Service;
- Tworzenie projektu w usłudze Azure DevOps.
- Połącz projekt DevOps z platformą Azure.
- Tworzenie potoku specyficznego dla języka Python.
- Uruchom potok, aby skompilować i wdrożyć aplikację w aplikacji internetowej w usłudze App Service.
Wymagania wstępne
- Subskrypcja platformy Azure. Jeśli jej nie masz, utwórz bezpłatne konto.
- Konto usługi GitHub. Jeśli go nie masz, utwórz go bezpłatnie.
- Organizacja usług Azure DevOps Services. Utwórz je bezpłatnie.
- Subskrypcja Azure. Jeśli jej nie masz, utwórz bezpłatne konto.
- Konto usługi GitHub. Jeśli go nie masz, utwórz go bezpłatnie.
- Serwer Usługi Azure DevOps.
- Własny agent. Jeśli musisz utworzyć własnego agenta, zobacz Self-hosted agents (Agenci hostowani samodzielnie).
Tworzenie repozytorium dla kodu aplikacji
Rozwidlenie przykładowego repozytorium na https://github.com/Microsoft/python-sample-vscode-flask-tutorial koncie usługi GitHub.
Na hoście lokalnym sklonuj repozytorium GitHub. Użyj następującego polecenia, zastępując <repository-url>
ciąg adresem URL rozwidlenia repozytorium.
git clone <repository-url>
Testowanie aplikacji lokalnie
Skompiluj i uruchom aplikację lokalnie, aby upewnić się, że działa.
Przejdź do sklonowanego folderu repozytorium.
cd python-sample-vscode-flask-tutorial
Skompiluj i uruchom aplikację
python -m venv .env source .env/bin/activate pip install --upgrade pip pip install -r ./requirements.txt export set FLASK_APP=hello_app.webapp python3 -m flask run
Aby wyświetlić aplikację, otwórz okno przeglądarki i przejdź do http://localhost:5000strony . Sprawdź, czy zostanie wyświetlony tytuł
Visual Studio Flask Tutorial
.Po zakończeniu zamknij okno przeglądarki i zatrzymaj serwer Flask za pomocą Ctrl+C.
Otwieranie usługi Cloud Shell
Zaloguj się do witryny Azure Portal pod adresem https://portal.azure.com.
Otwórz interfejs wiersza polecenia platformy Azure, wybierając przycisk Cloud Shell na pasku narzędzi portalu.
W dolnej części przeglądarki zostanie wyświetlona usługa Cloud Shell. Wybierz pozycję Bash z menu rozwijanego.
Aby zapewnić więcej miejsca do pracy, wybierz przycisk Maksymalizuj.
Tworzenie aplikacji internetowej usługi aplikacja systemu Azure Service
Utwórz aplikację internetową usługi aplikacja systemu Azure Service z poziomu usługi Cloud Shell w witrynie Azure Portal.
Napiwek
Aby wkleić do usługi Cloud Shell, użyj Ctrl+Shift+V lub kliknij prawym przyciskiem myszy i wybierz polecenie Wklej z menu kontekstowego.
Sklonuj repozytorium za pomocą następującego polecenia, zastępując
<repository-url>
ciąg adresem URL rozwidlenia repozytorium.git clone <repository-url>
Zmień katalog na sklonowany folder repozytorium, aby
az webapp up
polecenie rozpoznawało aplikację jako aplikację w języku Python.cd python-sample-vscode-flask-tutorial
Użyj polecenia az webapp up, aby aprowizować usługę App Service i wykonać pierwsze wdrożenie aplikacji. Zastąp
<your-web-app-name>
ciąg nazwą unikatową na platformie Azure. Zazwyczaj używasz osobistej lub firmowej nazwy wraz z identyfikatorem aplikacji, takim jak<your-name>-flaskpipelines
. Adres URL aplikacji staje się your-appservice.azurewebsites.net>.<az webapp up --name <your-web-app-name>
Dane wyjściowe JSON polecenia
az webapp up
pokazują:{ "URL": <your-web-app-url>, "appserviceplan": <your-app-service-plan-name>, "location": <your-azure-location>, "name": <your-web-app-name>, "os": "Linux", "resourcegroup": <your-resource-group>, "runtime_version": "python|3.11", "runtime_version_detected": "-", "sku": <sku>, "src_path": <repository-source-path> }
Zanotuj
URL
runtime_version
wartości i . Użyj poleceniaruntime_version
w pliku YAML potoku. JestURL
to adres URL aplikacji internetowej. Możesz jej użyć, aby sprawdzić, czy aplikacja jest uruchomiona.Uwaga
Polecenie
az webapp up
wykonuje następujące akcje:Utwórz domyślną grupę zasobów.
Utwórz domyślny plan usługi App Service.
Utwórz aplikację o określonej nazwie.
Zip wdróż wszystkie pliki z bieżącego katalogu roboczego z włączoną automatyzacją kompilacji.
Buforuj parametry lokalnie w pliku .azure/config , aby nie trzeba było ich ponownie określać podczas wdrażania później za pomocą
az webapp up
polecenia lub innychaz webapp
poleceń z folderu projektu. Buforowane wartości są domyślnie używane automatycznie.
Możesz zastąpić domyślną akcję własnymi wartościami przy użyciu parametrów polecenia. Aby uzyskać więcej informacji, zobacz az webapp up.
Aplikacja python-sample-vscode-flask-tutorial zawiera plik startup.txt zawierający określone polecenie uruchamiania aplikacji internetowej. Ustaw właściwość konfiguracji aplikacji
startup-file
internetowej nastartup.txt
.Z danych wyjściowych
az webapp up
polecenia skopiujresourcegroup
wartość .Wprowadź następujące polecenie przy użyciu grupy zasobów i nazwy aplikacji.
az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt
Po zakończeniu polecenia zostanie wyświetlone dane wyjściowe JSON zawierające wszystkie ustawienia konfiguracji aplikacji internetowej.
Aby wyświetlić uruchomioną aplikację, otwórz przeglądarkę i przejdź do
URL
elementu wyświetlanego w danych wyjściowychaz webapp up
polecenia. Jeśli zostanie wyświetlona strona ogólna, zaczekaj kilka sekund na uruchomienie usługi App Service, a następnie odśwież stronę. Sprawdź, czy zostanie wyświetlony tytułVisual Studio Flask Tutorial
.
Tworzenie projektu usługi Azure DevOps
Utwórz nowy projekt usługi Azure DevOps.
- W przeglądarce przejdź do dev.azure.com i zaloguj się.
- Wybierz organizację.
- Utwórz nowy projekt, wybierając pozycję Nowy projekt lub Utwórz projekt , tworząc pierwszy projekt w organizacji.
- Wprowadź nazwę projektu.
- Wybierz widoczność projektu.
- Wybierz pozycję Utwórz.
- W przeglądarce przejdź do serwera Usługi Azure DevOps.
- Wybierz kolekcję.
- Utwórz nowy projekt, wybierając pozycję Nowy projekt lub Utwórz projekt , tworząc pierwszy projekt w kolekcji.
- Wprowadź nazwę projektu.
- Wybierz widoczność projektu.
- Wybierz pozycję Utwórz.
Tworzenie jednostki usługi
Jednostka usługi jest tożsamością utworzoną do użycia z aplikacjami, usługami hostowanymi i zautomatyzowanymi narzędziami w celu uzyskiwania dostępu do zasobów platformy Azure. Ten dostęp jest ograniczony do ról przypisanych do jednostki usługi, zapewniając kontrolę nad tym, do których zasobów można uzyskiwać dostęp i na jakim poziomie.
Aby utworzyć jednostkę usługi, przejdź do usługi Cloud Shell (bash) i uruchom następujące polecenie. Zastąp <service-principal-name>
ciąg nazwą jednostki usługi, <your-subscription-id>
identyfikatorem subskrypcji i <your-resource-group>
grupą zasobów aplikacji internetowej.
az ad sp create-for-rbac --display-name <service-principal-name> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>
Polecenie zwraca obiekt JSON podobny do następującego przykładu:
{
"clientId": "<client GUID>",
"clientSecret": "<string-value>",
"subscriptionId": "<subscription GUID>",
"tenantId": "<tenant GUID>",
...
}
Zanotuj clientId
wartości , clientSecret
, subscriptionId
i tenantId
. Te wartości są potrzebne do utworzenia połączenia z usługą w następnej sekcji.
Tworzenie połączenia z usługą
Połączenie usługi umożliwia utworzenie połączenia w celu zapewnienia uwierzytelnionego dostępu z usługi Azure Pipelines do usług zewnętrznych i zdalnych. Aby wdrożyć aplikację internetową usługi aplikacja systemu Azure Service, utwórz połączenie usługi z grupą zasobów zawierającą aplikację internetową.
Na stronie projektu wybierz pozycję Ustawienia projektu.
Wybierz pozycję Połączenia z usługą w sekcji Potoki w menu.
Wybierz pozycję Utwórz połączenie z usługą.
Wybierz pozycję Azure Resource Manager i wybierz pozycję Dalej.
Wybierz metodę uwierzytelniania i wybierz pozycję Dalej.
W oknie dialogowym Nowe połączenie z usługą platformy Azure wprowadź informacje specyficzne dla wybranej metody uwierzytelniania. Aby uzyskać więcej informacji na temat metod uwierzytelniania, zobacz Nawiązywanie połączenia z platformą Azure przy użyciu połączenia usługi Azure Resource Manager.
Jeśli na przykład używasz federacji tożsamości obciążenia (automatycznej) lub metody uwierzytelniania jednostki usługi (automatycznej), wprowadź wymagane informacje.
Pole Opis Poziom zakresu Wybierz subskrypcję. Subskrypcja Nazwa subskrypcji platformy Azure. Grupa zasobów: Nazwa grupy zasobów zawierającej aplikację internetową. Nazwa połączenia z usługą Opisowa nazwa połączenia. Udzielanie uprawnień dostępu do wszystkich potoków Wybierz tę opcję, aby udzielić dostępu do wszystkich potoków. Wybierz pozycję Zapisz.
Nowe połączenie zostanie wyświetlone na liście Połączenia usługi i jest gotowe do użycia w usłudze Azure Pipeline.
Na stronie projektu wybierz pozycję Ustawienia projektu.
Wybierz pozycję Połączenia z usługą w sekcji Potoki w menu.
Wybierz pozycję Utwórz połączenie z usługą.
Wybierz pozycję Azure Resource Manager i wybierz pozycję Dalej.
W obszarze Nowe połączenie z usługą platformy Azure wybierz pozycję Jednostka usługi (ręcznie) i wybierz pozycję Dalej
W następnym oknie dialogowym wypełnij wymagane informacje.
Pole Opis Środowisko Wybierz opcję Azure Cloud
.Poziom zakresu Wybierz subskrypcję. Identyfikator subskrypcji Identyfikator subskrypcji. Nazwa subskrypcji Nazwa subskrypcji platformy Azure. Identyfikator jednostki usługi appId
Wartość z obiektu JSON zwróconegoaz ad sp create-for-rbac
przez polecenie .Klucz jednostki usługi password
Wartość z obiektu JSON zwróconegoaz ad sp create-for-rbac
przez polecenie .Identyfikator dzierżawy tenant
Wartość z obiektu JSON zwróconegoaz ad sp create-for-rbac
przez polecenie .Wybierz pozycję Weryfikuj , aby zweryfikować połączenie.
Wprowadź nazwę połączenia z usługą.
Upewnij się, że wybrano opcję Udziel uprawnień dostępu do wszystkich potoków .
Wybierz pozycję Weryfikuj i zapisz.
Nowe połączenie zostanie wyświetlone na liście Połączenia usługi i jest gotowe do użycia przez usługę Azure Pipelines z projektu.
Konfigurowanie własnego agenta
Jeśli używasz własnego własnego agenta, musisz skonfigurować agenta do uruchamiania języka Python. Pobieranie wersji języka Python nie jest obsługiwane w przypadku własnych agentów. Musisz wstępnie instalować wersję języka Python. Użyj pełnego instalatora, aby uzyskać wersję języka Python zgodną z programem.
Aby uniknąć niezgodnych problemów, należy dopasować wersję języka Python do wersji środowiska uruchomieniowego w aplikacji internetowej aplikacja systemu Azure Services. Wersja środowiska uruchomieniowego jest wyświetlana w danych wyjściowych az webapp up
JSON polecenia .
Wymagana wersja języka Python musi zostać dodana do pamięci podręcznej narzędzi na własnym agencie, aby można było z niego korzystać. Zwykle pamięć podręczna narzędzia znajduje się w katalogu _work/_tool agenta; alternatywnie można zastąpić ścieżkę zmienną środowiskową AGENT_TOOLSDIRECTORY. W katalogu tools utwórz następującą strukturę katalogów na podstawie wersji języka Python:
$AGENT_TOOLSDIRECTORY/
Python/
{version number}/
{platform}/
{tool files}
{platform}.complete
Numer wersji powinien być zgodny z formatem 1.2.3. Platforma powinna być x86 lub x64. Pliki narzędzi powinny być rozpakowanym plikiem wersji języka Python. Powinien {platform}.complete
to być plik 0-bajtowy, który wygląda x86.complete
lub x64.complete
po prostu oznacza, że narzędzie jest poprawnie zainstalowane w pamięci podręcznej.
Jeśli na przykład używasz języka Python 3.11 na 64-bitowej maszynie z systemem Windows, struktura katalogów będzie wyglądać następująco:
$AGENT_TOOLSDIRECTORY/
Python/
3.11.4/
x64/
{python files}
x64.complete
Jeśli masz już wersję języka Python, której chcesz użyć na maszynie hostującego agenta, możesz skopiować pliki do pamięci podręcznej narzędzi. Jeśli nie masz wersji języka Python, możesz pobrać ją z witryny internetowej języka Python.
Tworzenie potoku
Utwórz potok, aby skompilować i wdrożyć aplikację internetową w języku Python w usłudze aplikacja systemu Azure Service. Aby zrozumieć pojęcia dotyczące potoku, zobacz:
W menu nawigacji po lewej stronie wybierz pozycję Potoki.
Wybierz pozycję Utwórz potok.
W oknie dialogowym Where is your code (Gdzie to twój kod) wybierz pozycję GitHub. Może zostać wyświetlony monit o zalogowanie się do usługi GitHub.
Na ekranie Wybieranie repozytorium wybierz rozwidlenie przykładowego repozytorium.
Może zostać wyświetlony monit o ponowne wprowadzenie hasła usługi GitHub jako potwierdzenie.
Jeśli rozszerzenie usługi Azure Pipelines nie jest zainstalowane w usłudze GitHub, usługa GitHub wyświetli monit o zainstalowanie rozszerzenia usługi Azure Pipelines .
Na tej stronie przewiń w dół do sekcji Dostęp do repozytorium, wybierz, czy zainstalować rozszerzenie we wszystkich repozytoriach, czy tylko wybrane, a następnie wybierz pozycję Zatwierdź i zainstaluj.
W oknie dialogowym Konfigurowanie potoku wybierz pozycję Python do aplikacji internetowej systemu Linux na platformie Azure.
Wybierz subskrypcję platformy Azure i wybierz pozycję Kontynuuj.
Jeśli używasz nazwy użytkownika i hasła do uwierzytelniania, zostanie otwarta przeglądarka w celu zalogowania się do konta Microsoft.
Wybierz nazwę aplikacji internetowej z listy rozwijanej, a następnie wybierz pozycję Weryfikuj i skonfiguruj.
Usługa Azure Pipelines tworzy plik azure-pipelines.yml i wyświetla go w edytorze potoków YAML. Plik potoku definiuje potok ciągłej integracji/ciągłego wdrażania jako serię etapów, zadań i kroków, gdzie każdy krok zawiera szczegółowe informacje dotyczące różnych zadań i skryptów. Przyjrzyj się potokowi, aby zobaczyć, co robi. Upewnij się, że wszystkie domyślne dane wejściowe są odpowiednie dla kodu.
W menu nawigacji wybierz pozycję Potoki.
Wybierz pozycję Utwórz potok.
W oknie dialogowym Gdzie znajduje się kod wybierz pozycję GitHub Enterprise Server. Może zostać wyświetlony monit o zalogowanie się do usługi GitHub.
Na karcie Wybierz repozytorium wybierz rozwidlenie przykładowego repozytorium.
Może zostać wyświetlony monit o ponowne wprowadzenie hasła usługi GitHub jako potwierdzenie.
Jeśli rozszerzenie usługi Azure Pipelines nie jest zainstalowane w usłudze GitHub, usługa GitHub wyświetli monit o zainstalowanie rozszerzenia usługi Azure Pipelines .
Na tej stronie przewiń w dół do sekcji Dostęp do repozytorium, wybierz, czy zainstalować rozszerzenie we wszystkich repozytoriach, czy tylko wybrane, a następnie wybierz pozycję Zatwierdź i zainstaluj.
W oknie dialogowym Konfigurowanie potoku wybierz pozycję Potok startowy.
Zastąp zawartość pliku azure-pipelines.yml następującym kodem.
trigger: - main variables: # Azure Resource Manager connection created during pipeline creation azureServiceConnectionId: '<your-service-connection-name>' # Web app name webAppName: '<your-web-app-name>' # Environment name environmentName: '<your-web-app-name>' # Project root folder. projectRoot: $(System.DefaultWorkingDirectory) # Python version: pythonVersion: '<your-python-version>' stages: - stage: Build displayName: Build stage jobs: - job: BuildJob pool: name: '<your-pool-name>' demands: python steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install -r requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements" - task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container' - stage: Deploy displayName: 'Deploy Web App' dependsOn: Build condition: succeeded() jobs: - deployment: DeploymentJob pool: name: '<your-pool-name' environment: $(environmentName) strategy: runOnce: deploy: steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version' - task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Zastąp następujące symbole zastępcze własnymi wartościami:
Symbol zastępczy Opis <your-service-connection-name>
Nazwa utworzonego połączenia usługi. <your-web-app-name>
Nazwa aplikacji internetowej usługi aplikacja systemu Azure Service. <your-pool-name>
Nazwa puli agentów, której chcesz użyć. <your-python-version>
Wersja języka Python uruchomiona na agencie. Dobrym pomysłem jest dopasowanie tej wersji do wersji języka Python uruchomionej w aplikacji internetowej. Wersja aplikacji internetowej jest wyświetlana w danych wyjściowych az webapp up
JSON polecenia .
Plik potoku YAML
W poniższym wyjaśnieniu opisano plik potoku YAML. Aby dowiedzieć się więcej o schemacie pliku YAML potoku, zobacz dokumentacja schematu YAML.
Pełny przykładowy plik YAML potoku jest pokazany poniżej:
trigger:
- main
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder. Point to the folder containing manage.py file.
projectRoot: $(System.DefaultWorkingDirectory)
pythonVersion: '3.11'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m venv antenv
source antenv/bin/activate
python -m pip install --upgrade pip
pip install setup
pip install -r requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
displayName: 'Upload package'
artifact: drop
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Zmienne
Sekcja variables
zawiera następujące zmienne:
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to match the Python runtime version running on your web app.
pythonVersion: '3.11'
Zmienna | Opis |
---|---|
azureServiceConnectionId |
Identyfikator lub nazwa połączenia usługi Azure Resource Manager. |
webAppName |
Nazwa aplikacji internetowej usługi aplikacja systemu Azure Service. |
vmImageName |
Nazwa systemu operacyjnego do użycia dla agenta kompilacji. |
environmentName |
Nazwa środowiska używanego na etapie wdrażania. Środowisko jest tworzone automatycznie po uruchomieniu zadania etapu. |
projectRoot |
Folder główny zawierający kod aplikacji. |
pythonVersion |
Wersja języka Python do użycia na agentach kompilacji i wdrażania. |
Sekcja variables
zawiera następujące zmienne:
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<your-service-connection-name>'
# Web app name
webAppName: '<your-webapp-name>'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to the version that is running on your agent and web app.
pythonVersion: '3.11'
Zmienna | Opis |
---|---|
azureServiceConnectionId |
Nazwa połączenia usługi Azure Resource Manager. |
webAppName |
Nazwa danej aplikacji internetowej. |
environmentName |
Nazwa środowiska używanego na etapie wdrażania. |
projectRoot |
Folder zawierający kod aplikacji. Wartość jest zmienną systemową automatyczną. |
pythonVersion |
Wersja języka Python do użycia na agentach kompilacji i wdrażania. |
Etap kompilacji
Etap kompilacji zawiera jedno zadanie uruchamiane w systemie operacyjnym zdefiniowanym w zmiennej vmImageName.
- job: BuildJob
pool:
vmImage: $(vmImageName)
Etap kompilacji zawiera jedno zadanie uruchamiane na agencie w puli zidentyfikowanej przez parametr name. Możesz określić możliwości agenta za pomocą słowa kluczowego demands
. Na przykład określa, demands: python
że agent musi mieć zainstalowany język Python. Aby określić własnego agenta według nazwy, możesz użyć słowa kluczowego demands: Agent.Name -equals <agent-name>
.
- job: BuildJob
pool:
name: <your-pool-name>
demands: python
Zadanie zawiera wiele kroków:
Zadanie UsePythonVersion wybiera wersję języka Python do użycia. Wersja jest zdefiniowana w zmiennej
pythonVersion
.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'
W tym kroku użyto skryptu do utworzenia wirtualnego środowiska języka Python i zainstalowania zależności aplikacji zawartych w parametrze
requirements.txt
TheworkingDirectory
określa lokalizację kodu aplikacji.- script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setup pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"
Zadanie ArchiveFiles tworzy archiwum .zip zawierające aplikację internetową. Plik
.zip
jest przekazywany do potoku jako artefakt o nazwiedrop
. Plik.zip
jest używany na etapie wdrażania w celu wdrożenia aplikacji w aplikacji internetowej.- task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop
Parametr Opis rootFolderOrFile
Lokalizacja kodu aplikacji. includeRootFolder
Wskazuje, czy folder główny ma być uwzględniony w pliku .zip . Ustaw ten parametr na false
wartość w przeciwnym razie zawartość pliku .zip jest umieszczana w folderze o nazwie s, a kontener App Service dla systemu Linux nie może odnaleźć kodu aplikacji.archiveType
Typ archiwum do utworzenia. Ustaw wartość zip
.archiveFile
Lokalizacja pliku .zip do utworzenia. replaceExistingArchive
Wskazuje, czy zastąpić istniejące archiwum, jeśli plik już istnieje. Ustaw wartość true
.upload
Lokalizacja pliku .zip do przekazania. artifact
Nazwa artefaktu do utworzenia.
Etap wdrażania
Etap wdrażania jest uruchamiany, jeśli etap kompilacji zakończy się pomyślnie. Następujące słowa kluczowe definiują to zachowanie:
dependsOn: Build
condition: succeeded()
Etap wdrażania zawiera jedno zadanie wdrożenia skonfigurowane przy użyciu następujących słów kluczowych:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
Słowo kluczowe | Opis |
---|---|
deployment |
Wskazuje, że zadanie jest zadaniem wdrożenia przeznaczonym dla środowiska. |
pool |
Określa pulę agentów wdrażania. Domyślna pula agentów, jeśli nazwa nie jest określona. Słowo vmImage kluczowe identyfikuje system operacyjny obrazu maszyny wirtualnej agenta |
environment |
Określa środowisko do wdrożenia. Środowisko jest tworzone automatycznie w projekcie po uruchomieniu zadania. |
- deployment: DeploymentJob
pool:
name: <your-pool-name>
environment: $(environmentName)
Słowo kluczowe | Opis |
---|---|
deployment |
Wskazuje, że zadanie jest zadaniem wdrożenia przeznaczonym dla środowiska. |
pool Określa pulę agentów do użycia na potrzeby wdrożenia. Ta pula musi zawierać agenta z możliwością uruchamiania wersji języka Python określonej w potoku. |
|
environment |
Określa środowisko do wdrożenia. Środowisko jest tworzone automatycznie w projekcie po uruchomieniu zadania. |
Słowo strategy
kluczowe służy do definiowania strategii wdrażania. Słowo runOnce
kluczowe określa, że zadanie wdrożenia jest uruchamiane raz. Słowo deploy
kluczowe określa kroki do uruchomienia w zadaniu wdrażania.
strategy:
runOnce:
deploy:
steps:
Element steps
w potoku to:
Użyj zadania UsePythonVersion, aby określić wersję języka Python do użycia w agencie. Wersja jest zdefiniowana w zmiennej
pythonVersion
.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
Wdróż aplikację internetową przy użyciu AzureWebApp@1. To zadanie wdraża artefakt
drop
potoku w aplikacji internetowej.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Parametr Opis azureSubscription
Identyfikator połączenia usługi Azure Resource Manager lub nazwa do użycia. appName
Nazwa danej aplikacji internetowej. package
Lokalizacja pliku .zip do wdrożenia. Ponadto, ponieważ repozytorium python-vscode-flask-tutorial zawiera to samo polecenie uruchamiania w pliku o nazwie startup.txt, możesz określić ten plik, dodając parametr :
startUpCommand: 'startup.txt'
.
Element steps
w potoku to:
Użyj zadania UsePythonVersion, aby określić wersję języka Python do użycia w agencie. Wersja jest zdefiniowana w zmiennej
pythonVersion
.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
Wdróż aplikację internetową przy użyciu AzureWebApp@1. To zadanie wdraża artefakt
drop
potoku w aplikacji internetowej.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Parametr Opis azureSubscription
Identyfikator połączenia usługi Azure Resource Manager lub nazwa do użycia. appName
Nazwa danej aplikacji internetowej. package
Lokalizacja pliku .zip do wdrożenia. Ponadto, ponieważ repozytorium python-vscode-flask-tutorial zawiera to samo polecenie uruchamiania w pliku o nazwie startup.txt, możesz określić ten plik, dodając parametr :
startUpCommand: 'startup.txt'
.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : $(webAppName)' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Parametr Opis azureSubscription
Identyfikator połączenia usługi Azure Resource Manager lub nazwa do użycia. appName
Nazwa danej aplikacji internetowej. package
Lokalizacja pliku .zip do wdrożenia. startUpCommand
Polecenie do uruchomienia po wdrożeniu aplikacji. Przykładowa aplikacja używa metody startup.txt
.
Uruchamianie potoku
Teraz możesz ją wypróbować!
W edytorze wybierz pozycję Zapisz i uruchom.
W oknie dialogowym Zapisywanie i uruchamianie dodaj komunikat zatwierdzenia, a następnie wybierz pozycję Zapisz i uruchom.
Potok można obserwować podczas jego uruchamiania, wybierając pozycję Etapy lub Zadania w podsumowaniu przebiegu potoku.
Obok każdego etapu znajdują się zielone znaczniki wyboru i zadanie, które zakończy się pomyślnie. Jeśli wystąpią błędy, są one wyświetlane w podsumowaniu lub w krokach zadania.
Możesz szybko wrócić do edytora YAML, wybierając pionowe kropki w prawym górnym rogu strony Podsumowanie i wybierając pozycję Edytuj potok:
W zadaniu wdrażania wybierz zadanie Deploy Azure Web App (Wdróż aplikację internetową platformy Azure), aby wyświetlić dane wyjściowe. Aby przejść do wdrożonej witryny, przytrzymaj naciśnięty Ctrl i wybierz adres URL po
App Service Application URL
.Jeśli używasz przykładowej aplikacji, aplikacja powinna być wyświetlana w następujący sposób:
Ważne
Jeśli aplikacja nie powiedzie się z powodu braku zależności, plik requirements.txt nie został przetworzony podczas wdrażania. To zachowanie występuje, jeśli aplikacja internetowa została utworzona bezpośrednio w portalu, a nie przy użyciu az webapp up
polecenia, jak pokazano w tym artykule.
Polecenie az webapp up
w szczególności ustawia akcję SCM_DO_BUILD_DURING_DEPLOYMENT
kompilacji na true
wartość . Jeśli usługa app service została aprowizowana za pośrednictwem portalu, ta akcja nie zostanie automatycznie ustawiona.
Następujące kroki umożliwiają ustawienie akcji:
- Otwórz witrynę Azure Portal, wybierz usługę App Service, a następnie wybierz pozycję Konfiguracja.
- Na karcie Ustawienia aplikacji wybierz pozycję Nowe ustawienie aplikacji.
- W wyświetlonym oknie podręcznym ustaw wartość Name na , ustaw wartość Value na
true
, a następnie wybierz przycisk OK.SCM_DO_BUILD_DURING_DEPLOYMENT
- Wybierz pozycję Zapisz w górnej części strony Konfiguracja .
- Ponowne uruchamianie potoku. Zależności powinny być instalowane podczas wdrażania.
Wyzwalanie uruchomienia potoku
Aby wyzwolić uruchomienie potoku, zatwierdź zmianę w repozytorium. Możesz na przykład dodać nową funkcję do aplikacji lub zaktualizować zależności aplikacji.
- Przejdź do repozytorium GitHub.
- Wprowadź zmianę w kodzie, taką jak zmiana tytułu aplikacji.
- Zatwierdź zmianę w repozytorium.
- Przejdź do potoku i sprawdź, czy został utworzony nowy przebieg.
- Po zakończeniu przebiegu sprawdź, czy nowa kompilacja zostanie wdrożona w aplikacji internetowej.
- W witrynie Azure Portal przejdź do aplikacji internetowej.
- Wybierz pozycję Centrum wdrażania i wybierz kartę Dzienniki .
- Sprawdź, czy nowe wdrożenie znajduje się na liście.
Zagadnienia dotyczące platformy Django
Usługa Azure Pipelines umożliwia wdrażanie aplikacji Django w usłudze aplikacja systemu Azure Service w systemie Linux, jeśli używasz oddzielnej bazy danych. Nie można użyć bazy danych SQLite, ponieważ usługa App Service blokuje plik db.sqlite3 , uniemożliwiając odczyty i zapisy. To zachowanie nie ma wpływu na zewnętrzną bazę danych.
Zgodnie z opisem w temacie Konfigurowanie aplikacji języka Python w usłudze App Service — proces uruchamiania kontenera usługa App Service automatycznie wyszukuje plik wsgi.py w kodzie aplikacji, który zazwyczaj zawiera obiekt aplikacji. Jeśli chcesz dostosować polecenie uruchamiania w jakikolwiek sposób, użyj startUpCommand
parametru w AzureWebApp@1
kroku pliku potoku YAML, zgodnie z opisem w poprzedniej sekcji.
W przypadku korzystania z platformy Django zazwyczaj chcesz przeprowadzić migrację modeli danych przy użyciu polecenia manage.py migrate
po wdrożeniu kodu aplikacji. W tym celu można dodać startUpCommand
skrypt po wdrożeniu. Na przykład oto startUpCommand
właściwość w zadaniu AzureWebApp@1.
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
startUpCommand: 'python manage.py migrate'
Uruchamianie testów na agencie kompilacji
W ramach procesu kompilacji możesz chcieć uruchomić testy w kodzie aplikacji. Testy są uruchamiane na agencie kompilacji, więc należy zainstalować zależności w środowisku wirtualnym na agencie kompilacji. Po uruchomieniu testów usuń środowisko wirtualne przed utworzeniem pliku .zip na potrzeby wdrożenia. Poniższe elementy skryptu ilustrują ten proces. Umieść je przed ArchiveFiles@2
zadaniem w pliku azure-pipelines.yml . Aby uzyskać więcej informacji, zobacz Uruchamianie skryptów międzyplatformowych.
# The | symbol is a continuation character, indicating a multi-line script.
# A single-line script can immediately follow "- script:".
- script: |
python -m venv .env
source .env/bin/activate
pip install setuptools
pip install -r requirements.txt
# The displayName shows in the pipeline UI when a build runs
displayName: 'Install dependencies on build agent'
- script: |
# Put commands to run tests here
displayName: 'Run tests'
- script: |
echo Deleting .env
deactivate
rm -rf .env
displayName: 'Remove .env before zip'
Możesz również użyć zadania, takiego jak PublishTestResults@2 , aby opublikować wyniki testu w potoku. Aby uzyskać więcej informacji, zobacz Tworzenie aplikacji języka Python — uruchamianie testów.
Czyszczenie zasobów
Aby uniknąć naliczania opłat w zasobach platformy Azure utworzonych w tym samouczku:
Usuń utworzony projekt. Usunięcie projektu powoduje usunięcie potoku i połączenia z usługą.
Usuń grupę zasobów platformy Azure zawierającą usługę App Service i plan usługi App Service. W witrynie Azure Portal przejdź do grupy zasobów, wybierz pozycję Usuń grupę zasobów i postępuj zgodnie z monitami.
Usuń konto magazynu, które obsługuje system plików dla usługi Cloud Shell. Zamknij usługę Cloud Shell, a następnie przejdź do grupy zasobów rozpoczynającej się od cloud-shell-storage-, wybierz pozycję Usuń grupę zasobów i postępuj zgodnie z monitami.