New to Kestra?
Use blueprints to kickstart your first workflows.
Kestra flow that clones a repo, zips the code, runs az functionapp create and config-zip via AzCLI with a service principal, then triggers a Logic App.
Ship an Azure Function from a Git repository to a live consumption-plan app in one governed run. This Kestra blueprint clones the function source, packages it as a zip artifact inside a shared working directory, creates the Function App with the Azure CLI, and pushes the code with zip deployment. It then goes one step further than a plain CI job: it invokes a downstream Azure Logic App over its HTTP trigger and downloads the artifact the Logic App returns, showing how Kestra can chain Azure serverless services into a single pipeline. All Azure authentication is handled once through pluginDefaults with a service principal, so no task carries its own credentials.
wdir task (io.kestra.plugin.core.flow.WorkingDirectory) gives the next four tasks a shared filesystem.clone task (io.kestra.plugin.git.Clone) pulls the function project from Git into azure-function-demo. Point url at your real repository.zip task (io.kestra.plugin.scripts.shell.Commands) installs zip, packages the project as release.zip, and moves it to {{ workingDir }} for the deploy step.cli task (io.kestra.plugin.azure.cli.AzCLI) runs az functionapp create with a Python 3.9 runtime on a Linux consumption plan, using the resourceGroup, region, and storageAccount variables plus the name input.deploy_func task (io.kestra.plugin.azure.cli.AzCLI) runs az functionapp deployment source config-zip to push release.zip to the new app.trigger_logic_api task (io.kestra.plugin.core.http.Request) POSTs to an Azure Logic App HTTP trigger, with the workflow key and SAS signature kept in secrets.get_data task (io.kestra.plugin.core.http.Download) extracts a URL from the Logic App's JSON response with jq('.message') and downloads the artifact into Kestra's internal storage.pluginDefaults block injects the service principal (AZURE_SP_APP_ID, AZURE_SP_PASSWORD, AZURE_TENANT_ID) into every io.kestra.plugin.azure task.pluginDefaults, no repeated credential blocks.name input for repeatable POC or per-branch deployments.Azure DevOps pipelines or GitHub Actions can zip-deploy a function, but they stop at the deploy. Kestra treats the deployment as one step in a larger orchestration: the same execution that ships the code can call the Logic App that depends on it, capture its output as a downloadable artifact, and expose every CLI log line in one UI. Variables and inputs make the flow reusable across environments, pluginDefaults centralizes the service principal, and the whole pipeline is version-controlled YAML you can promote between instances.
resourceGroup, region, and storageAccount variables).AZURE_SP_APP_ID, AZURE_SP_PASSWORD, AZURE_TENANT_ID: service principal used by all AzCLI tasks.LOGIC_APP_KEY: the workflow id segment of the Logic App trigger URL.LOGIC_APP_SIG: the SAS signature (sig parameter) of the Logic App trigger URL.clone task url to your repo, and adjust the Logic App region and host in trigger_logic_api.name input.cli and deploy_func logs, then verify the Function App in the Azure portal.io.kestra.plugin.core.trigger.Webhook wired to your Git provider.az functionapp create with a runIf condition.vars per namespace or tenant.io.kestra.plugin.core.flow.Pause before deploying to production.