Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
在本快速入門中,您會建立管線來建置及測試 Python 應用程式。 您會看到如何使用 Azure Pipelines 來建置、測試及部署 Python 應用程式和腳本,作為持續整合和持續傳遞 (CI/CD) 系統的一部分。
必要條件
Python 已預安裝在 Linux、macOS 和 Windows Microsoft 裝載的 代理程式上。 您不需要再設定任何項目來建置 Python 專案。 若要查看預先安裝的 Python 版本,請參閱 軟體。
| 產品 | 需求 |
|---|---|
| Azure DevOps | - Azure DevOps 專案。 - 能夠在由 Microsoft 託管的代理上運行管線。 您可以購買平行作業,也可以申請免費方案。 - YAML 和 Azure Pipelines 的基本知識。 如需詳細資訊,請參閱 建立您的第一個管線。 - 許可權: - 若要建立管線:您必須位於 參與者 群組中,且群組必須將 [建立組建管線 ] 許可權設定為 [允許]。 Project Administrators 群組的成員可以管理管線。 - 若要建立服務連線:您必須具有 管理員 或 建立者 角色以進行 服務連線。 |
| GitHub | - GitHub 帳戶。 - 一個用於授權 Azure Pipelines 的 GitHub 服務連線。 |
| 產品 | 需求 |
|---|---|
| Azure DevOps | - Azure DevOps 專案。 - 已安裝 Python 3.12 或其他 Python 版本的自我裝載代理程式。 若要建立一個代理程式,請參閱 自我裝載代理程式。 - YAML 和 Azure Pipelines 的基本知識。 如需詳細資訊,請參閱 建立您的第一個管線。 - 許可權: - 若要建立管線:您必須位於 參與者 群組中,且群組必須將 [建立組建管線 ] 許可權設定為 [允許]。 Project Administrators 群組的成員可以管理管線。 - 若要建立服務連線:您必須具有 管理員 或 建立者 角色以進行 服務連線。 |
| GitHub | - GitHub 帳戶。 - 一個用於授權 Azure Pipelines 的 GitHub 服務連線。 |
重要
GitHub 程序可能需要您在 GitHub 中採取下列一或多個動作:
- 登入。
- 授權 Azure Pipelines。
- 向 GitHub 組織進行驗證。
- 安裝 Azure Pipelines 應用程式。
請按照指示完成所需的程序。 如需詳細資訊,請參閱 存取 GitHub 存放庫。
複製範例程式碼
將範例 Python 存放庫分支至您的 GitHub 帳戶。
- 移至 python-sample-vscode-flask-tutorial 存放庫。
- 選取右上角的 [分叉]。
- 請確定您的 GitHub 帳戶名稱已在 [擁有者] 底下選取,然後選取 [ 建立分支]。 預設情況下,分支的名稱與父儲存庫相同,但您可以為其命名不同。
建立管線
- 在您的 Azure DevOps 專案中,從左側導覽功能表中選取 [管線] ,然後選取 [ 新增管線],或選取 [建立管線] (如果此管線是專案中的第一個管線)。
- 在 [ 您的程式碼在哪裡 ] 畫面上,選取 [GitHub ] 作為原始程式碼的位置。
- 在 [選取存放庫 ] 畫面上,選取分支的 Python 範例存放庫。
- 在 [設定您的管線] 畫面上,選取 [入門管線]。
自訂您的流程
在檢閱管線 YAML畫面上,將產生的azure-pipelines.yml檔案內容取代為下列程式碼。 程式碼在三個不同版本的 Python 上執行下列動作:
- 安裝所需的 Python 版本和相依性。
- 封裝將成品建置至 ZIP 封存。
- 將存檔發佈至您的管線。
- 執行測試。
trigger:
- main
pool:
vmImage: ubuntu-latest
strategy:
matrix:
Python310:
python.version: '3.10'
Python311:
python.version: '3.11'
Python312:
python.version: '3.12'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
displayName: 'Use Python $(python.version)'
- script: |
python -m pip install --upgrade pip
pip install -r requirements.txt
displayName: 'Install dependencies'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: $(System.DefaultWorkingDirectory)
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId)-$(python.version).zip
replaceExistingArchive: true
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
- script: |
pip install pytest pytest-azurepipelines
pytest
displayName: 'pytest'
在檢閱管線 YAML畫面上,將產生的azure-pipelines.yml檔案內容取代為下列程式碼。 程式碼會執行下列動作:
- 安裝所需的 Python 版本和相依性。
- 封裝將成品建置至 ZIP 封存。
- 將存檔發佈至您的管線。
- 執行測試。
自訂 azure-pipelines.yml 以符合您的項目組態。
- 如果您有不同的代理程式集區,請將集區
name預留位置替換為您的集區名稱或default。 - 如有必要,請將 Python
versionSpec變更為安裝在自我裝載代理程式上的版本。
trigger:
- main
pool:
name: '<your-pool-name or default>'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.12'
displayName: 'Use Python 3.12'
- script: |
python -m pip install --upgrade pip
pip install -r requirements.txt
displayName: 'Install dependencies'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: $(System.DefaultWorkingDirectory)
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
- script: |
pip install pytest pytest-azurepipelines
pytest
displayName: 'pytest'
執行您的流程
選取 [ 儲存並執行],然後選取 [ 儲存並再次執行 ]。 您可以在「摘要」畫面上選取「工作」,以查看您的工作實際運作情況。
工作會執行三次,針對每個指定的 Python 版本執行一次。 這三個版本可以在不同的代理程式上平行執行。
檢視構件和測試結果
若要檢視建置成品,請選取 [摘要] 索引標籤上的 [N] 已發佈連結。
工件 頁面會顯示已發佈的組建工件。
若要檢視測試結果,請選取 [ 測試] 索引標籤。
清理
如果您已完成使用所建立的管線,則可以將其刪除。
從專案的左側導覽功能表中選取 [管線]。
在管線清單中,將滑鼠停留在您建立的管線上,選取右側的 [ 更多動作 ] 圖示,然後選取 [ 刪除]。
或者選取管線,然後在管線頁面上,選取右上角的 [ 更多動作 ] 圖示,然後選取 [ 刪除]。
輸入管線名稱,然後再次選取 [刪除]。
您已成功建立並執行建置和測試 Python 應用程式的管線。 您現在可以使用 Azure Pipelines 來建置、測試和部署 Python 應用程式和腳本,作為 CI/CD 程式的一部分。