Changes the agent pool from a custom "AmazonLinuxPool" to the default Azure Pipelines agent pool. This simplifies pipeline configuration and reduces reliance on specialized agent pools, leveraging the standard Azure-managed infrastructure.
187 lines
8.4 KiB
YAML
187 lines
8.4 KiB
YAML
trigger: none
|
|
schedules:
|
|
- cron: 0 9 * * MON-FRI
|
|
always: true
|
|
displayName: Daily Test Automation Run for FMG-NextGen
|
|
branches:
|
|
include:
|
|
- develop
|
|
pool: "Default"
|
|
|
|
variables:
|
|
# - group: Digital-Infrastructure
|
|
# - group: FMG-BuildBranches
|
|
- name: dockerImageName
|
|
value: "playwright-tests"
|
|
- name: imageTag
|
|
value: "$(Build.BuildId)"
|
|
- name: totalShards
|
|
value: 4
|
|
- name: IS_REGRESSION
|
|
value: "true"
|
|
- name: JIRA_BOARD_ID
|
|
value: "845"
|
|
- name: JIRA_EPIC_KEY
|
|
value: "CASH-208"
|
|
- name: JIRA_PROJECT_KEY
|
|
value: "CASH"
|
|
|
|
stages:
|
|
- stage: TestPr
|
|
displayName: Run Playwright Test
|
|
jobs:
|
|
- job: playwright_tests
|
|
continueOnError: true
|
|
strategy:
|
|
matrix:
|
|
shard1:
|
|
shardNumber: 1
|
|
shard2:
|
|
shardNumber: 2
|
|
shard3:
|
|
shardNumber: 3
|
|
shard4:
|
|
shardNumber: 4
|
|
|
|
steps:
|
|
- task: Docker@2
|
|
displayName: "Build Docker Image"
|
|
inputs:
|
|
command: build
|
|
dockerfile: Dockerfile.playwright
|
|
repository: $(dockerImageName)
|
|
tags: $(imageTag)
|
|
arguments: "--no-cache --pull"
|
|
|
|
- script: |
|
|
# Create container and run tests
|
|
container_id=$(docker create \
|
|
--ipc=host \
|
|
-e "CCIS_API_AUTH=$(CCIS_API_AUTH)" \
|
|
-e "BASE_URL=$(BASE_URL)" \
|
|
-e "CCIS_API_URL=$(CCIS_API_URL)" \
|
|
-e "ADMIN_SERVICE_API_URL=$(ADMIN_SERVICE_API_URL)" \
|
|
-e "SHARD=$(shardNumber)" \
|
|
-e CI=true \
|
|
-e "NODE_ENV=$(NODE_ENV)" \
|
|
$(dockerImageName):$(imageTag) \
|
|
npx concurrently -k -n "server,playwright"\
|
|
"sed -i \"s|^process\.env\.VUE_APP_CONSUMER_CF_DISTRO = .*|process\.env\.VUE_APP_CONSUMER_CF_DISTRO='https://digitalapi.test.safelite.io'|\" \"./vue.config.js\" && echo \"Updated config file to use TEST APIs\" && npm run serve -- --port=8080"\
|
|
"npx wait-on http://localhost:8080/fmg/ && npm run test:playwright -- --shard=$(shardNumber)/$(totalShards) --reporter=list,blob --grep \"@CASH|@Alert\"")
|
|
|
|
# Start container and stream logs
|
|
echo "Starting tests for shard $(shardNumber)..."
|
|
docker start -a $container_id
|
|
|
|
# Create directory for test results
|
|
echo "Creating test results directory..."
|
|
mkdir -p $(System.DefaultWorkingDirectory)/blob-reports/shard-$(shardNumber)
|
|
|
|
# Copy test results from container
|
|
echo "Copying test results..."
|
|
docker cp $container_id:/app/blob-report/. $(System.DefaultWorkingDirectory)/blob-reports/shard-$(shardNumber)/
|
|
|
|
# Remove container
|
|
echo "Cleaning up container..."
|
|
docker rm $container_id
|
|
|
|
# Check if tests failed
|
|
if [ $? -ne 0 ]; then
|
|
echo "Tests failed in shard $(shardNumber) or tests don't exist for this shard number!"
|
|
exit 0 # Suppress error. It will be visible in report.
|
|
fi
|
|
displayName: "Run Playwright Tests - Shard $(shardNumber)"
|
|
|
|
- task: PublishPipelineArtifact@1
|
|
displayName: "Publish Test Reports - Shard $(shardNumber)"
|
|
condition: always()
|
|
inputs:
|
|
targetPath: "$(System.DefaultWorkingDirectory)/blob-reports/shard-$(shardNumber)"
|
|
artifact: "playwright-report-shard-$(shardNumber)"
|
|
publishLocation: "pipeline"
|
|
|
|
- script: |
|
|
docker rmi $(dockerImageName):$(imageTag) -f
|
|
displayName: "Cleanup Docker Image"
|
|
condition: always()
|
|
|
|
- job: download_and_merge_reports
|
|
dependsOn: playwright_tests
|
|
timeoutInMinutes: 8
|
|
cancelTimeoutInMinutes: 10
|
|
steps:
|
|
- task: DownloadPipelineArtifact@2
|
|
inputs:
|
|
targetPath: "$(System.DefaultWorkingDirectory)/playwright-reports"
|
|
- task: Docker@2
|
|
displayName: "Build Docker Image"
|
|
inputs:
|
|
command: build
|
|
dockerfile: Dockerfile.playwright
|
|
repository: $(dockerImageName)
|
|
tags: $(imageTag)
|
|
arguments: "--no-cache --pull"
|
|
- bash: |
|
|
# Create container for jira writeback
|
|
container_id=$(docker create \
|
|
--ipc=host \
|
|
-e "JIRA_SERVER=$(JIRA_SERVER)" \
|
|
-e "JIRA_USERNAME=$(JIRA_USERNAME)" \
|
|
-e "JIRA_API_KEY=$(JIRA_API_KEY)" \
|
|
-e "IS_REGRESSION=$(IS_REGRESSION)" \
|
|
-e "JIRA_BOARD_ID=$(JIRA_BOARD_ID)" \
|
|
-e "JIRA_EPIC_KEY=$(JIRA_EPIC_KEY)" \
|
|
-e "JIRA_PROJECT_KEY=$(JIRA_PROJECT_KEY)" \
|
|
$(dockerImageName):$(imageTag) \
|
|
bash -c "echo \"Moving Playwright reports out of subfolders...\" &&
|
|
find ./playwright-reports/ -mindepth 2 -type f -exec mv {} ./playwright-reports/ \; &&
|
|
echo \"Merging reports...\" &&
|
|
PLAYWRIGHT_JUNIT_OUTPUT_DIR='/app/test-results' PLAYWRIGHT_JUNIT_OUTPUT_NAME='junit_results.xml' npx playwright merge-reports --reporter='playwright-tests/impl/reporter/JiraWritebackReporter.ts',junit ./playwright-reports
|
|
echo \"Contents of ortoni-report:\" && ls ./ortoni-report &&
|
|
echo 'Current dir: ' && pwd
|
|
echo 'Contents of current dir: ' && ls
|
|
echo 'Contents of /app/test-results' && ls /app/test-results ")
|
|
|
|
# Start container and stream logs
|
|
echo "Starting merge"
|
|
docker start -a $container_id
|
|
|
|
# Create directory for test results
|
|
echo "Creating test results directory..."
|
|
mkdir -p $(System.DefaultWorkingDirectory)/ortoni-report
|
|
mkdir -p $(System.DefaultWorkingDirectory)/test-results
|
|
|
|
# Copy test results from container
|
|
echo "Copying test results..."
|
|
docker cp $container_id:/app/ortoni-report/. $(System.DefaultWorkingDirectory)/ortoni-report
|
|
docker cp $container_id:/app/test-results/junit_results.xml $(System.DefaultWorkingDirectory)/test-results
|
|
|
|
# Remove container
|
|
echo "Cleaning up container..."
|
|
docker rm $container_id
|
|
env:
|
|
JIRA_API_KEY: $(JIRA_API_KEY)
|
|
displayName: merge_and_publish_results_to_jira
|
|
|
|
- task: PublishTestResults@2
|
|
displayName: "Publish test results"
|
|
inputs:
|
|
searchFolder: "test-results"
|
|
testResultsFormat: "JUnit"
|
|
testResultsFiles: "junit_results.xml"
|
|
mergeTestResults: true
|
|
failTaskOnFailedTests: false
|
|
testRunTitle: "Playwright Tests"
|
|
condition: succeededOrFailed()
|
|
|
|
- task: PublishPipelineArtifact@1
|
|
displayName: "Publish Merged Report"
|
|
condition: always()
|
|
inputs:
|
|
targetPath: "$(System.DefaultWorkingDirectory)/ortoni-report"
|
|
artifact: "playwright-merged-report"
|
|
publishLocation: "pipeline"
|
|
- script: |
|
|
docker rmi $(dockerImageName):$(imageTag) -f
|
|
displayName: "Cleanup Docker Image"
|
|
condition: always()
|