Průběžné doručování s využitím Azure Pipelines
Azure Pipelines můžete použít k automatickému nasazení do Azure Functions. Azure Pipelines umožňuje sestavovat, testovat a nasazovat s využitím kontinuální integrace (CI) a průběžného doručování (CD) pomocí Azure DevOps.
Kanály YAML se definují pomocí souboru YAML ve vašem úložišti. Krok je nejmenší stavební blok kanálu a může to být skript nebo úloha (předpřipravený skript). Seznamte se s klíčovými koncepty a komponentami, které tvoří kanál.
Úlohu použijete AzureFunctionApp
k nasazení do Azure Functions. Nyní existují dvě verze úlohy AzureFunctionApp (AzureFunctionApp@1, AzureFunctionApp@2). AzureFunctionApp@2
zahrnuje rozšířenou podporu ověřování, která z důvodu chyb snižuje pravděpodobnost selhání kanálů.
Zvolte verzi úkolu v horní části článku. Kanály YAML nejsou k dispozici pro Azure DevOps 2019 a starší.
Poznámka:
Důrazně doporučujeme AzureFunctionApp@2 . Nasazení do aplikace v plánu Flex Consumption je podporováno pouze ve verzi 2.
Požadavky
Organizace Azure DevOps. Pokud jej nemáte, můžete si jej zdarma vytvořit. Pokud už ho váš tým má, ujistěte se, že jste správcem projektu Azure DevOps, který chcete použít.
Možnost spouštět kanály na agentech hostovaných Microsoftem Můžete si buď koupit paralelní úlohu , nebo si můžete vyžádat úroveň Free.
Pokud plánujete používat GitHub místo Azure Repos, potřebujete také úložiště GitHub. Pokud nemáte účet GitHubu, můžete si ho zdarma vytvořit.
Existující aplikace funkcí v Azure, která má zdrojový kód v podporovaném úložišti. Pokud ještě nemáte projekt kódu Azure Functions, můžete ho vytvořit provedením následujícího článku specifického pro jazyk:
Po publikování do aplikace funkcí nezapomeňte nahrát projekt místního kódu do úložiště GitHub nebo Azure Repos.
Sestavte aplikaci
- Přihlaste se ke své organizaci Azure DevOps a přejděte k projektu.
- V projektu přejděte na stránku Kanály . Pak vyberte Nový kanál.
- Vyberte jednu z těchto možností pro kde je váš kód?:
- GitHub: Můžete být přesměrováni na GitHub a přihlásit se. Pokud ano, zadejte svoje přihlašovací údaje GitHubu. Když je toto připojení vaším prvním připojením GitHubu, průvodce vás také provede procesem připojení DevOps k účtům GitHubu.
- Git Azure Repos: V aktuálním projektu DevOps si můžete vybrat úložiště.
- Jakmile se zobrazí seznam úložišť, vyberte úložiště ukázkové aplikace.
- Služba Azure Pipelines analyzuje vaše úložiště a v části Konfigurace kanálu poskytuje seznam potenciálních šablon. Zvolte příslušnou šablonu aplikace funkcí pro váš jazyk. Pokud nevidíte správnou šablonu, vyberte Zobrazit více.
- Vyberte Uložit a spusťte, pak vyberte Potvrdit přímo do hlavní větve a pak zvolte Uložit a spustit znovu.
- Spustí se nové spuštění. Počkejte na dokončení.
Příklady kanálů sestavení YAML
Pro vytváření aplikací je možné použít následující kanály specifické pro jazyk.
Pomocí následující ukázky můžete vytvořit soubor YAML pro sestavení aplikace .NET.
Pokud se při sestavování aplikace zobrazí chyby, ověřte, že verze rozhraní .NET, kterou používáte, odpovídá vaší verzi Azure Functions. Další informace najdete v přehledu verzí modulu runtime Azure Functions.
pool:
vmImage: 'windows-latest'
steps:
- script: |
dotnet restore
dotnet build --configuration Release
- task: DotNetCoreCLI@2
inputs:
command: publish
arguments: '--configuration Release --output publish_output'
projects: '*.csproj'
publishWebProjects: false
modifyOutputPath: false
zipAfterPublish: false
- task: ArchiveFiles@2
displayName: "Archive files"
inputs:
rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
includeRootFolder: false
archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
artifactName: 'drop'
Nasazení aplikace
Nasadíte ji pomocí úlohy Nasazení aplikace funkcí Azure. Tato úloha vyžaduje připojení služby Azure jako vstup. Připojení služby Azure ukládá přihlašovací údaje pro připojení z Azure Pipelines k Azure.
Pokud chcete službu Azure Functions nasadit, přidejte na konec azure-pipelines.yml
souboru následující fragment kódu. Výchozí appType
hodnota je Windows. Můžete zadat Linux nastavením na appType
functionAppLinux
hodnotu . Nasazení do aplikace Flex Consumption se u úlohy AzureFunctionApp nepodporuje @v1 .
trigger:
- main
variables:
# Azure service connection established during pipeline creation
azureSubscription: <Name of your Azure subscription>
appName: <Name of the function app>
# Agent VM image name
vmImageName: 'ubuntu-latest'
- task: AzureFunctionApp@1 # Add this at the end of your file
inputs:
azureSubscription: <Azure service connection>
appType: functionAppLinux # default is functionApp
appName: $(appName)
package: $(System.ArtifactsDirectory)/**/*.zip
#Uncomment the next lines to deploy to a deployment slot
#Note that deployment slots is not supported for Linux Dynamic SKU
#deployToSlotOrASE: true
#resourceGroupName: '<Resource Group Name>'
#slotName: '<Slot name>'
Fragment kódu předpokládá, že kroky sestavení v souboru YAML vytvoří archiv zip ve $(System.ArtifactsDirectory)
složce vašeho agenta.
Nasazení kontejneru
Kód můžete automaticky nasadit jako kontejnerizovanou aplikaci funkcí po každém úspěšném sestavení. Další informace okontejnerch
Nejjednodušším způsobem nasazení do kontejneru je použití aplikace Azure Function App v úloze Nasazení kontejneru.
Nasazení provedete tak, že na konec souboru YAML přidáte následující fragment kódu:
trigger:
- main
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: <Docker registry service connection>
imageRepository: <Name of your image repository>
containerRegistry: <Name of the Azure container registry>
dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
tag: '$(Build.BuildId)'
# Agent VM image name
vmImageName: 'ubuntu-latest'
- task: AzureFunctionAppContainer@1 # Add this at the end of your file
inputs:
azureSubscription: '<Azure service connection>'
appName: '<Name of the function app>'
imageName: $(containerRegistry)/$(imageRepository):$(tag)
Fragment kódu odešle image Dockeru do služby Azure Container Registry. Úloha Nasazení služby Azure Function App v kontejneru načte příslušnou image Dockeru odpovídající zadanému BuildId
úložišti a pak image nasadí.
Kompletní příklad kanálu, včetně sestavení kontejneru a publikování do registru kontejneru, najdete v tomto příkladu nasazení kontejneru Azure Pipelines.
Nasazení do slotu
Aplikaci funkcí můžete nakonfigurovat tak, aby měla více slotů. Sloty umožňují bezpečně nasadit aplikaci a otestovat ji před tím, než ji zpřístupní vašim zákazníkům.
Následující fragment kódu YAML ukazuje, jak se nasadí do přípravného slotu a pak se prohodí do produkčního slotu:
- task: AzureFunctionApp@1
inputs:
azureSubscription: <Azure service connection>
appType: functionAppLinux
appName: <Name of the Function app>
package: $(System.ArtifactsDirectory)/**/*.zip
deployToSlotOrASE: true
resourceGroupName: <Name of the resource group>
slotName: staging
- task: AzureAppServiceManage@0
inputs:
azureSubscription: <Azure service connection>
WebAppName: <name of the Function app>
ResourceGroupName: <name of resource group>
SourceSlot: staging
SwapWithProduction: true
Vytvoření kanálu pomocí Azure CLI
K vytvoření kanálu buildu v Azure použijte az functionapp devops-pipeline create
příkaz. Kanál buildu se vytvoří a uvolní všechny změny kódu provedené v úložišti. Příkaz vygeneruje nový soubor YAML, který definuje kanál sestavení a verze a pak ho potvrdí do vašeho úložiště. Požadavky pro tento příkaz závisí na umístění kódu.
Pokud je váš kód na GitHubu:
Musíte mít oprávnění k zápisu pro vaše předplatné.
V Azure DevOps musíte být správcem projektu.
Musíte mít oprávnění k vytvoření tokenu PAT (Personal Access Token) GitHubu, který má dostatečná oprávnění. Další informace najdete v tématu Požadavky na oprávnění PAT GitHubu.
Musíte mít oprávnění k potvrzení do hlavní větve v úložišti GitHub, abyste mohli potvrdit automaticky vygenerovaný soubor YAML.
Pokud je váš kód v Azure Repos:
Musíte mít oprávnění k zápisu pro vaše předplatné.
V Azure DevOps musíte být správcem projektu.
Sestavte aplikaci
- Přihlaste se ke své organizaci Azure DevOps a přejděte k projektu.
- V projektu přejděte na stránku Kanály . Pak zvolte akci, která vytvoří nový kanál.
- Projděte si kroky průvodce tak, že nejprve vyberete GitHub jako umístění zdrojového kódu.
- Můžete být přesměrováni na GitHub kvůli přihlášení. Pokud ano, zadejte svoje přihlašovací údaje GitHubu.
- Jakmile se zobrazí seznam úložišť, vyberte úložiště ukázkové aplikace.
- Azure Pipelines bude analyzovat vaše úložiště a doporučí šablonu. Vyberte Uložit a spusťte, pak vyberte Potvrdit přímo do hlavní větve a pak zvolte Uložit a spustit znovu.
- Spustí se nové spuštění. Počkejte na dokončení.
Příklady kanálů sestavení YAML
Pro vytváření aplikací je možné použít následující kanály specifické pro jazyk.
K vytvoření souboru YAML pro sestavení aplikace .NET můžete použít následující ukázku:
pool:
vmImage: 'windows-latest'
steps:
- script: |
dotnet restore
dotnet build --configuration Release
- task: DotNetCoreCLI@2
inputs:
command: publish
arguments: '--configuration Release --output publish_output'
projects: '*.csproj'
publishWebProjects: false
modifyOutputPath: false
zipAfterPublish: false
- task: ArchiveFiles@2
displayName: "Archive files"
inputs:
rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
includeRootFolder: false
archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
artifactName: 'drop'
Nasazení aplikace
Nasadíte ji pomocí úlohy Nasazení aplikace funkcí Azure v2 . Tato úloha vyžaduje připojení služby Azure jako vstup. Připojení služby Azure ukládá přihlašovací údaje pro připojení z Azure Pipelines k Azure. Měli byste vytvořit připojení, které používá federaci identit úloh.
Verze úlohy v2 zahrnuje podporu pro novější zásobníky aplikací pro .NET, Python a Node. Úloha zahrnuje kontroly předběžného nasazení sítě. Pokud dojde k problémům s předběžným nasazením, nasazení se zastaví.
Pokud chcete službu Azure Functions nasadit, přidejte na konec azure-pipelines.yml
souboru následující fragment kódu. Výchozí appType
hodnota je Windows. Můžete zadat Linux nastavením na appType
functionAppLinux
hodnotu . Nasazení do aplikace Flex Consumption vyžaduje, abyste nastavili obojí appType: functionAppLinux
i isFlexConsumption: true
.
trigger:
- main
variables:
# Azure service connection established during pipeline creation
azureSubscription: <SUBSCRIPTION_NAME>
appName: <APP_NAME>
# Agent VM image name
vmImageName: 'windows-latest'
- task: AzureFunctionApp@2 # Add this at the end of your file
inputs:
azureSubscription: <AZURE_SERVICE_CONNECTION>
appType: functionApp # this specifies a Windows-based function app
appName: $(appName)
package: $(System.ArtifactsDirectory)/**/*.zip
deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required. Deployment method. Default: auto.
#Uncomment the next lines to deploy to a deployment slot
#Note that deployment slots is not supported for Linux Dynamic SKU
#deployToSlotOrASE: true
#resourceGroupName: '<RESOURCE_GROUP>'
#slotName: '<SLOT_NAME>'
Další kroky
- Projděte si přehled služby Azure Functions.
- Projděte si přehled Azure DevOps.