OverviewHistoryStatsSecurity
npx skills add ...
Documentation
SKILL.md
npx skills add bagelhole/devops-security-agent-skills --skill azure-devops
Set up Azure Pipelines for CI/CD, configure build and release pipelines, manage Azure DevOps projects, and integrate with Azure services. Use when working with Azure DevOps Services or Server for enterprise DevOps workflows.
npx skills add bagelhole/devops-security-agent-skills --skill azure-devops
Build, test, and deploy applications using Azure Pipelines with YAML or classic editor.
Use this skill when:
Create azure-pipelines.yml in repository root:
Configure in Azure DevOps UI:
Problem: Cannot authenticate to Azure Solution: Verify service principal permissions, check connection in project settings
Problem: Download artifact fails Solution: Ensure publish task ran successfully, check artifact name matches
Problem: Deployment to environment fails Solution: Create environment in Pipelines > Environments first
trigger:
branches:
include:
- main
- release/*
exclude:
- feature/*
tags:
include:
- v*pr:
branches:
include:
- main
paths:
include:
- src/*
exclude:
- docs/*schedules:
- cron: '0 2 * * *'
displayName: 'Nightly build'
branches:
include:
- main
always: truestages:
- stage: Test
jobs:
- job: UnitTests
pool:
vmImage: 'ubuntu-latest'
steps:
- script: npm run test:unit
- job: IntegrationTests
pool:
vmImage: 'ubuntu-latest'
steps:
- script: npm run test:integrationjobs:
- job: Build
strategy:
matrix:
linux:
vmImage: 'ubuntu-latest'
windows:
vmImage: 'windows-latest'
mac:
vmImage: 'macos-latest'
pool:
vmImage: $(vmImage)
steps:
- script: npm teststages:
- stage: Build
jobs:
- job: A
steps:
- script: echo Job A
- job: B
dependsOn: A
steps:
- script: echo Job Bvariables:
- group: 'production-secrets'
- name: buildConfiguration
value: 'Release'parameters:
- name: environment
displayName: 'Environment'
type: string
default: 'dev'
values:
- dev
- staging
- prod
stages:
- stage: Deploy
variables:
env: ${{ parameters.environment }}
jobs:
- job: Deploy
steps:
- script: echo "Deploying to $(env)"variables:
- name: mySecret
value: $(SECRET_FROM_PIPELINE) # Set in pipeline settings
steps:
- script: |
echo "Using secret"
./deploy.sh
env:
API_KEY: $(mySecret)# templates/build-job.yml
parameters:
- name: nodeVersion
default: '20'
jobs:
- job: Build
steps:
- task: NodeTool@0
inputs:
versionSpec: ${{ parameters.nodeVersion }}
- script: npm ci && npm run build# azure-pipelines.yml
stages:
- stage: Build
jobs:
- template: templates/build-job.yml
parameters:
nodeVersion: '20'# templates/deploy-stage.yml
parameters:
- name: environment
type: string
- name: serviceConnection
type: string
stages:
- stage: Deploy_${{ parameters.environment }}
jobs:
- deployment: Deploy
environment: ${{ parameters.environment }}
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs:
azureSubscription: ${{ parameters.serviceConnection }}
appName: 'myapp-${{ parameters.environment }}'stages:
- stage: DeployStaging
jobs:
- deployment: DeployWeb
environment: 'staging'
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: drop
- script: ./deploy.sh stagingjobs:
- deployment: Deploy
environment: 'production'
strategy:
rolling:
maxParallel: 2
deploy:
steps:
- script: ./deploy.sh- task: AzureWebApp@1
inputs:
azureSubscription: 'my-azure-connection'
appType: 'webAppLinux'
appName: 'my-web-app'
package: '$(Pipeline.Workspace)/drop/*.zip'- task: AzureContainerApps@1
inputs:
azureSubscription: 'my-azure-connection'
containerAppName: 'my-container-app'
resourceGroup: 'my-rg'
imageToDeploy: 'myregistry.azurecr.io/myapp:$(Build.BuildId)'- task: KubernetesManifest@0
inputs:
action: 'deploy'
kubernetesServiceConnection: 'my-aks-connection'
namespace: 'default'
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
containers: |
myregistry.azurecr.io/myapp:$(Build.BuildId)- task: Docker@2
inputs:
containerRegistry: 'my-acr-connection'
repository: 'myapp'
command: 'buildAndPush'
Dockerfile: '**/Dockerfile'
tags: |
$(Build.BuildId)
latest# Download agent
mkdir myagent && cd myagent
curl -o vsts-agent.tar.gz https://vstsagentpackage.azureedge.net/agent/3.227.2/vsts-agent-linux-x64-3.227.2.tar.gz
tar zxvf vsts-agent.tar.gz
# Configure
./config.sh --url https://dev.azure.com/myorg --auth pat --token PAT_TOKEN --pool default
# Run as service
sudo ./svc.sh install
sudo ./svc.sh startpool:
name: 'my-self-hosted-pool'
demands:
- docker
- Agent.OS -equals Linux