UNPKG

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
# 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