|
|
@ -0,0 +1,88 @@ |
|
|
|
# This workflow will build a docker container, publish it to Azure Container Registry, and deploy it to Azure Kubernetes Service using a helm chart. |
|
|
|
# |
|
|
|
# To configure this workflow: |
|
|
|
# |
|
|
|
# 1. Set up the following secrets in your workspace: |
|
|
|
# a. REGISTRY_USERNAME with ACR username |
|
|
|
# b. REGISTRY_PASSWORD with ACR Password |
|
|
|
# c. AZURE_CREDENTIALS with the output of `az ad sp create-for-rbac --sdk-auth` |
|
|
|
# |
|
|
|
# 2. Change the values for the REGISTRY_NAME, CLUSTER_NAME, CLUSTER_RESOURCE_GROUP and NAMESPACE environment variables (below). |
|
|
|
|
|
|
|
on: |
|
|
|
workflow_dispatch: |
|
|
|
# Inputs the workflow accepts. |
|
|
|
inputs: |
|
|
|
name: |
|
|
|
# Friendly description to be shown in the UI instead of 'name' |
|
|
|
description: 'exec name' |
|
|
|
# Default value if no value is explicitly provided |
|
|
|
default: 'default execution' |
|
|
|
# Input has to be provided for the workflow to run |
|
|
|
required: false |
|
|
|
|
|
|
|
# Environment variables available to all jobs and steps in this workflow |
|
|
|
env: |
|
|
|
REGISTRY_NAME: ${{ secrets.REGISTRY_NAME }} |
|
|
|
CLUSTER_NAME: ${{ secrets.CLUSTER_NAME}} |
|
|
|
CLUSTER_RESOURCE_GROUP: ${{ secrets.CLUSER_RG}} |
|
|
|
REGISTRY_ENDPOINT: ${{ secrets.REGISTRY_ENDPOINT }} |
|
|
|
NAMESPACE: default |
|
|
|
|
|
|
|
jobs: |
|
|
|
build: |
|
|
|
runs-on: ubuntu-latest |
|
|
|
steps: |
|
|
|
- uses: actions/checkout@master |
|
|
|
|
|
|
|
# Connect to Azure Container registry (ACR) |
|
|
|
- uses: azure/docker-login@v1 |
|
|
|
with: |
|
|
|
login-server: ${{ env.REGISTRY_NAME }}.azurecr.io |
|
|
|
username: ${{ secrets.REGISTRY_USERNAME }} |
|
|
|
password: ${{ secrets.REGISTRY_PASSWORD }} |
|
|
|
|
|
|
|
# Container build and push to a Azure Container registry (ACR) |
|
|
|
- run: | |
|
|
|
docker-compose build . -t ${{ secrets.REGISTRY_ENDPOINT }}:linux-dev |
|
|
|
docker-compose push ${{ secrets.REGISTRY_ENDPOINT }}:linux-dev |
|
|
|
|
|
|
|
# Set the target Azure Kubernetes Service (AKS) cluster. |
|
|
|
- uses: azure/aks-set-context@v1 |
|
|
|
with: |
|
|
|
creds: '${{ secrets.AZURE_CREDENTIALS }}' |
|
|
|
cluster-name: ${{ env.CLUSTER_NAME }} |
|
|
|
resource-group: ${{ env.CLUSTER_RESOURCE_GROUP }} |
|
|
|
|
|
|
|
# Create namespace if doesn't exist |
|
|
|
- run: | |
|
|
|
kubectl create namespace ${{ env.NAMESPACE }} --dry-run -o json | kubectl apply -f - |
|
|
|
|
|
|
|
# Create imagepullsecret for Azure Container registry (ACR) |
|
|
|
- uses: azure/k8s-create-secret@v1 |
|
|
|
with: |
|
|
|
container-registry-url: ${{ env.REGISTRY_NAME }}.azurecr.io |
|
|
|
container-registry-username: ${{ secrets.REGISTRY_USERNAME }} |
|
|
|
container-registry-password: ${{ secrets.REGISTRY_PASSWORD }} |
|
|
|
secret-name: ${{ env.REGISTRY_NAME }}-registry-connection |
|
|
|
namespace: ${{ env.NAMESPACE }} |
|
|
|
|
|
|
|
# Baking the helm chart to generate the manifests to deploy |
|
|
|
- uses: azure/k8s-bake@v1 |
|
|
|
with: |
|
|
|
renderEngine: 'helm2' |
|
|
|
helmChart: './deploy/k8s/helm/' |
|
|
|
helm-version: 'latest' |
|
|
|
id: bake |
|
|
|
|
|
|
|
# Deploy app to AKS |
|
|
|
- uses: azure/k8s-deploy@v1 |
|
|
|
with: |
|
|
|
manifests: ${{ steps.bake.outputs.manifestsBundle }} |
|
|
|
images: | |
|
|
|
${{ secrets.REGISTRY_ENDPOINT }}:linux-dev |
|
|
|
imagepullsecrets: | |
|
|
|
${{ env.REGISTRY_NAME }}-registry-connection |
|
|
|
namespace: ${{ env.NAMESPACE }} |
|
|
|
|
|
|
|
|