cortexapps-cli 1.35.0__tar.gz → 1.36.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/PKG-INFO +1 -1
- cortexapps_cli-1.36.0/cortexapps_cli/solutions/jenkins-deploy/README.md +129 -0
- cortexapps_cli-1.36.0/cortexapps_cli/solutions/jenkins-deploy/_templates/Jenkinsfile +82 -0
- cortexapps_cli-1.36.0/cortexapps_cli/solutions/jenkins-deploy/_templates/trigger-jenkins-deploy.yaml +126 -0
- cortexapps_cli-1.36.0/cortexapps_cli/solutions/jenkins-deploy/catalog/jenkins-demo.yaml +13 -0
- cortexapps_cli-1.36.0/cortexapps_cli/solutions/jenkins-deploy/scorecards/deploy-health.yaml +51 -0
- cortexapps_cli-1.36.0/cortexapps_cli/solutions/jenkins-deploy/setup.py +791 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/pyproject.toml +1 -1
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/LICENSE +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/README.rst +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/__init__.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/cli.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/command_options.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/ai_skills.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/api_keys.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/audit_logs.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/backup.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/backup_commands/cortex_export.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/catalog.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/custom_data.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/custom_events.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/custom_metrics.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/dependencies.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/deploys.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/discovery_audit.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/docs.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/entity_relationship_types.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/entity_relationships.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/entity_types.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/gitops_logs.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/groups.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/initiatives.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/apiiro.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/argocd.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/aws.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/azure_active_directory.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/azure_devops.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/azure_resources.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/bamboohr.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/bitbucket.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/bugsnag.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/buildkite.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/checkmarx_sast.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/circleci.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/clickup.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/codecov.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/coralogix.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/datadog.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/dynatrace.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/firehydrant.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/github.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/gitlab.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/harness.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/incidentio.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/instana.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/jenkins.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/jira.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/launchdarkly.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/mend_sast.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/mend_sca.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/newrelic.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/okta.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/opsgenie.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/pagerduty.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/prometheus.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/rollbar.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/rootly.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/semgrep.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/sentry.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/servicenow.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/servicenow_cloud_observability.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/snyk.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/sonarqube.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/splunk_observability_cloud.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/splunk_on_call.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/sumologic.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/veracode.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/wiz.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/workday.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/integrations_commands/xmatters.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/ip_allowlist.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/on_call.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/packages.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/packages_commands/go.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/packages_commands/java.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/packages_commands/node.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/packages_commands/nuget.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/packages_commands/python.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/plugins.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/queries.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/rest.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/scaffolders.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/scim.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/scorecards.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/scorecards_commands/exemptions.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/secrets.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/solutions.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/teams.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/users.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/users_commands/roles.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/commands/workflows.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/cortex_client.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/models/team.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/__init__.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/_lib/__init__.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/_lib/setup_base.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/README.md +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/catalog/address-reviews.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/catalog/audit-flags.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/catalog/code-review.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/catalog/fix-issue.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/catalog/incident-trends.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/catalog/jira-to-kb.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/catalog/release-to-sha.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/catalog/search-troubleshooting-kb.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/catalog/simplify-test.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/entity-types/ai-agent.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-agents/scorecards/ai-agent-governance.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/README.md +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/catalog/api-doc-sync.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/catalog/changelog-writer.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/catalog/docs-generator.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/catalog/docs-portal.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/entity-relationship-types/ai-plugin-service.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/entity-relationship-types/ai-plugin-skills.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/entity-relationship-types/ai-skill-service.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/entity-types/ai-plugin.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/entity-types/ai-skill.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-skills/scorecards/ai-skills-quality.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/.github/workflows/sync-claude-spend.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/README.md +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-alice-chen.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-bob-martinez.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-carol-kim.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-david-osei.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-emma-johnson.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/catalog/team-data.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/catalog/team-engineering.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/catalog/team-frontend.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/catalog/team-platform.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/custom-metrics/ai-spend.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/entity-relationship-types/team-member.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/entity-types/employee.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/plugins/team-ai-spend.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/scorecards/ai-spend-scorecard.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/ai-spend/scripts/sync-claude-spend.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/.github/workflows/cortex-service-version.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/README.md +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/api-gateway-3.0.1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/api-gateway-3.1.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/api-gateway-3.1.1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/api-gateway.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/auth-2.1.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/auth-2.1.1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/auth-2.2.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/auth.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/aws-dev-us-west-2.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/billing-1.1.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/billing-1.2.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/billing.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/cart-1.0.2.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/cart.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/checkout-2.2.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/checkout-2.3.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/checkout-2.4.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/checkout.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/gcp-prod-us-east-1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/gcp-prod-us-west-1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/gcp-staging-us-east-1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/notifications-1.0.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/notifications-1.0.1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/notifications-1.1.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/notifications.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/order-service-2.0.1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/order-service-2.1.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/order-service.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/payments-1.6.1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/payments-1.7.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/payments-1.7.1.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/payments.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/release-2026-06-20.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/release-2026-07-01.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/release-2026-07-09.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/release-2026-07-10.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/search-4.0.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/search-4.1.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/search.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/user-service-1.2.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/user-service-1.3.0.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/catalog/user-service.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/entity-relationship-types/environments.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/entity-relationship-types/versions.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/entity-types/environment.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/entity-types/release.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/entity-types/service-version.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/workflows/create-environment.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/workflows/create-release.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/environments/workflows/trigger-github-release.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/github-actions-deploy/README.md +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/github-actions-deploy/_templates/cortex-async-callback.yml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/github-actions-deploy/_templates/cortex-deploy.yml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/github-actions-deploy/_templates/cortex-register-deploy.yml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/github-actions-deploy/_templates/github-actions-deploy.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/github-actions-deploy/catalog/github-actions-demo.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/github-actions-deploy/scorecards/deploy-health.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/github-actions-deploy/setup.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/harness-deploy/README.md +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/harness-deploy/_templates/cortex-async-callback-template.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/harness-deploy/_templates/cortex-deploy-pipeline.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/harness-deploy/_templates/cortex-record-deploy-template.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/harness-deploy/_templates/trigger-harness-deploy.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/harness-deploy/catalog/harness-demo.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/harness-deploy/scorecards/deploy-health.yaml +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/harness-deploy/setup.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/workday/README.md +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/workday/data/configuration.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/workday/data/pied-piper-supervisory-org.json +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/solutions/workday/setup.py +0 -0
- {cortexapps_cli-1.35.0 → cortexapps_cli-1.36.0}/cortexapps_cli/utils.py +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Jenkins Deploy Tracking
|
|
3
|
+
description: Track deployments from Jenkins pipelines in Cortex, with a deploy health scorecard measuring delivery cadence.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Jenkins Deploy Tracking
|
|
7
|
+
|
|
8
|
+
Trigger deploys from Cortex, track them as they run in Jenkins, and surface deploy health back in your service catalog.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌─────────────────────────────────┐
|
|
12
|
+
│ Cortex Catalog │
|
|
13
|
+
│ │
|
|
14
|
+
│ jenkins-demo (service) │
|
|
15
|
+
│ ├── x-cortex-custom-metadata │
|
|
16
|
+
│ │ jenkins: │
|
|
17
|
+
│ │ url / job │
|
|
18
|
+
│ └── Scorecard: Deploy Health │
|
|
19
|
+
│ Bronze / Silver / Gold │
|
|
20
|
+
└──────────────┬──────────────────┘
|
|
21
|
+
│
|
|
22
|
+
│ Run workflow from entity page
|
|
23
|
+
│ (or: cortex workflows run -t
|
|
24
|
+
│ jenkins-trigger-deploy
|
|
25
|
+
│ --scope ENTITY --entity <tag>)
|
|
26
|
+
▼
|
|
27
|
+
┌─────────────────────────────────┐
|
|
28
|
+
│ Cortex Workflow │
|
|
29
|
+
│ Trigger Jenkins Deploy │
|
|
30
|
+
│ │
|
|
31
|
+
│ 1. Read Jenkins config from │
|
|
32
|
+
│ entity custom metadata │
|
|
33
|
+
│ 2. POST /buildWithParameters │
|
|
34
|
+
│ to Jenkins via HTTP │
|
|
35
|
+
│ 3. Pass callback URL as │
|
|
36
|
+
│ pipeline parameter │
|
|
37
|
+
│ 4. Wait for callback │
|
|
38
|
+
└──────────────┬──────────────────┘
|
|
39
|
+
│ POST /buildWithParameters (HTTP + Basic auth)
|
|
40
|
+
▼
|
|
41
|
+
┌─────────────────────────────────────────────────────────┐
|
|
42
|
+
│ GitHub Codespaces (optional — provisioned by setup) │
|
|
43
|
+
│ port 8080 exposed publicly for demo │
|
|
44
|
+
│ │
|
|
45
|
+
│ ┌─────────────────────────────────┐ │
|
|
46
|
+
│ │ Jenkins Pipeline │ │
|
|
47
|
+
│ │ cortex-deploy │ │
|
|
48
|
+
│ │ │ │
|
|
49
|
+
│ │ stage: Build │ │
|
|
50
|
+
│ │ └── run your deploy steps │ │
|
|
51
|
+
│ │ │ │
|
|
52
|
+
│ │ stage: Record Deploy in Cortex │ │
|
|
53
|
+
│ │ └── POST /deploys ◄────┼── registers deploy │
|
|
54
|
+
│ │ (entity: jenkins-demo) │ event on entity │
|
|
55
|
+
│ │ │ │
|
|
56
|
+
│ │ post { always } │ │
|
|
57
|
+
│ │ └── POST callbackUrl ───────►│ Cortex marks │
|
|
58
|
+
│ │ status: SUCCESS/FAILURE │ workflow done │
|
|
59
|
+
│ └─────────────────────────────────┘ │
|
|
60
|
+
└─────────────────────────────────────────────────────────┘
|
|
61
|
+
(or point to your own Jenkins instance — Codespaces not required)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## What's Included
|
|
65
|
+
|
|
66
|
+
- **Entity:** `jenkins-demo` service — a sample entity to receive deploy events
|
|
67
|
+
- **Scorecard:** Deploy Health — Bronze/Silver/Gold based on deploy frequency
|
|
68
|
+
- **Jenkinsfile:** `cortex-deploy` — a two-stage pipeline (Build → Record Deploy) with an async callback to Cortex; drop it into any existing Jenkins job
|
|
69
|
+
- **Cortex workflow:** `jenkins-trigger-deploy` — reads Jenkins coordinates from entity custom metadata, triggers the pipeline via HTTP, and waits for the result
|
|
70
|
+
- **Setup script:** Interactive wizard that wires everything together end-to-end; optionally provisions Jenkins in GitHub Codespaces for a zero-install demo
|
|
71
|
+
|
|
72
|
+
## Quick Start
|
|
73
|
+
|
|
74
|
+
1. Install the solution:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
cortex solutions install -s jenkins-deploy
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
2. Follow the post-install setup prompts, or run later:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
cortex solutions post-install -s jenkins-deploy
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## How It Works
|
|
87
|
+
|
|
88
|
+
The Cortex workflow reads Jenkins coordinates from `x-cortex-custom-metadata.jenkins` on the entity, then triggers `cortex-deploy` via `buildWithParameters`, passing a `callback_url` as a pipeline parameter. Cortex waits asynchronously for the pipeline to report back.
|
|
89
|
+
|
|
90
|
+
Jenkins runs the build, then notifies Cortex twice on completion:
|
|
91
|
+
- **Deploy registration** (`POST /api/v1/catalog/{tag}/deploys`) — records the deploy event on the entity, feeding the Deploy Health scorecard
|
|
92
|
+
- **Workflow callback** — signals the Cortex workflow run as SUCCESS or FAILURE
|
|
93
|
+
|
|
94
|
+
## After Installing
|
|
95
|
+
|
|
96
|
+
If you ran the post-install setup, you're already done — it created the Jenkins job, added credentials, wrote Jenkins coordinates to the entity's custom metadata, imported the Cortex workflow, and triggered a test deploy.
|
|
97
|
+
|
|
98
|
+
To roll the pattern out to your own services:
|
|
99
|
+
|
|
100
|
+
1. Add the `cortex-deploy` **Jenkinsfile** stages to any existing Jenkins pipeline (needs only `CORTEX_API_KEY` and `CORTEX_BASE_URL` secret-text credentials)
|
|
101
|
+
|
|
102
|
+
2. Add a `x-cortex-custom-metadata` block to your entity's catalog YAML with your Jenkins coordinates:
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
x-cortex-custom-metadata:
|
|
106
|
+
jenkins:
|
|
107
|
+
url: "https://jenkins.example.com"
|
|
108
|
+
job: "your-pipeline-name"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
3. Create a **Cortex secret** with your Jenkins credentials:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
cortex secrets create -f - <<EOF
|
|
115
|
+
{
|
|
116
|
+
"name": "Jenkins Auth",
|
|
117
|
+
"tag": "jenkins_auth",
|
|
118
|
+
"secret": "$(echo -n 'your-username:your-api-token' | base64)"
|
|
119
|
+
}
|
|
120
|
+
EOF
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
4. Run the **Solution: Trigger Jenkins Deploy** workflow from the entity page — it reads the Jenkins coordinates from the entity's custom metadata automatically, with no manual inputs required
|
|
124
|
+
|
|
125
|
+
## Customizing for Production
|
|
126
|
+
|
|
127
|
+
- Point the workflow at your real entity by replacing `jenkins-demo` with your service tag
|
|
128
|
+
- Add `CORTEX_API_KEY` and `CORTEX_BASE_URL` secret-text credentials to your real Jenkins instances
|
|
129
|
+
- The Deploy Health scorecard is scoped to `demo-jenkins-deploys` to avoid affecting your existing services. To roll it out broadly, remove the group filter from the scorecard. To opt in individual services, add the `demo-jenkins-deploys` group to them.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
pipeline {
|
|
2
|
+
agent any
|
|
3
|
+
parameters {
|
|
4
|
+
string(name: 'callback_url', defaultValue: '', description: 'Cortex async callback URL')
|
|
5
|
+
string(name: 'cortex_entity_tag', defaultValue: '', description: 'Cortex entity tag')
|
|
6
|
+
}
|
|
7
|
+
environment {
|
|
8
|
+
CORTEX_API_KEY = credentials('CORTEX_API_KEY')
|
|
9
|
+
CORTEX_BASE_URL = credentials('CORTEX_BASE_URL')
|
|
10
|
+
}
|
|
11
|
+
stages {
|
|
12
|
+
stage('Build') {
|
|
13
|
+
steps {
|
|
14
|
+
echo 'Starting build...'
|
|
15
|
+
// Replace this echo with your actual build commands
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
stage('Deploy') {
|
|
19
|
+
steps {
|
|
20
|
+
script {
|
|
21
|
+
// Sends intermediate UPDATE callbacks to the Cortex workflow,
|
|
22
|
+
// demonstrating that the callback URL can be called multiple times
|
|
23
|
+
// before the terminal SUCCESS/FAILURE.
|
|
24
|
+
def callbackUrl = params.callback_url
|
|
25
|
+
def updates = [
|
|
26
|
+
[progress: 33, message: 'Build complete — starting deploy'],
|
|
27
|
+
[progress: 66, message: 'Deploy in progress'],
|
|
28
|
+
[progress: 100, message: 'Deploy complete — recording in Cortex'],
|
|
29
|
+
]
|
|
30
|
+
updates.each { u ->
|
|
31
|
+
sleep 5
|
|
32
|
+
echo "Deploy progress: ${u.progress}%"
|
|
33
|
+
if (callbackUrl) {
|
|
34
|
+
def payload = """{"status":"UPDATE","message":"${u.message}","response":{"progress":"${u.progress}%"}}"""
|
|
35
|
+
sh """
|
|
36
|
+
curl -s -X POST '${callbackUrl}' \\
|
|
37
|
+
-H 'Content-Type: application/json' \\
|
|
38
|
+
-H "Authorization: Bearer \${CORTEX_API_KEY}" \\
|
|
39
|
+
-d '${payload}' || true
|
|
40
|
+
"""
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Replace the placeholder loop above with your actual deploy commands
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
stage('Record Deploy in Cortex') {
|
|
48
|
+
steps {
|
|
49
|
+
script {
|
|
50
|
+
def timestamp = sh(script: 'date -u +%Y-%m-%dT%H:%M:%SZ', returnStdout: true).trim()
|
|
51
|
+
def buildUrl = env.BUILD_URL ?: "${env.JENKINS_URL}job/${env.JOB_NAME}/${env.BUILD_NUMBER}/"
|
|
52
|
+
def payload = """{"sha":"${env.BUILD_NUMBER}","timestamp":"${timestamp}","environment":"production","type":"DEPLOY","title":"Triggered by Jenkins","url":"${buildUrl}","deployer":{"name":"Jenkins"},"customData":{"buildNumber":"${env.BUILD_NUMBER}","jobName":"${env.JOB_NAME}"}}"""
|
|
53
|
+
sh """
|
|
54
|
+
curl -s -f -X POST \\
|
|
55
|
+
"\${CORTEX_BASE_URL}/api/v1/catalog/${params.cortex_entity_tag}/deploys" \\
|
|
56
|
+
-H "Authorization: Bearer \${CORTEX_API_KEY}" \\
|
|
57
|
+
-H "Content-Type: application/json" \\
|
|
58
|
+
-d '${payload}' || true
|
|
59
|
+
"""
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
post {
|
|
65
|
+
always {
|
|
66
|
+
script {
|
|
67
|
+
if (params.callback_url) {
|
|
68
|
+
def status = currentBuild.currentResult == 'SUCCESS' ? 'SUCCESS' : 'FAILURE'
|
|
69
|
+
def buildUrl = env.BUILD_URL ?: "${env.JENKINS_URL}job/${env.JOB_NAME}/${env.BUILD_NUMBER}/"
|
|
70
|
+
def payload = """{"status":"${status}","message":"Jenkins pipeline ${status.toLowerCase()}","response":{"buildUrl":"${buildUrl}","buildNumber":"${env.BUILD_NUMBER}","jobName":"${env.JOB_NAME}"}}"""
|
|
71
|
+
def callbackUrl = params.callback_url
|
|
72
|
+
sh """
|
|
73
|
+
curl -s -f -X POST '${callbackUrl}' \\
|
|
74
|
+
-H 'Content-Type: application/json' \\
|
|
75
|
+
-H "Authorization: Bearer \${CORTEX_API_KEY}" \\
|
|
76
|
+
-d '${payload}'
|
|
77
|
+
"""
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
cortexapps_cli-1.36.0/cortexapps_cli/solutions/jenkins-deploy/_templates/trigger-jenkins-deploy.yaml
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
name: "Solution: Trigger Jenkins Deploy"
|
|
2
|
+
tag: jenkins-trigger-deploy
|
|
3
|
+
description: |
|
|
4
|
+
Triggers a Jenkins pipeline and waits for it to report completion back to Cortex,
|
|
5
|
+
registering a deploy event on the target entity. No inputs required — Jenkins
|
|
6
|
+
coordinates (url, job) are read from the entity's custom metadata.
|
|
7
|
+
isDraft: false
|
|
8
|
+
isRunnableViaApi: true
|
|
9
|
+
filter:
|
|
10
|
+
type: ENTITY
|
|
11
|
+
variables:
|
|
12
|
+
- slug: jenkins-job
|
|
13
|
+
type: STRING
|
|
14
|
+
defaultValue: ""
|
|
15
|
+
runResponseTemplate: |
|
|
16
|
+
# Jenkins Deploy — Complete
|
|
17
|
+
|
|
18
|
+
**Job:** [{{variables.jenkins-job}}](JENKINS_BASE_URL/job/{{variables.jenkins-job}})
|
|
19
|
+
|
|
20
|
+
**Cortex Deploys:** [see deploys for {{context.entity.tag}}](https://app.getcortexapp.com/admin/resources?tag={{context.entity.tag}})
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## How this workflow works
|
|
25
|
+
|
|
26
|
+
**1. Cortex read the entity's Jenkins configuration**
|
|
27
|
+
|
|
28
|
+
The workflow fetched `x-cortex-custom-metadata.jenkins` from this entity to find
|
|
29
|
+
the Jenkins URL and job name — no manual input required.
|
|
30
|
+
|
|
31
|
+
**2. Cortex triggered the Jenkins build**
|
|
32
|
+
|
|
33
|
+
It POSTed to the Jenkins `buildWithParameters` API with the callback URL and entity
|
|
34
|
+
tag in the POST body so Jenkins receives them as build parameters.
|
|
35
|
+
|
|
36
|
+
**3. Jenkins ran the pipeline**
|
|
37
|
+
|
|
38
|
+
The `cortex-deploy` pipeline runs three stages:
|
|
39
|
+
|
|
40
|
+
- **Build** — your build steps (replace `echo "Starting build..."` with your real commands)
|
|
41
|
+
|
|
42
|
+
- **Deploy** — your deploy steps, with intermediate `UPDATE` callbacks sent to Cortex
|
|
43
|
+
so you can track progress in real time; replace the placeholder loop with your real deploy
|
|
44
|
+
|
|
45
|
+
- **Record Deploy in Cortex** — POSTs a deploy event to `/api/v1/catalog/{tag}/deploys`,
|
|
46
|
+
recording build number, URL, and job name. This feeds the Deploy Health scorecard.
|
|
47
|
+
|
|
48
|
+
The `post { always { ... } }` block POSTs the final `SUCCESS` or `FAILURE` status to the
|
|
49
|
+
callback URL — which is how Cortex knows the workflow run is done.
|
|
50
|
+
|
|
51
|
+
**4. Cortex received the callback**
|
|
52
|
+
|
|
53
|
+
When Jenkins posted to the callback URL, Cortex marked this workflow run complete.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Adapting this to your own pipelines
|
|
58
|
+
|
|
59
|
+
1. Replace the placeholder `echo` in the **Build** stage and the progress loop in the
|
|
60
|
+
**Deploy** stage with your actual build and deploy commands
|
|
61
|
+
|
|
62
|
+
2. Add the Deploy, Record Deploy, and callback steps to any existing Jenkinsfile — they
|
|
63
|
+
only need the `CORTEX_API_KEY` and `CORTEX_BASE_URL` credentials plus the two build
|
|
64
|
+
parameters
|
|
65
|
+
|
|
66
|
+
3. Add `x-cortex-custom-metadata.jenkins` to your entity's catalog YAML with
|
|
67
|
+
`url` and `job` fields — no credentials here. If your Jenkins requires auth,
|
|
68
|
+
create a Cortex secret `jenkins_auth = base64(user:token)` and add
|
|
69
|
+
`Authorization: "Basic {{context.secrets.jenkins_auth}}"` to the workflow's
|
|
70
|
+
Trigger Jenkins Build action.
|
|
71
|
+
actions:
|
|
72
|
+
- name: Get Jenkins config
|
|
73
|
+
slug: get-jenkins-config
|
|
74
|
+
schema:
|
|
75
|
+
type: HTTP_REQUEST
|
|
76
|
+
httpMethod: GET
|
|
77
|
+
url: "https://api.getcortexapp.com/api/v1/catalog/{{context.entity.tag}}/custom-data/jenkins"
|
|
78
|
+
headers:
|
|
79
|
+
Authorization: "Bearer {{context.secrets.cortex_api_key}}"
|
|
80
|
+
Content-Type: application/json
|
|
81
|
+
integration: null
|
|
82
|
+
integrationAlias: null
|
|
83
|
+
outgoingActions:
|
|
84
|
+
- parse-jenkins-config
|
|
85
|
+
isRootAction: true
|
|
86
|
+
- name: Parse Jenkins config
|
|
87
|
+
slug: parse-jenkins-config
|
|
88
|
+
schema:
|
|
89
|
+
type: JQ
|
|
90
|
+
expression: |
|
|
91
|
+
.actions."get-jenkins-config".outputs.body.value as $j |
|
|
92
|
+
if ($j == null or $j.job == null) then
|
|
93
|
+
error("No Jenkins configuration found. Add x-cortex-custom-metadata.jenkins with url and job to this entity.")
|
|
94
|
+
else
|
|
95
|
+
{ job: $j.job }
|
|
96
|
+
end
|
|
97
|
+
outgoingActions:
|
|
98
|
+
- set-variables
|
|
99
|
+
isRootAction: false
|
|
100
|
+
- name: Set variables
|
|
101
|
+
slug: set-variables
|
|
102
|
+
schema:
|
|
103
|
+
type: SET_VARIABLES
|
|
104
|
+
variables:
|
|
105
|
+
- slug: jenkins-job
|
|
106
|
+
source:
|
|
107
|
+
path: actions.parse-jenkins-config.outputs.result.job
|
|
108
|
+
type: REFERENCE
|
|
109
|
+
outgoingActions:
|
|
110
|
+
- trigger-deploy
|
|
111
|
+
isRootAction: false
|
|
112
|
+
- name: Trigger Jenkins Build
|
|
113
|
+
slug: trigger-deploy
|
|
114
|
+
schema:
|
|
115
|
+
type: HTTP_REQUEST_ASYNC
|
|
116
|
+
httpMethod: POST
|
|
117
|
+
url: "JENKINS_BASE_URL/job/{{variables.jenkins-job}}/buildWithParameters"
|
|
118
|
+
integration: null
|
|
119
|
+
integrationAlias: null
|
|
120
|
+
headers:
|
|
121
|
+
Content-Type: application/x-www-form-urlencoded
|
|
122
|
+
Authorization: "Basic {{{context.secrets.jenkins_auth}}}"
|
|
123
|
+
payload: "callback_url={{{callbackUrl}}}&cortex_entity_tag={{context.entity.tag}}"
|
|
124
|
+
timeoutInSeconds: 60
|
|
125
|
+
outgoingActions: []
|
|
126
|
+
isRootAction: false
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
openapi: "3.0.0"
|
|
2
|
+
info:
|
|
3
|
+
title: Jenkins Demo
|
|
4
|
+
x-cortex-tag: jenkins-demo
|
|
5
|
+
x-cortex-type: service
|
|
6
|
+
x-cortex-description: Sample service for demonstrating deploy tracking via Jenkins pipelines.
|
|
7
|
+
x-cortex-definition: {}
|
|
8
|
+
x-cortex-groups:
|
|
9
|
+
- demo-jenkins-deploys
|
|
10
|
+
x-cortex-custom-metadata:
|
|
11
|
+
jenkins:
|
|
12
|
+
url: PLACEHOLDER_JENKINS_URL
|
|
13
|
+
job: cortex-deploy
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
tag: jenkins-deploy-health
|
|
2
|
+
name: Jenkins Deploy Health
|
|
3
|
+
description: Measures deployment cadence for services using Jenkins deploy tracking. Scoped to demo-jenkins-deploys group by default — remove the filter to apply to all services.
|
|
4
|
+
draft: false
|
|
5
|
+
notifications:
|
|
6
|
+
enabled: true
|
|
7
|
+
scoreDropNotificationsEnabled: true
|
|
8
|
+
exemptions:
|
|
9
|
+
enabled: true
|
|
10
|
+
autoApprove: false
|
|
11
|
+
evaluation:
|
|
12
|
+
window: 24
|
|
13
|
+
filter:
|
|
14
|
+
kind: GENERIC
|
|
15
|
+
types:
|
|
16
|
+
include:
|
|
17
|
+
- service
|
|
18
|
+
query: hasGroup("demo-jenkins-deploys")
|
|
19
|
+
ladder:
|
|
20
|
+
name: Default Ladder
|
|
21
|
+
levels:
|
|
22
|
+
- name: Bronze
|
|
23
|
+
rank: 1
|
|
24
|
+
description: Service has at least one recorded deployment in the last year.
|
|
25
|
+
color: "#CD7F32"
|
|
26
|
+
- name: Silver
|
|
27
|
+
rank: 2
|
|
28
|
+
description: Service has deployed within the last 30 days.
|
|
29
|
+
color: "#C0C0C0"
|
|
30
|
+
- name: Gold
|
|
31
|
+
rank: 3
|
|
32
|
+
description: Service has deployed within the last 7 days.
|
|
33
|
+
color: "#D7AC58"
|
|
34
|
+
rules:
|
|
35
|
+
- title: Has at least one deploy
|
|
36
|
+
description: At least one deployment has been recorded in the last year.
|
|
37
|
+
expression: deploys(lookback=duration("P1Y")).length > 0
|
|
38
|
+
weight: 1
|
|
39
|
+
level: Bronze
|
|
40
|
+
|
|
41
|
+
- title: Deployed in the last 30 days
|
|
42
|
+
description: A deployment was recorded within the past 30 days.
|
|
43
|
+
expression: deploys(lookback=duration("P30D")).length > 0
|
|
44
|
+
weight: 1
|
|
45
|
+
level: Silver
|
|
46
|
+
|
|
47
|
+
- title: Deployed in the last 7 days
|
|
48
|
+
description: A deployment was recorded within the past 7 days, indicating an active delivery cadence.
|
|
49
|
+
expression: deploys(lookback=duration("P7D")).length > 0
|
|
50
|
+
weight: 1
|
|
51
|
+
level: Gold
|