sfdx-hardis
Version:
Swiss-army-knife Toolbox for Salesforce. Allows you to define a complete CD/CD Pipeline. Orchestrate base commands and assist users with interactive wizards
312 lines (284 loc) • 13.4 kB
YAML
# Pipeline for Salesforce monitoring using sfdx-hardis
#
# You need to (do a CTRL+F on "MANUAL")
# - manually add environment secret variables in step "sfdx-hardis login" (they are used for authentication). Ex: SFDX_CLIENT_ID_INTEG / SFDX_CLIENT_KEY_INTEG
# - configure the bypass in Azure settings -> https://www.programmingwithwolfgang.com/create-git-commits-in-azure-devops-yaml-pipeline/#configure-the-pipeline-to-bypass-pull-request-policies
# - add branches to monitor in schedules:branches:include
#
# You may also:
# - Update manifest/package-skip-items.xml to filter elements to retrieve
#
# Doc & support: https://sfdx-hardis.cloudity.com/salesforce-monitoring-home/
schedules:
- cron: "0 4 * * *" # Cron format -> https://crontab.cronhub.io/
always: "true"
branches:
# MANUAL: Add your monitored branches here
include:
- monitoring_my_client__integ_sandbox
pool:
vmImage: ubuntu-latest
variables:
- name: FORCE_COLOR
value: "1"
- name: BRANCH_NAME
value: $[replace(variables['Build.SourceBranch'], 'refs/heads/', '')]
jobs:
##############################################
### Sfdx Sources Backup + Push new commit ####
##############################################
- job: BackupSfdxHardis
pool:
vmImage: "ubuntu-latest"
steps:
- checkout: self
persistCredentials: "true"
displayName: Git checkout
fetchDepth: "0"
- script: |
git config --global user.email "contact@cloudity.com"
git config --global user.name "sfdx-hardis monitoring"
workingDirectory: $(System.DefaultWorkingDirectory)
displayName: Git config
- script: |
npm install @salesforce/cli -g
sf plugins install @salesforce/plugin-packaging
echo y | sf plugins install sfdx-hardis
sf version --verbose --json
workingDirectory: $(System.DefaultWorkingDirectory)
displayName: Install @salesforce/cli & sfdx-hardis
- script: |
git checkout -b "$BRANCH_NAME"
displayName: Checkout git branch latest commit
env:
CI: "true"
- script: |
sf hardis:auth:login
sf hardis:org:monitor:backup
displayName: sfdx-hardis login & Backup
env:
# MANUAL: Add your branch related variables here
SFDX_CLIENT_ID_MONITORING_MY_CLIENT__INTEG_SANDBOX: $(SFDX_CLIENT_ID_MONITORING_MY_CLIENT__INTEG_SANDBOX)
SFDX_CLIENT_KEY_MONITORING_MY_CLIENT__INTEG_SANDBOX: $(SFDX_CLIENT_KEY_MONITORING_MY_CLIENT__INTEG_SANDBOX)
CI_COMMIT_REF_NAME: $(BRANCH_NAME)
CONFIG_BRANCH: $(BRANCH_NAME)
ORG_ALIAS: $(BRANCH_NAME)
SLACK_TOKEN: $(SLACK_TOKEN)
SLACK_CHANNEL_ID: $(SLACK_CHANNEL_ID)
NOTIF_EMAIL_ADDRESS: $(NOTIF_EMAIL_ADDRESS)
CI: "true"
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
CI_SFDX_HARDIS_AZURE_TOKEN: $(System.AccessToken)
SYSTEM_COLLECTIONURI: $(System.CollectionUri)
SYSTEM_TEAMPROJECT: $(System.TeamProject)
SYSTEM_JOB_DISPLAY_NAME: $(System.JobDisplayName)
SYSTEM_JOB_ID: $(System.JobId)
SYSTEM_PULLREQUEST_PULLREQUESTID: $(System.PullRequest.PullRequestId)
BUILD_REPOSITORY_ID: $(Build.Repository.ID)
BUILD_REPOSITORYNAME: $(Build.Repository.Name)
BUILD_SOURCEBRANCHNAME: $(Build.SourceBranchName)
BUILD_BUILD_ID: $(Build.BuildId)
MONITORING_BACKUP_SKIP_METADATA_TYPES: $(MONITORING_BACKUP_SKIP_METADATA_TYPES)
NOTIFICATIONS_DISABLE: $(NOTIFICATIONS_DISABLE)
MONITORING_DISABLE: $(MONITORING_DISABLE)
NOTIF_API_URL: $(NOTIF_API_URL)
NOTIF_API_BASIC_AUTH_USERNAME: $(NOTIF_API_BASIC_AUTH_USERNAME)
NOTIF_API_BASIC_AUTH_PASSWORD: $(NOTIF_API_BASIC_AUTH_PASSWORD)
NOTIF_API_METRICS_URL: $(NOTIF_API_METRICS_URL)
NOTIF_API_METRICS_BASIC_AUTH_USERNAME: $(NOTIF_API_METRICS_BASIC_AUTH_USERNAME)
NOTIF_API_METRICS_BASIC_AUTH_PASSWORD: $(NOTIF_API_METRICS_BASIC_AUTH_PASSWORD)
CLOUDFLARE_EMAIL: $(CLOUDFLARE_EMAIL)
CLOUDFLARE_API_TOKEN: $(CLOUDFLARE_API_TOKEN)
CLOUDFLARE_ACCOUNT_ID: $(CLOUDFLARE_ACCOUNT_ID)
CLOUDFLARE_PROJECT_NAME: $(CLOUDFLARE_PROJECT_NAME)
CLOUDFLARE_DEFAULT_LOGIN_METHOD_TYPE: $(CLOUDFLARE_DEFAULT_LOGIN_METHOD_TYPE)
CLOUDFLARE_DEFAULT_ACCESS_EMAIL_DOMAIN: $(CLOUDFLARE_DEFAULT_ACCESS_EMAIL_DOMAIN)
CLOUDFLARE_EXTRA_ACCESS_POLICY_ID_LIST: $(CLOUDFLARE_EXTRA_ACCESS_POLICY_ID_LIST)
- script: |
git status
git add --all
git commit -m "Org state on $(date -u +'%Y-%m-%d %H:%M') for $BRANCH_NAME [skip ci]" || echo "No changes to commit"
git push --set-upstream origin "$BRANCH_NAME"
displayName: Add new commit to Monitoring Repo
workingDirectory: $(System.DefaultWorkingDirectory)
env:
CI: "true"
- publish: $(System.DefaultWorkingDirectory)/hardis-report/
artifact: hardis-report-backup
condition: succeededOrFailed()
continueOnError: "true"
displayName: Publish logs as artifacts
######################
### Run Apex Tests ###
######################
- job: ApexTestsSfdxHardis
dependsOn: BackupSfdxHardis
pool:
vmImage: "ubuntu-latest"
timeoutInMinutes: "120"
steps:
- checkout: self
persistCredentials: "true"
displayName: Git checkout
- script: |
npm install @salesforce/cli -g
sf plugins install @salesforce/plugin-packaging
echo y | sf plugins install sfdx-hardis
sf version --verbose --json
workingDirectory: $(System.DefaultWorkingDirectory)
displayName: Install @salesforce/cli & sfdx-hardis
- script: |
git pull origin "${BRANCH_NAME}"
displayName: Pull git branch latest commit
env:
CI: "true"
- script: |
sf hardis:auth:login
sf hardis:org:test:apex
continueOnError: "true"
displayName: sfdx-hardis login & Apex tests
env:
# MANUAL: Add your branch related variables here
SFDX_CLIENT_ID_MONITORING_MY_CLIENT__INTEG_SANDBOX: $(SFDX_CLIENT_ID_MONITORING_MY_CLIENT__INTEG_SANDBOX)
SFDX_CLIENT_KEY_MONITORING_MY_CLIENT__INTEG_SANDBOX: $(SFDX_CLIENT_KEY_MONITORING_MY_CLIENT__INTEG_SANDBOX)
CI_COMMIT_REF_NAME: $(BRANCH_NAME)
CONFIG_BRANCH: $(BRANCH_NAME)
ORG_ALIAS: $(BRANCH_NAME)
SLACK_TOKEN: $(SLACK_TOKEN)
SLACK_CHANNEL_ID: $(SLACK_CHANNEL_ID)
NOTIF_EMAIL_ADDRESS: $(NOTIF_EMAIL_ADDRESS)
CI: "true"
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
CI_SFDX_HARDIS_AZURE_TOKEN: $(System.AccessToken)
SYSTEM_COLLECTIONURI: $(System.CollectionUri)
SYSTEM_TEAMPROJECT: $(System.TeamProject)
SYSTEM_JOB_DISPLAY_NAME: $(System.JobDisplayName)
SYSTEM_JOB_ID: $(System.JobId)
SYSTEM_PULLREQUEST_PULLREQUESTID: $(System.PullRequest.PullRequestId)
BUILD_REPOSITORY_ID: $(Build.Repository.ID)
BUILD_REPOSITORYNAME: $(Build.Repository.Name)
BUILD_SOURCEBRANCHNAME: $(Build.SourceBranchName)
BUILD_BUILD_ID: $(Build.BuildId)
MONITORING_BACKUP_SKIP_METADATA_TYPES: $(MONITORING_BACKUP_SKIP_METADATA_TYPES)
NOTIFICATIONS_DISABLE: $(NOTIFICATIONS_DISABLE)
MONITORING_DISABLE: $(MONITORING_DISABLE)
NOTIF_API_URL: $(NOTIF_API_URL)
NOTIF_API_BASIC_AUTH_USERNAME: $(NOTIF_API_BASIC_AUTH_USERNAME)
NOTIF_API_BASIC_AUTH_PASSWORD: $(NOTIF_API_BASIC_AUTH_PASSWORD)
NOTIF_API_METRICS_URL: $(NOTIF_API_METRICS_URL)
NOTIF_API_METRICS_BASIC_AUTH_USERNAME: $(NOTIF_API_METRICS_BASIC_AUTH_USERNAME)
NOTIF_API_METRICS_BASIC_AUTH_PASSWORD: $(NOTIF_API_METRICS_BASIC_AUTH_PASSWORD)
- publish: $(System.DefaultWorkingDirectory)/hardis-report/
condition: succeededOrFailed()
continueOnError: "true"
artifact: hardis-report-apex-tests
displayName: Publish logs as artifacts
############################################################
### Run MegaLinter to detect quality and security issues ###
############################################################
- job: MegaLinter
dependsOn: BackupSfdxHardis
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
persistCredentials: "true"
displayName: Git checkout
- script: |
git config --global user.email "contact@cloudity.com"
git config --global user.name "sfdx-hardis monitoring"
git pull origin "${BRANCH_NAME}"
workingDirectory: $(System.DefaultWorkingDirectory)
displayName: Git config & pull latest commit
# Pull MegaLinter docker image
- script: docker pull oxsecurity/megalinter-salesforce:latest
displayName: Pull MegaLinter
# Run MegaLinter
- script: |
docker run -v $(System.DefaultWorkingDirectory):/tmp/lint \
--env-file <(env | grep -e SYSTEM_ -e BUILD_ -e TF_ -e AGENT_) \
-e CI=true \
-e SYSTEM_ACCESSTOKEN=$(System.AccessToken) \
-e GIT_AUTHORIZATION_BEARER=$(System.AccessToken) \
-e API_REPORTER=true \
-e NOTIF_API_URL=$(NOTIF_API_URL) \
-e NOTIF_API_BASIC_AUTH_USERNAME=$(NOTIF_API_BASIC_AUTH_USERNAME) \
-e NOTIF_API_BASIC_AUTH_PASSWORD=$(NOTIF_API_BASIC_AUTH_PASSWORD) \
-e NOTIF_API_METRICS_URL=$(NOTIF_API_METRICS_URL) \
-e NOTIF_API_METRICS_BASIC_AUTH_USERNAME=$(NOTIF_API_METRICS_BASIC_AUTH_USERNAME) \
-e NOTIF_API_METRICS_BASIC_AUTH_PASSWORD=$(NOTIF_API_METRICS_BASIC_AUTH_PASSWORD) \
oxsecurity/megalinter-salesforce:latest
continueOnError: "true"
displayName: Run MegaLinter
# Publish Megalinter reports
- publish: $(System.DefaultWorkingDirectory)/megalinter-reports/
condition: succeededOrFailed()
continueOnError: "true"
artifact: megalinter-reports
displayName: Publish reports
###################################
### Run other monitoring checks ###
###################################
- job: MonitoringChecksSfdxHardis
dependsOn: BackupSfdxHardis
pool:
vmImage: "ubuntu-latest"
steps:
- checkout: self
persistCredentials: "true"
displayName: Git checkout
- script: |
npm install @salesforce/cli -g
sf plugins install @salesforce/plugin-packaging
echo y | sf plugins install sfdx-hardis
sf version --verbose --json
workingDirectory: $(System.DefaultWorkingDirectory)
displayName: Install @salesforce/cli & sfdx-hardis
- script: |
git config --global user.email "contact@cloudity.com"
git config --global user.name "sfdx-hardis monitoring"
git pull origin "${BRANCH_NAME}"
displayName: Pull git branch latest commit
env:
CI: "true"
- script: |
sf hardis:auth:login
sf hardis:org:monitor:all
displayName: sfdx-hardis login & other checks
continueOnError: "true"
env:
# MANUAL: Add your branch related variables here
SFDX_CLIENT_ID_MONITORING_MY_CLIENT__INTEG_SANDBOX: $(SFDX_CLIENT_ID_MONITORING_MY_CLIENT__INTEG_SANDBOX)
SFDX_CLIENT_KEY_MONITORING_MY_CLIENT__INTEG_SANDBOX: $(SFDX_CLIENT_KEY_MONITORING_MY_CLIENT__INTEG_SANDBOX)
CI_COMMIT_REF_NAME: $(BRANCH_NAME)
CONFIG_BRANCH: $(BRANCH_NAME)
ORG_ALIAS: $(BRANCH_NAME)
SLACK_TOKEN: $(SLACK_TOKEN)
SLACK_CHANNEL_ID: $(SLACK_CHANNEL_ID)
NOTIF_EMAIL_ADDRESS: $(NOTIF_EMAIL_ADDRESS)
CI: "true"
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
CI_SFDX_HARDIS_AZURE_TOKEN: $(System.AccessToken)
SYSTEM_COLLECTIONURI: $(System.CollectionUri)
SYSTEM_TEAMPROJECT: $(System.TeamProject)
SYSTEM_JOB_DISPLAY_NAME: $(System.JobDisplayName)
SYSTEM_JOB_ID: $(System.JobId)
SYSTEM_PULLREQUEST_PULLREQUESTID: $(System.PullRequest.PullRequestId)
BUILD_REPOSITORY_ID: $(Build.Repository.ID)
BUILD_REPOSITORYNAME: $(Build.Repository.Name)
BUILD_SOURCEBRANCHNAME: $(Build.SourceBranchName)
BUILD_BUILD_ID: $(Build.BuildId)
MONITORING_BACKUP_SKIP_METADATA_TYPES: $(MONITORING_BACKUP_SKIP_METADATA_TYPES)
NOTIFICATIONS_DISABLE: $(NOTIFICATIONS_DISABLE)
MONITORING_DISABLE: $(MONITORING_DISABLE)
NOTIF_API_URL: $(NOTIF_API_URL)
NOTIF_API_BASIC_AUTH_USERNAME: $(NOTIF_API_BASIC_AUTH_USERNAME)
NOTIF_API_BASIC_AUTH_PASSWORD: $(NOTIF_API_BASIC_AUTH_PASSWORD)
NOTIF_API_METRICS_URL: $(NOTIF_API_METRICS_URL)
NOTIF_API_METRICS_BASIC_AUTH_USERNAME: $(NOTIF_API_METRICS_BASIC_AUTH_USERNAME)
NOTIF_API_METRICS_BASIC_AUTH_PASSWORD: $(NOTIF_API_METRICS_BASIC_AUTH_PASSWORD)
- publish: $(System.DefaultWorkingDirectory)/hardis-report/
artifact: hardis-report-monitoring
condition: succeededOrFailed()
continueOnError: "true"
displayName: Publish logs as artifacts