E2E Test CronJob (#117)

refactor e2e test into reusable action, so we can have manual & cron jobs. added cron for azure & gcp. failed jobs are reported to MS Teams.
This commit is contained in:
Fabian Kammel 2022-05-09 09:45:59 +02:00 committed by GitHub
parent a953df60b6
commit a879043f03
6 changed files with 163 additions and 26 deletions

View File

@ -3,6 +3,9 @@ description: "Destroy a running Constellation cluster."
runs:
using: 'composite'
steps:
- name: Remove VPN configuration
run: wg-quick down ./wg0.conf
shell: bash
- name: Constellation terminate
run: constellation terminate
shell: bash

77
.github/actions/e2e_test/action.yml vendored Normal file
View File

@ -0,0 +1,77 @@
name: e2e_test
description: "Run Constellation e2e test."
inputs:
workerNodesCount:
description: 'Number of worker nodes to spawn.'
required: true
controlNodesCount:
description: 'Number of control-plane nodes to spawn.'
required: true
autoscale:
description: 'Autoscale?'
required: true
cloudProvider:
description: 'Which cloud provider to use.'
required: true
machineType:
description: 'VM machine type. Make sure it matches selected cloud provider!'
required: true
gcp_service_account_json:
description: 'Service account with permissions to create Constellation on GCP.'
required: false
azure_credentials:
description: 'Credentials authorized to create Constellation on Azure.'
required: false
sonobuoyTestSuiteCmd:
description: 'Which tests should be run? Check README for guidance!'
required: true
msTeamsWebhook:
description: 'WebHook used to notify of failure'
required: true
runs:
using: 'composite'
steps:
- name: Build CLI
uses: ./.github/actions/build_cli
- name: Login to GCP
uses: ./.github/actions/gcp_login
with:
gcp_service_account_json: ${{ inputs.gcp_service_account_json }}
if: ${{ inputs.cloudProvider == 'gcp' }}
- name: Login to Azure
uses: ./.github/actions/azure_login
with:
azure_credentials: ${{ inputs.azure_credentials }}
if: ${{ inputs.cloudProvider == 'azure' }}
- name: Create cluster
uses: ./.github/actions/constellation_create
with:
cloudProvider: ${{ inputs.cloudProvider }}
autoscale: ${{ inputs.autoscale }}
workerNodesCount: ${{ inputs.workerNodesCount }}
controlNodesCount: ${{ inputs.controlNodesCount }}
machineType: ${{ inputs.machineType }}
- name: Run e2e tests
uses: ./.github/actions/sonobuoy
with:
sonobuoyTestSuiteCmd: ${{ inputs.sonobuoyTestSuiteCmd }}
- name: Notify teams channel
if: failure()
run: |
sudo apt-get install gettext-base -y
export TEAMS_JOB_NAME=${{ inputs.cloudProvider }}
export TEAMS_RUN_ID=${{ github.run_id }}
envsubst < teams-payload.json > to-be-send.json
curl \
-H "Content-Type: application/json" \
-d @to-be-send.json \
"${{ inputs.msTeamsWebhook }}"
shell: bash
working-directory: .github/actions/e2e_test
- name: Always terminate cluster
if: always()
uses: ./.github/actions/constellation_destroy

View File

@ -0,0 +1,24 @@
{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"themeColor": "FF5733",
"summary": "E2E Job Failed",
"sections": [{
"activityTitle": "E2E Job Failed",
"activitySubtitle": "${TEAMS_JOB_NAME}",
"activityImage": "https://miro.medium.com/max/552/1*G7s61tFPaLI9JRxWYpRNLw.png",
"facts": [{
"name": "Status",
"value": "Error"
}],
"markdown": true
}],
"potentialAction": [{
"@type": "OpenUri",
"name": "Go To Failed Action",
"targets": [{
"os": "default",
"uri": "https://github.com/edgelesssys/constellation/actions/runs/${TEAMS_RUN_ID}"
}]
}]
}

25
.github/workflows/e2e-test-azure.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: e2e Test Azure
on:
schedule:
- cron: '0 3 * * *'
jobs:
e2e-test-azure:
runs-on: [self-hosted, edgserver]
container:
image: ghcr.io/catthehacker/ubuntu:act-latest
options: --privileged
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Run Azure E2E test
uses: ./.github/actions/e2e_test
with:
workerNodesCount: '2'
controlNodesCount: '1'
autoscale: 'false'
cloudProvider: 'azure'
machineType: 'Standard_D4s_v3'
azure_credentials: ${{ secrets.AZURE_E2E_CREDENTIALS }}
sonobuoyTestSuiteCmd: '--mode certified-conformance'
msTeamsWebhook: ${{ secrets.MS_TEAMS_WEBHOOK_URI }}

25
.github/workflows/e2e-test-gcp.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: e2e Test GCP
on:
schedule:
- cron: '0 4 * * *'
jobs:
e2e-test-gcp:
runs-on: [self-hosted, edgserver]
container:
image: ghcr.io/catthehacker/ubuntu:act-latest
options: --privileged
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Run GCP E2E test
uses: ./.github/actions/e2e_test
with:
workerNodesCount: '2'
controlNodesCount: '1'
autoscale: 'false'
cloudProvider: 'gcp'
machineType: 'n2d-standard-2'
gcp_service_account_json: ${{ secrets.GCP_SERVICE_ACCOUNT }}
sonobuoyTestSuiteCmd: '--mode certified-conformance'
msTeamsWebhook: ${{ secrets.MS_TEAMS_WEBHOOK_URI }}

View File

@ -1,4 +1,4 @@
name: e2e Test
name: e2e Test Manual
on:
workflow_dispatch:
@ -37,37 +37,20 @@ on:
default: '--mode quick'
required: true
jobs:
e2e-test:
e2e-test-manual:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Build CLI
uses: ./.github/actions/build_cli
- name: Login to GCP
uses: ./.github/actions/gcp_login
- name: Run manual E2E test
uses: ./.github/actions/e2e_test
with:
gcp_service_account_json: ${{ secrets.GCP_SERVICE_ACCOUNT }}
if: ${{ github.event.inputs.cloudProvider == 'gcp' }}
- name: Login to Azure
uses: ./.github/actions/azure_login
with:
azure_credentials: ${{ secrets.AZURE_E2E_CREDENTIALS }}
- name: Create cluster
uses: ./.github/actions/constellation_create
with:
cloudProvider: ${{ github.event.inputs.cloudProvider }}
autoscale: ${{ github.event.inputs.autoscale }}
workerNodesCount: ${{ github.event.inputs.workerNodesCount }}
controlNodesCount: ${{ github.event.inputs.controlNodesCount }}
autoscale: ${{ github.event.inputs.autoscale }}
cloudProvider: ${{ github.event.inputs.cloudProvider }}
machineType: ${{ github.event.inputs.machineType }}
- name: Run e2e tests
uses: ./.github/actions/sonobuoy
with:
gcp_service_account_json: ${{ secrets.GCP_SERVICE_ACCOUNT }}
azure_credentials: ${{ secrets.AZURE_E2E_CREDENTIALS }}
sonobuoyTestSuiteCmd: ${{ github.event.inputs.sonobuoyTestSuiteCmd }}
- name: Always terminate cluster
if: always()
uses: ./.github/actions/constellation_destroy
msTeamsWebhook: ${{ secrets.MS_TEAMS_WEBHOOK_URI }}