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.
Azure DevOps Services
Użyj Azure Pipelines do ciągłej integracji i ciągłego dostarczania (CI/CD), aby zbudować i wdrożyć aplikację internetową w języku Python na Azure App Service na systemie Linux. Pipeline automatycznie kompiluje i wdraża aplikację internetową Python w usłudze App Service przy 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.
- Utwórz potok specyficzny dla języka Python.
- Uruchom potok, aby skompilować i wdrożyć aplikację do swojej aplikacji sieciowej w App Service.
Wymagania wstępne
produkt | Wymagania |
---|---|
Azure DevOps | — projekt usługi Azure DevOps. — Możliwość uruchamiania potoków na agentach hostowanych przez Microsoft. Możesz kupić zadanie równoległe lub poprosić o bezpłatny poziom. — Podstawowa wiedza na temat języka YAML i usługi Azure Pipelines. Aby uzyskać więcej informacji, zobacz Utwórz swój pierwszy potok. Uprawnienia: - - Aby utworzyć potok: musisz należeć do grupy Contributorzy, a grupa musi mieć uprawnienie Utworzyć potok ustawione na Zezwalaj. Członkowie grupy Administratorzy projektu mogą zarządzać potokami. - Aby utworzyć połączenia usług: musisz mieć rolę Administrator lub Twórca dla połączeń usług. |
GitHub | — Konto GitHub . Połączenie usługi GitHub do autoryzowania usługi Azure Pipelines. |
Błękit | Subskrypcja platformy Azure. |
produkt | Wymagania |
---|---|
Azure DevOps | — projekt usługi Azure DevOps. - Samodzielnie hostowany agent. Aby go utworzyć, zobacz Agenci hostowani samodzielnie. — Podstawowa wiedza na temat języka YAML i usługi Azure Pipelines. Aby uzyskać więcej informacji, zobacz Utwórz swój pierwszy potok. Uprawnienia: - - Aby utworzyć potok: musisz należeć do grupy Contributorzy, a grupa musi mieć uprawnienie Utworzyć potok ustawione na Zezwalaj. Członkowie grupy Administratorzy projektu mogą zarządzać potokami. - Aby utworzyć połączenia usług: musisz mieć rolę Administrator lub Twórca dla połączeń usług. |
GitHub | — Konto GitHub . Połączenie usługi GitHub do autoryzowania usługi Azure Pipelines. |
Błękit | Subskrypcja platformy Azure. |
Tworzenie repozytorium dla kodu aplikacji
Sforkuj przykładowe repozytorium na https://github.com/Microsoft/python-sample-vscode-flask-tutorial Twoje konto na GitHubie.
Sklonuj repozytorium GitHub na swoim hoście lokalnym. Użyj następującego polecenia, zastępując <repository-url>
odpowiednim adresem URL sforkowanego 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.
Utwórz aplikację internetową w usłudze Aplikacji Azure
Utwórz internetową aplikację usługi App Service na platformie Azure z poziomu usługi Cloud Shell w portalu Azure.
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 swoje repozytorium za pomocą następującego polecenia, zastępując
<repository-url>
adresem URL swojego 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>
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ę <.>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 wartości
URL
iruntime_version
. Używaszruntime_version
w pliku YAML pipeline'u.URL
to adres URL twojej 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.
Wyślij jako zip wszystkie pliki z aktualnego katalogu roboczego, przy włączonej automatyzacji kompilacji.
Zapisz parametry lokalnie w pliku .azure/config, aby nie trzeba było ich ponownie podawać podczas późniejszego wdrażania za pomocą polecenia
az webapp up
lub innych 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 polecenia
az webapp up
skopiuj wartośćresourcegroup
.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
pokazywanego w wyjściu poleceniaaz webapp up
. 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.
Utwórz zasadę usługi
Podmiot usługi jest tożsamością utworzoną do użycia z aplikacjami, usługami hostowanymi i zautomatyzowanymi narzędziami w celu dostępu do zasobów platformy Azure. Ten dostęp jest ograniczony do ról przypisanych do głównego użytkownika usługi, zapewniając kontrolę nad tym, do których zasobów można uzyskiwać dostęp i na jakim poziomie.
Aby utworzyć główny element usługi, przejdź do Cloud Shell (bash) i uruchom następujące polecenie. Zastąp <service-principal-name>
nazwą jednostki usługi, <your-subscription-id>
identyfikatorem subskrypcji i <your-resource-group>
grupą zasobów dla 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 wartości clientId
, 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 serwisowe umożliwia utworzenie połączenia zapewniającego uwierzytelniony dostęp z Azure Pipelines do zewnętrznych i zdalnych usług. Aby wdrożyć aplikację internetową usługi Azure App Service, utwórz połączenie usługi z grupą zasobów zawierającą aplikację internetową.
Na stronie projektu wybierz pozycję Ustawienia projektu.
Wybierz Połączenia z usługami 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. Nadaj uprawnienia 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 Połączenia z usługami 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 głównej usługi Wartość appId
z obiektu JSON zwróconego przez polecenieaz ad sp create-for-rbac
.Klucz podmiotu usługi Wartość password
z obiektu JSON zwróconego przez polecenieaz ad sp create-for-rbac
.Identyfikator najemcy Wartość tenant
z obiektu JSON zwróconego przez polecenieaz ad sp create-for-rbac
.Wybierz pozycję Weryfikuj , aby zweryfikować połączenie.
Wprowadź nazwę połączenia z usługą.
Upewnij się, że zaznaczono opcję Udziel uprawnień dostępu do wszystkich potoków.
Wybierz pozycję Weryfikuj i zapisz.
Nowe połączenie pojawia się na liście Service connections i jest gotowe do użycia przez Azure Pipelines w ramach projektu.
Konfigurowanie agenta hostowanego samodzielnie
Jeśli używasz własnego własnego agenta, musisz skonfigurować agenta do uruchamiania języka Python. Pobieranie wersji języka Python nie jest możliwe na agentach hostowanych lokalnie. Musisz wstępnie instalować wersję języka Python. Użyj pełnego instalatora, aby uzyskać wersję Pythona zgodną z pip.
Aby uniknąć problemów niezgodności, należy dopasować wersję języka Python do wersji środowiska uruchomieniowego w aplikacji internetowej usługi Azure App Services. Wersja środowiska uruchomieniowego jest wyświetlana w danych wyjściowych JSON polecenia az webapp up
.
Wymagana wersja języka Python musi zostać dodana do pamięci podręcznej na własnym agencie, aby zadanie mogło z niej korzystać. Zwykle pamięć podręczna narzędzia znajduje się w katalogu _work/_tool agenta; alternatywnie ścieżkę można zastąpić 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ć rozpakowanymi plikami wersji Pythona. Plik {platform}.complete
powinien być 0-bajtowy, który przypomina x86.complete
lub x64.complete
i oznacza, że narzędzie jest poprawnie zainstalowane w cache.
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.
Utwórz potok
Utwórz ciąg do zbudowania i wdrożenia aplikacji webowej w Pythonie na usłudze Azure App 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 Wybierz repozytorium, wybierz rozgałęzione repozytorium przykładowe.
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 Konfiguruj potok wybierz pozycję Python dla aplikacji internetowej w systemie 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 pipeline definiuje potok CI/CD jako serię etapów, prac i kroków, gdzie każdy krok zawiera szczegółowe informacje dotyczące różnych zadań i skryptów. Przyjrzyj się potokowi przetwarzania, aby dowiedzieć się, 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 sforkowane przykładowe 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 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 elementy 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 Azure App 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 polecenia az webapp up
w formacie JSON.
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 plik YAML przykładowego 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 setuptools
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 w usłudze Azure App Service. |
vmImageName |
Nazwa systemu operacyjnego do użycia dla agenta kompilacji. |
environmentName |
Nazwa środowiska używanego na etapie wdrażania. Środowisko jest tworzone automatycznie, gdy zadanie etapu jest uruchamiane. |
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 budowania
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, która jest zidentyfikowana przez parametr o nazwie. 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ć agenta lokalnego 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 setuptools 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 przesłania. 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żeniowym, które celuje w środowisko. |
pool |
Określa pulę agentów dla wdrożeń. Domyślna pula agentów, jeśli nazwa nie jest określona. Słowo kluczowe vmImage identyfikuje system operacyjny wirtualnej maszyny 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żeniowym, które celuje w środowisko. |
pool Określa pulę agentów do użycia na potrzeby wdrożenia. Ta grupa musi zawierać agenta, który ma zdolność uruchomienia określonej w pipelinie wersji języka Python. |
|
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 kluczowe deploy
określa kroki, które należy uruchomić w zadaniu wdrożeniowym.
strategy:
runOnce:
deploy:
steps:
Elementy steps
w przepływie 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 do twojej 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'
.
Elementy steps
w przepływie 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 do twojej 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 tym, jak aplikacja zostanie wdrożona. 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.
Możesz obserwować pipeline w trakcie jego działania, wybierając Etapy lub Zadania w podsumowaniu przebiegu.
Obok każdego etapu i zadania, które zakończą się pomyślnie, znajdują się zielone znaczniki wyboru. Jeśli wystąpią błędy, są one wyświetlane w podsumowaniu lub w krokach zadania.
Możesz szybko wrócić do edytora YAML, klikając trzy pionowe kropki w prawym górnym rogu strony Podsumowanie i wybierając opcję Edytuj przepływ potoku:
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
ustawia akcję kompilacji SCM_DO_BUILD_DURING_DEPLOYMENT
na true
. Jeśli usługa aplikacyjna została udostępniona za pośrednictwem portalu, ta akcja nie jest ustawiona automatycznie.
Następujące kroki ustawiają akcję:
- 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.
- pl-PL: W wyświetlonym oknie podręcznym ustaw Name na
SCM_DO_BUILD_DURING_DEPLOYMENT
, ustaw Value natrue
, a następnie wybierz OK. - Wybierz pozycję Zapisz na górze strony Konfiguracji.
- Uruchom ponownie potok. Zależności powinny zostać zainstalowane w trakcie wdrażania.
Wyzwól uruchomienie potoku
Aby zainicjować rozpoczęcie 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 twoim 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 Centrum wdrażania i kartę Dzienniki.
- Sprawdź, czy nowe wdrożenie znajduje się na liście.
Zagadnienia dotyczące platformy Django
Azure Pipelines pozwala na wdrażanie aplikacji Django do Azure App Service na Linuksie, 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, zgodnie z opisem w poprzedniej sekcji, użyj parametru startUpCommand
w kroku AzureWebApp@1
pliku potoku YAML.
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ć skrypt startUpCommand
po wdrożeniu. Na przykład, jest to właściwość startUpCommand
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 zadaniem ArchiveFiles@2
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 do potoku. Aby uzyskać więcej informacji, zobacz Tworzenie aplikacji języka Python — uruchamianie testów.
Czyszczenie zasobów
Aby uniknąć naliczania opłat dotyczących zasobów 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.