Interface de ligne de commande DevSecOps

DevSecOps CLI adopte des solutions de conformité sous IBM Cloud® DevSecOps mise en œuvre de référence; par exemple, les pipelines de référence de l'approche shift-left. Pour plus d'informations sur l'architecture de conformité en amont, voir DevSecOps avec Continuous Delivery.

Interface de ligne de commande

L'interface de ligne de commande utilise une structure à plusieurs parties sur la ligne de commande que vous devez spécifier dans l'ordre suivant:

cocoa <command> <subcommand> [options]
  1. L'appel de base vers l'interface de ligne de commande.

  2. La commande principale, qui correspond généralement à un service ou à un module utilisé dans le cadre de l'architecture « shift-left »; par exemple, « change request », « inventory » ou « tekton ».

  3. La sous-commande qui spécifie l'action à effectuer.

  4. Les options d'interface de ligne de commande requises par l'action. A condition qu'ils suivent les étapes 1 à 3, vous pouvez spécifier les options de l'interface de ligne de commande dans n'importe quel ordre.

Certaines commandes utilisent des variables d'environnement pour récupérer des clés API ou pour configurer la valeur d'une option qui n'a pas été fournie dans la ligne de commande. Vous devez exporter ces variables avant d'exécuter la commande.

Les options de ligne de commande peuvent accepter différents types de valeurs d'entrée, telles que des nombres, des chaînes de caractères, des valeurs booléennes, des tableaux et des objets JSON. Le type d'options dépend de la commande que vous spécifiez. Rendez-vous sur cocoa <command> <subcommand> --help pour découvrir les différents types d'options.

Relance des appels d'API ayant échoué

L'interface de ligne de commande Cocoa tente à nouveau tout appel d'API qui échoue avec un statut de réponse 5xx trois fois. Vous pouvez remplacer ce comportement en fournissant les variables d'environnement suivantes:

  • MAX_RETRY_ATTEMPTS-Nombre de nouvelles tentatives effectuées par l'interface de ligne de commande Cocoa avant qu'elle n'abandonne. Par exemple, MAX_RETRY_ATTEMPTS=5
  • RETRY_STATUS_CODE-Codes de statut de réponse pour lesquels la nouvelle tentative est effectuée. Par exemple, RETRY_STATUS_CODE=409,422,500 pour réessayer sur ces trois codes d'état.
export MAX_RETRY_ATTEMPTS=5                 # Retry API calls 5 times.
export RETRY_STATUS_CODE=409,422,500            # Retry API calls for response codes 409, 422 and 500.

Les nouvelles tentatives étant exponentiellement espacées dans le temps, la configuration de nouvelles tentatives plus élevées entraîne une plus grande séparation des nouvelles tentatives.

Temps écoulé pour l'exécution de la commande

L'interface de ligne de commande de cacao peut afficher le temps écoulé de n'importe quelle commande en secondes en définissant DISPLAY_ELAPSED_TIME sur une chaîne non vide comme suit:

export DISPLAY_ELAPSED_TIME=1`                # Display a snippet showing the total execution time of the cli command, example `Elapsed time: 5.32 seconds`

Commandes de l'interface de ligne de commande

Bien que l' ServiceNow soit documentée, elle n'est pas prise en charge par l'implémentation de référence par défaut IBM Cloud DevSecOps.

commandes de demande d'extraction de cacao

cocoa check pull-request-approval

Vérifie l'état d'approbation d'une Pull Request pour un hachage de commit. Si la Pull Request n'a pas été approuvée, un nouveau ticket d'incident est créé dans le dépôt spécifié. La commande peut identifier les demandes d'extraction d'urgence marquées avec un libellé. Dans ce cas, elle possède le code de sortie 0.

Variables d'environnement obligatoires :

GHE_TOKEN=              # Github Enterprise API Token (Optional if you are using --git-token-path field)
GHE_ORG=                # The owner of the repository
GHE_REPO=               # The repository name
INCIDENT_ISSUE_REPO=    # The incident issue repo name
EMERGENCY_LABEL=        # Emergency Label name
GIT_COMMIT=             # Commit hash of the Pull Request

Options :

--label                 # Label to add to possible pr incident issue
--git-provider          # SCM provider (GitHub)
--git-token-path        # (Optional) GitHub Token's path
--git-api-url           # (Optional) GitHub API url

Si vous utilisez GitHub, vous pouvez utiliser le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux sont fournis, --git-token-path et --git-api-url sont prioritaires.

Exécution de la commande :

cocoa check pull-request-approval

cocoa check pull-request-status

Vérifie le statut d'une demande d'extraction donnée et les paramètres des référentiels.

  • Règles de protection de branche : Règles permettant de désactiver l'envoi forcé, d'empêcher la suppression des branches, et le cas échéant, d'exiger des vérifications de statut avant la fusion. En plus de la validation traditionnelle basée sur la protection des branches, la commande prend également en charge la validation basée sur les jeux de règles pour les référentiels GitHub. Par défaut, la commande vérifie un ensemble de règles associé sur la branche dans le référentiel GitHub et revient à la validation traditionnelle basée sur la protection des branches si aucun ensemble de règles n'est trouvé. Si une règle de protection de branche traditionnelle et un ensemble de règles sont présents pour une branche, la commande ne prend en compte que l'ensemble de règles. Pour plus d'informations sur les jeux de règles GitHub, voir Configuration de votre référentiel GitHub
  • Vérification du statut des commits : services externes permettant d'attribuer aux commits un statut « error », « failure », « pending » ou « success », qui est ensuite pris en compte dans les pull requests impliquant ces commits.
  • Exécutions de vérification : Applications qui effectuent l'intégration continue, exécutent les services lint ou d'analyse de code et fournissent des commentaires en retour détaillés sur les validations.

Variables d'environnement obligatoires :

REQUIRED_CHECKS=        # Minimum required checks to be compliant set by client
GIT_BRANCH=             # Branch name for branch protection check
GIT_COMMIT=             # Commit hash of the Pull Request
GHE_TOKEN=              # Github Enterprise API Token (Optional if you are using --git-token-path field)
GHE_ORG=                # The owner of the repository
GHE_REPO=               # The repository name

Si vous utilisez GitHub, vous pouvez utiliser le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux paires GHE_TOKEN GH_URL et --git-token-path --git-api-url sont fournies, --git-token-path et --git-api-url sont prioritaires.

Pour spécifier le chemin du fichier de sortie pour les paramètres de protection de la branche, utilisez l'option '--branch-protection-settings-output-path Lorsque la branche est protégée, la représentation JSON des paramètres de protection de la branche du référentiel est enregistrée dans le chemin spécifié.

Pour spécifier le chemin du fichier de sortie des résultats de la validation de la protection de la branche, utilisez l'option '--branch-protection-markdown-output-path Lorsque la branche est protégée, les résultats de la validation sont enregistrés au format Markdown dans le chemin spécifié.

REQUIRED_CHECKSExemple :

  [
    {
      "type": "status",
      "name": "unit-test",
      "params": {
        "name": "travis/ci"
      }
    },
    {
      "type": "check-run",
      "name": "secret-detection",
      "params": {
        "name": "detect-secrets"
      }
    },
    {
      "type": "branch-protection",
      "name": "code review",
      "params": {
        "checks": ["travis/ci", "detect-secrets"]
      }
    },
    {
      "type": "check-run",
      "name": "open-source-license-scan",
      "params": {
        "name": "ossc/ci"
      }
    }
  ]

Exécution de la commande :

 cocoa check pull-request-status
 cocoa check pull-request-status \
    --branch-protection-settings-output-path <path/to/file> \
    --branch-protection-markdown-output-path <path/to/file>

Commandes de changement de demande de cacao

Les commandes cocoa change-request prennent en charge les fournisseurs de gestion des changements suivants:

  • ServiceNow V1
  • ServiceNow V3

Vous pouvez spécifier le fournisseur à l'aide de l'option --provider avec les valeurs suivantes: servicenow (par défaut) ou servicenow-v3.

Chaque fournisseur requiert une configuration de variable d'environnement différente:

  • servicenow:
    • SERVICENOW_TOKEN- ServiceNow V1 Jeton d'API
    • SERVICENOW_URL- URL 'API ServiceNow V1
  • servicenow-v3:
    • PNP_IBMCLOUD_API_KEY-La clé d'API permettant d'accéder aux noeuds finaux ServiceNow v3, si elle n'est pas fournie, revient à IAM_ACCESS_TOKEN
    • IAM_ACCESS_TOKEN- IBMCloud IAM OAuth Token
    • SERVICENOW_URL- URL 'API ServiceNow V3
  • github-enterprise:
    • GHE_TOKEN-Jeton GitHub Enterprise
    • GITHUB_CHANGE_MANAGEMENT_REPO- GitHub Change Management Repository
    • GITHUB_CHANGE_MANAGEMENT_ORG-Organisation de gestion des changements GitHub

cocoa change-request get

Récupère une demande de modification via l'API ServiceNow, puis l'enregistre dans un fichier ou l'affiche dans la console.

Variables d'environnement requises pour ServiceNow v1 ou v2:

SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL=   # ServiceNow API URL

Variables d'environnement requises pour ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires pour ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Variables d'environnement requises pour GitLab :

GITLAB_TOKEN= # Gitlab token. (Optional if you are using --git-token-path)
GITLAB_URL=   # Change management API URL (Optional if you are using --git-api-url)

Options :

--change-request-id='CHGXXXXXX'  # (Required) The Change Request ID to query from ServiceNow.
--output='filename.json'         # (Optional) If provided, the Change Request data will be written to this file.
--provider='servicenow'          # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')

Exécution de la commande :

# Read Change Request with number 'CHG123456' and output the JSON Data to the console.
$ cocoa change-request get --change-request-id='CHG123456'
# Read Change Request with number 'CHG123456' and output the JSON Data to the file named 'cr.json'.
$ cocoa change-request get --change-request-id='CHG123456' --output='cr.json'
# Read Change Request with number 'CHG123456' using the ServiceNow v3 API
$ cocoa change-request get --change-request-id='CHG123456' --provider='servicenow-v3'

cocoa change-request create

Crée une demande de changement et la publie sur l'API ServiceNow.

Deux méthodes d'utilisation :

  • Fournir toutes les zones de demande de changement requises à partir des options de l'interface de ligne de commande.

Options :

--assigned-to      # A ServiceNow validated user (defaults to value found in the pull request)
--system           # the name of the system in ServiceNow
--impact           # impact explanation (defaults to value found in th pull request)
--outage-duration  # duration of the outage (format: 'd HH:mm:ss' or 'none')
--priority         # change priority, valid options: critical, high, moderate, low, planning (defaults to value found in the pull request)
--environment      # the environment for the deployment
--purpose          # purpose explanation (default to value found in the pull request)
--description      # description of the change
--backout-plan     # description of the backout plan (defaults to the value found in the PR)
--planned-start    # planned start time of the change (required format: YYYY-MM-DD HH:mm:ss, e.g 2020-05-13 13:00:12, in UTC)
--planned-end      # planned end time of the change (required format: YYYY-MM-DD HH:mm:ss, e.g 2020-05-13 13:00:12, in UTC)
--deployment-ready # readiness for deployment (choices: 'yes', 'no', default: 'yes')
--type             # change request type, option: standard, emergency
--provider         # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', 'github-enterprise', 'gitlab' default: 'servicenow')
--pipeline-name    # (Optional) name of the pipeline used for identifying the pipeline
--pipeline-version # (Optional) version of pipeline used (value must match regular expression [0-9.]+)
  • Indiquer un nom de fichier à partir duquel faire une analyse syntaxique des données de la demande de changement. Le format JSON est attendu.

Options :

--file --f         # json file name to parse the cr data from
--provider         # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')

Exemple de fichier :

{
  "type": "emergency",
  "assignedto": "alexandra.szanto@ibm.com",
  "backoutplan": "rollback",
  "priority": "critical",
  "purpose": "bugfix",
  "description": "test description",
  "environment": "crn:v1:bluemix:public::ch-ctu-2::::",
  "impact": "bug",
  "system": "devopsinsights",
  "outageduration": "0 00:00:00",
  "plannedstart": "2020-10-05 14:48:00",
  "plannedend": "2020-10-05 14:49:00",
  "deploymentready": "yes",
}

Variables d'environnement requises pour ServiceNow v1 ou v2:

SERVICENOW_TOKEN=   # ServiceNow API Token
SERVICENOW_URL=     # ServiceNow API URL

Variables d'environnement requises pour ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires pour ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Exécution de la commande :

 cocoa change-request create --file=test.json

Ou

$ cocoa change-request create \
  --assigned-to=<your-ibm-email> \
  --system=<servicenow-configuration-item> \
  --impact=<impact description> \
  --outage-duration='0 00:00:00' \
  --priority=<the-priority> \
  --environment=<involved-environment> \
  --purpose=<purpose-explanation> \
  --description=<description-of-the-change> \
  --backout-plan=<description-of-a-backout-plan> \
  --planned-start='2020-05-13 13:00:12' \
  --planned-end='2020-05-13 13:10:12' \
  --deployment-ready=<yes/no> \
  --type=<change-type> \

mise à jour de la demande de modification du cacao

Mettre à jour une demande de changement existante en utilisant ServiceNow v3 API et l'imprimer sur la console.

Variables d'environnement requises pour ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL
CHANGE_REQUEST_ID=    # ID of the Change Request

Variables d'environnement supplémentaires pour ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Options :

--close-notes                    # (Optional) Any pertinent notes to add to change request closure.
--close-category                 # (Optional) Change request close notes (choices:  'successful', 'successful_issues', 'unsuccessful', 'cancelled')
--description                    # (Optional) Description of the change

Exécution de la commande :

# Update Change Request with sample close-notes, close category and description.
$ cocoa change-request update --close-notes="sample close-note" --close-category="successful" --description="sample change description"

Lorsque l'option description est utilisée, la commande remplace la description existante par la nouvelle description. Si l'utilisateur souhaite ajouter du contenu à la description originale, il devra extraire la description existante et l'ajouter manuellement avant d'utiliser cette commande.

cocoa change-request change-state-to-implement

Modifie le statut d'une demande de modification pour le faire passer à « implement » via l'API ServiceNow.

Options :

--provider         # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')

Variables d'environnement requises quel que soit le fournisseur:

CHANGE_REQUEST_ID=  # ID of the Change Request

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v1 ou v2:

SERVICENOW_TOKEN=    # ServiceNow API Token
SERVICENOW_URL=      # ServiceNow API URL

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Exécution de la commande :

 cocoa change-request change-state-to-implement

cocoa change-request close

Permet de clôturer une demande de modification via l'API « ServiceNow ». Vous pouvez joindre des « notes de clôture » à l'aide de l'option --close-notes et préciser la « catégorie de clôture » à l'aide de l'option --close-category.

Options :

--close-category  # Choices: "successful" (default), "successful_issues", "unsuccessful", "cancelled"
--close-notes     # String, defaults to "Deployment done."
--provider        # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')

Variables d'environnement requises quel que soit le fournisseur:

CHANGE_REQUEST_ID=  # ID of the Change Request

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v1 ou v2:

SERVICENOW_TOKEN=    # ServiceNow API Token
SERVICENOW_URL=      # ServiceNow API URL

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Exécution de la commande :

 cocoa change-request close

cocoa change-request check-approval

Permet de consulter le statut d'approbation d'une demande de modification. Si la demande de modification est urgente, la commande ne génère pas d'échec, mais demande une validation rétroactive.

Options :

--provider         # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')

Variables d'environnement requises quel que soit le fournisseur:

CHANGE_REQUEST_ID=  # ID of the Change Request

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v1 ou v2:

SERVICENOW_TOKEN=    # ServiceNow API Token
SERVICENOW_URL=      # ServiceNow API URL

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Exécution de la commande :

 cocoa change-request check-approval

cocoa change-request prepare

Crée les données relatives à la demande de modification et les affiche sur la console ou dans un fichier.

Variables d'environnement obligatoires :

GHE_TOKEN=              # Github Enterprise API Token (only required when parsing from pr)
GHE_ORG=                # The owner of the repository (optional, when --org is not provided)
GHE_REPO=               # The repository name (optional, when --repo is not provided)
EMERGENCY_LABEL=        # Emergency Label (optional, when --emergency-label is not provided)

Les zones suivantes peuvent faire l'objet d'une analyse syntaxique à partir du corps de demande d'extraction :

--assigned-to
--impact
--priority
--purpose
--backout-plan
--type
--customer-impact
--deployment-impact

Si ces paramètres sont fournis via l'option CLI, celle-ci remplace la valeur figurant dans la pull request. Si tous ces éléments sont fournis, « pr » n'est pas analysé; les éléments « --org », « --repo » et « GHE_TOKEN » ne sont alors pas nécessaires.

Options :

--org              # github organization where the parsed pr is (only needed if fields are parsed from pr, defaults to GHE_ORG)
--repo             # github repository name whre the parsed pr is (only needed if fields are parsed from pr, defaults to GHE_REPO)
--pr               # the pull request number to parse (mutually exclusive with sha and branch)
--sha              # infer the pr number from hash (mutually exclusive with pr and branch)
--branch           # infer PR based on the last merged pr into this branch (defaults to master)
--assigned-to      # A ServiceNow validated user (defaults to value found in the pull request)
--system           # the name of the system in ServiceNow
--impact           # implact explanation (defaults to value found in th pull request)
--outage-duration  # duration of the outage
--planned-start    # planned start time of the change (required format: YYYY-MM-DD HH:mm:ss, e.g 2020-05-13 13:00:12, in UTC)
--planned-end      # planned end time of the change (required format: YYYY-MM-DD HH:mm:ss, e.g 2020-05-13 13:00:12, in UTC)
--priority         # change priority, valid options: critical, high, moderate, low, planning (defaults to value found in the pull request)
--environment      # the environment for the deployment
--purpose          # purpose explanation (default to value found in the pull request)
--backout-plan     # description of the backout plan (defaults to the value found in the PR)
--deployment-ready # description of the change
--type             # change request type, option: standard, emergency
--emergency-label  # emergency label to look for in the pull request
--file             # file name to print the cr data to (optional, prints to stdout by default)
--service-environment # service environment of the change, valid options: production, pre_prod
--service-environment-detail # brief description of the service environment where change is deployed.
--pipeline-name    # (Required) name of the pipeline used (for example 'onepipeline | continuous-delivery')
--pipeline-version # version of pipeline used (for example '9.22.3')
--validation-record # Pre-prod change request numbers or NA if there is no pre-prod change request for the deployment

Exécution de la commande :

$ cocoa cr prepare \
  --org=<github-organization> \
  --repo=<github-repo-name> \
  --pr=<pr number>

cocoa change-request request-approval

Demande l'approbation des enregistrements à l'état Nouveau avec approbation non demandée. Lors de son exécution, l'enregistrement suit la procédure de validation manuelle.

Options :

--crid="<ID>"
# or
--change-request-id="<ID>"
--provider         # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v1 ou v2:

SERVICENOW_TOKEN=    # ServiceNow API Token
SERVICENOW_URL=      # ServiceNow API URL

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Exécution de la commande :

 cocoa change-request request-approval --crid="<insert-change-request-id-here>"

Ajout d'une pièce jointe de demande de changement de cacao

Ajoute une pièce jointe « Modification » à une demande de modification spécifique.

Options :

--description      # A more detailed description for the Change Task. [string]
--name             # Name of the Change Task. [string] [required]
--data             # Data for the Change Task or a path prefixed with @ to read the data from. [string] [default: "@/dev/stdin"]
--provider         # (Optional) Change Management service provider (choices: 'servicenow', 'github-enterprise', 'servicenow-v3', default: 'servicenow')

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v1 ou v2:

SERVICENOW_TOKEN=    # ServiceNow API Token
SERVICENOW_URL=      # ServiceNow API URL

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Exécution de la commande :

$ cocoa change-request attachment add "CHGXXXXXXX" \
        --name='<attachment-name>' \
        --data='<data-for-the-attachment>'
$ cat data.txt | cocoa change-request attachment add "CHGXXXXXXX" --name='<attachment-name>'
$ cocoa change-request attachment add "CHGXXXXXXX" \
        --name='<attachment-name>' \
        --data='@<path/to/file>'

obtention de la pièce jointe de la demande de changement de cacao

Récupère une pièce jointe spécifique à une demande de modification.

Options :

--provider         # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v1 ou v2:

SERVICENOW_TOKEN=    # ServiceNow API Token
SERVICENOW_URL=      # ServiceNow API URL

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Exécution de la commande :

 cocoa change-request attachment get "CHGXXXXXXX" "CTASKXXXXXXX"

Liste des pièces jointes de demande de changement de cacao

Listes : Pièces jointes à une demande de modification.

Options :

--provider         # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v1 ou v2:

SERVICENOW_TOKEN=    # ServiceNow API Token
SERVICENOW_URL=      # ServiceNow API URL

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Exécution de la commande :

 cocoa change-request attachment list "<insert-change-request-id-here>"

changement de cacao-demande de mise à jour de pièce jointe

Met à jour une pièce jointe relative à une modification dans une demande de modification spécifique.

Options :

--change-request-id  # The change request the change task belongs to [string] [required]
--change-task-id     # The change task id to be updated [string] [required]
--description        # A more detailed description for the Change Task. [string]
--data               # Data for the Change Task or a path prefixed with @ to read the data from. [string]
--provider           # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v1 ou v2:

SERVICENOW_TOKEN=    # ServiceNow API Token
SERVICENOW_URL=      # ServiceNow API URL

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=    # Github Enterprise API Token (only required when parsing from pr)
GITHUB_CHANGE_MANAGEMENT_ORG=   # The owner of the repository (optional, when --org is not provided)
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name (optional, when --repo is not provided)

Exécution de la commande :

$ cocoa change-request attachment update
        --change-request-id='CHGXXXXXXX' \
        --change-attachment-id='CTASKXXXXXXX' \
        --data='<data-for-the-attachment>' \
        --description='<description>'
$ cat data.txt | cocoa change-request attachment update --change-request-id='CHGXXXXXXX' --change-attachment-id='CTASKXXXXXXX' --data='@/dev/stdin'
$ cocoa change-request attachment update --change-request-id='CHGXXXXXXX' --change-attachment-id='CTASKXXXXXXX' --data='@<path/to/file>'

cacao demande de modification commentaire ajouter

Ajoute un commentaire à une demande de modification spécifique.

Options :

--comment          # Comment to add [string] [required]
--provider         # (Optional) Change Management service provider (choices: 'servicenow-v3', 'gitlab', 'github-enterprise', default: 'servicenow-v3')
--git-api-url      # (Optional) Git API URL [string]
--git-token-path   # (Optional) Git token path to read the secret from [string]

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitLab:

GITLAB_TOKEN=    # Gitlab Token
GITLAB_URL=      # Gitlab API URL
GITLAB_ORG=      # Gitlab ORG
GITLAB_REPO=     # Gitlab REPO Name

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=                        # Github Enterprise API Token
GITHUB_CHANGE_MANAGEMENT_ORG=     # The owner of the repository
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name

Exécution de la commande :

$ cocoa change-request comment add "CHGXXXXXXX" \
        --comment='This is a comment for the change request'
$ cocoa change-request comment add "CHGXXXXXXX" \
        --comment='Adding comment using GitLab provider' \
        --provider='gitlab'

liste de commentaires sur les demandes de modification concernant le cacao

Liste tous les commentaires relatifs à une demande de changement spécifique.

Options :

--provider         # (Optional) Change Management service provider (choices: 'servicenow-v3', 'gitlab', 'github-enterprise', default: 'servicenow-v3')
--git-api-url      # (Optional) Git API URL [string]
--git-token-path   # (Optional) Git token path to read the secret from [string]
--last             # (Optional) Retrieve only the last n comments [number]
--before           # (Optional) Filter comments created before this date (ISO 8601 format, e.g., YYYY-MM-DDTHH:MM:SSZ) [string]
--after            # (Optional) Filter comments created after this date (ISO 8601 format, e.g., YYYY-MM-DDTHH:MM:SSZ) [string]

Remarque :

  • Le paramètre « --last » doit être un nombre non négatif.
  • Les paramètres --before et --after acceptent les dates au format ISO 8601 et ne peuvent pas être dans le futur.
  • Si vous utilisez à la fois --before et --after, la date de --before doit être supérieure à celle de --after.
  • Les filtres sont appliqués dans l'ordre suivant : d'abord les filtres de date (--before, --after), puis --last pour limiter les résultats.

Variables d'environnement requises, si vous utilisez le fournisseur ServiceNow v3:

SERVICENOW_URL=       # ServiceNow API URL

Variables d'environnement supplémentaires, si vous utilisez le fournisseur ServiceNow v3:

PNP_IBMCLOUD_API_KEY= # API Key to access ServiceNow v3 endpoints, if not provided, falls back to IAM_ACCESS_TOKEN
IAM_ACCESS_TOKEN=     # Access token obtained from the IAM service

Variables d'environnement requises pour le fournisseur GitLab:

GITLAB_TOKEN=    # Gitlab Token
GITLAB_URL=      # Gitlab API URL
GITLAB_ORG=      # Gitlab ORG
GITLAB_REPO=     # Gitlab REPO Name

Variables d'environnement requises pour le fournisseur GitHub Enterprise:

GHE_TOKEN=                        # Github Enterprise API Token
GITHUB_CHANGE_MANAGEMENT_ORG=     # The owner of the repository
GITHUB_CHANGE_MANAGEMENT_REPO=    # The repository name

Exécution de la commande :

# List all comments for a change request
$ cocoa change-request comment list "CHGXXXXXXX"
# List comments using GitHub Enterprise provider
$ cocoa change-request comment list "CHGXXXXXXX" --provider='github-enterprise'
# Get only the last 5 comments
$ cocoa change-request comment list "CHGXXXXXXX" --last=5
# Get comments created before a specific date
$ cocoa change-request comment list "CHGXXXXXXX" --before="2026-03-20T10:00:00Z"
# Get comments created after a specific date
$ cocoa change-request comment list "CHGXXXXXXX" --after="2026-03-15T08:00:00Z"
# Get comments within a date range
$ cocoa change-request comment list "CHGXXXXXXX" --after="2026-03-15T08:00:00Z" --before="2026-03-20T10:00:00Z"
# Get the last 10 comments within a date range
$ cocoa change-request comment list "CHGXXXXXXX" --after="2026-03-15T08:00:00Z" --before="2026-03-20T10:00:00Z" --last=10

commandes de preuve de cacao

cocoa evidence format-summary

Formate le récapitulatif de preuves dans un format lisible par l'utilisateur. Il peut être introduit dans le contenu de la demande de changement.

Exécution de la commande :

$ cocoa evidence format-summary \
  --input=<filepath> \          # (default: -, referring to stdin) If present, the formatted evidence will be read from the given file.
  --output=<filepath>           # (default: -, referring to stdout) If present, the formatted evidence will be saved to the given file.
# Reading from stdin and printing to stdout:
$ cat raw-summary.json | cocoa evidence format-summary -i - -o - | tee formatted-summary.txt
$ cat raw-summary.json | cocoa evidence format-summary | tee formatted-summary.txt
# Reading to and from file:
$ cocoa evidence format-summary --input=raw-summary.json --output=formatted-summary.txt

Démarque des preuves de cacao-résumé

Formate le récapitulatif des informations collectées dans un format de démarque qui peut être fourni en tant que commentaire de demande d'extraction GitHub.

L'entrée est un récapitulatif brut et peut être dans l'un des deux formats suivants:

  • Résumé au format JSON.
  • Récapitulatif agrégé, qui est un tableau JSON de récapitulatifs d'application individuels.

Lorsqu'un récapitulatif agrégé est transmis en tant qu'entrée, la sortie regroupe le statut des informations collectées en fonction des applications dans les récapitulatifs.

Indicateur facultatif:

  • --detailed: un récapitulatif détaillé de la démarque est généré si l'indicateur est défini sur true (true par défaut, défini sur false pour un récapitulatif de la démarque tronquée).

Exécution de la commande :

$ cocoa evidence markdown-summary \
  --input=<filepath> \          # (default: -, referring to stdin) If present, the formatted evidence will be read from the given file.
  --output=<filepath>           # (default: -, referring to stdout) If present, the formatted evidence will be saved to the given file.
# Reading from stdin and printing to stdout:
$ cat raw-summary.json | cocoa evidence markdown-summary -i - -o - | tee markdown-summary.md
$ cat aggr-summary.json | cocoa evidence markdown-summary | tee markdown-summary.md
# Reading to and from file:
$ cocoa evidence markdown-summary --input=raw-summary.json --output=markdown-summary.md

commandes d'artefact de cacao

cocoa artifact upload

Télécharge un artefact dans les systèmes de back end spécifiés. Les systèmes de back end peuvent être différents types de casier de preuves, par exemple, Object Storage, GitHub ou DevOps Insights. Des éléments de verrouillage différents nécessitent des paramètres différents.

Options :

--backend           # (Required) Specifies the types of lockers we upload the artifact ('cos', 'git')
--pipeline-run-id   # The ID of the PipelineRun running the CLI command
--namespace         # Specifies the pipeline the evidence is collected from
--upload-path       # If present, this overrides the artifact name with the specified value
--is-summary        # If present, this uploads the artifact to the location where evidence summary is usually stored

Options pour git :

--git-token-path    #(Optional) Github Token's path
--git-api-url           #(Optional) Github API url

Variables d'environnement obligatoires :

PIPELINE_RUN_ID=    # Can be used instead of '--pipeline-run-id' option
NAMESPACE=          # Can be used instead of '--namespace' option

Variables d'environnement requises, si vous utilisez le fournisseur'git':

EVIDENCE_REPO_ORG=  # The Git repo org (Required if you are using 'git' backend)
EVIDENCE_REPO_NAME= # The Git repo name (Required if you are using 'git' backend)

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=          # Github Enterprise API Token (Optional if you are using --git-token-path)

Variables d'environnement requises, si vous utilisez Cloud Object Storage:

COS_API_KEY=        # Cloud Object Storage API Key (Required if you are using 'cos' backend)
COS_BUCKET_NAME=    # Bucket Name where the artifact will be uploaded in the COS Instance (Required if you are using 'cos' backend)
COS_ENDPOINT=       # The COS API Endpoint matching the region where the bucket is located (Required if you are using 'cos' backend)

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux paires GHE_TOKEN GH_URL et --git-token-path --git-api-url sont fournies, --git-token-path et --git-api-url sont prioritaires.

Exécution de la commande :

$ cocoa artifact upload
$ cocoa artifact upload \
  --backend=[choices: "git", "cos"] \ # e.g. --backend=cos,git
  --pipeline-run-id=<pipeline-run-id> # can be substituted by PIPELINE_RUN_ID
  --namespace=[choices: "ci", "cd"] \ # Pipeline type the evidence was collected from, can be substituted by NAMESPACE
  --is-summary        # If present, this uploads the artifact to the location where evidence summary is usually stored
  <file-path>

Les options de la ligne de commande peuvent également être définies à l'aide de variables d'environnement, à l'exception de backend et upload-path``.

Récupération d'un artefact

Vous pouvez récupérer des artefacts à partir de divers casiers de preuves, tels que Object Storage, GitHub, ou DevOps Insights, en utilisant la commande cocoa artifact get. Cette commande vous permet de récupérer des artefacts de différents types de casiers, chacun nécessitant des paramètres spécifiques.

La commande « cocoa artifact get » récupère un artefact à partir des backends spécifiés. Des éléments de verrouillage différents nécessitent des paramètres différents. Options :

--backend           # Specifies the types of locker to retrieve the artifact from ('cos', 'git')
--artifact-prefix   # Path where the artifact is present. To be used in COS only, not available in Git. (Use this or --artifact-path, can't be used together)
--artifact-path     # Absolute path on where the artifact is present.
--is-summary        # If present, this returns the merged summary from all the file paths.

Options pour git :

--git-token-path        # Github Token's path
--git-api-url           # (Optional) Github API url

Variables d'environnement obligatoires :

Variables d'environnement requises, si vous utilisez le fournisseur'git':

EVIDENCE_REPO_ORG=  # The Git repo org (Required if you are using 'git' backend)
EVIDENCE_REPO_NAME= # The Git repo name (Required if you are using 'git' backend)

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=          # Github Enterprise API Token (Optional if you are using --git-token-path)

Variables d'environnement requises, si vous utilisez Cloud Object Storage:

COS_API_KEY=               # Cloud Object Storage API Key (Required if you are using 'cos' backend)
COS_BUCKET_NAME=           # Bucket Name where the artifact will be uploaded in the COS Instance (Required if you are using 'cos' backend)
COS_ENDPOINT=              # The COS API Endpoint matching the region where the bucket is located (Required if you are using 'cos' backend)
BACKUP_COS_API_KEY=        # Cloud Object Storage API Key (Required while migrating from one COS bucket to another to read the old artifacts)
BACKUP_COS_BUCKET_NAME=    # Bucket Name where the artifact will be uploaded in the COS Instance (Required while migrating from one COS bucket to another to read the old artifacts)
BACKUP_COS_ENDPOINT=       # The COS API Endpoint matching the region where the bucket is located (Required while migrating from one COS bucket to another to read the old artifacts)

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux paires GHE_TOKEN GH_URL et --git-token-path --git-api-url sont fournies, --git-token-path et --git-api-url sont prioritaires.

Exécution de la commande :

$ cocoa artifact get
$ cocoa artifact get \
  --backend=[choices: "git", "cos"] \ # e.g. --backend=cos
  --artifact-path <file-path> \ # full path in case of git, cos can utilise --artifact-prefix <file-path>

Les options CLI peuvent également être définies à partir de variables d'environnement, à l'exception de backend et artifact-path / artifact-prefix.

cocoa set-status

Définit le statut d'une validation. L'implémentation en cours est testée dans GitHub. Voir la documentation sur les statutsGitHub.

Variables d'environnement obligatoires :

GHE_ORG=      # Github organization/username
GHE_REPO=     # Github repository
GHE_COMMIT=   # Github commit hash

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=    # Github token (Optional if you are using --git-token-path)

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux paires GHE_TOKEN GH_URL et --git-token-path --git-api-url sont fournies, --git-token-path et --git-api-url sont prioritaires.

Options pour git :

--git-token-path    #(Optional) GitHub token's path
--git-api-url       #(Optional) GitHub API url

Exécution de la commande :

$ cocoa set-status \
 --state="pending" \
 --targetURL="https://cloud.ibm.com/devops/pipelines/tekton/some-toolchain/runs/some-pipelinerun/lint/lint?env_id=ibm:yp:us-south" \
 --context="tekton/lint" \
 --description="Tekton linter is running."

commandes d'inventaire de cacao

cocoa inventory add

Ajoute une valeur au référentiel d'inventaire. Crée un fichier avec l'option « name »; s'il n'existe pas, il le remplace.

Variables d'environnement obligatoires :

GHE_ORG=     # Github Organization (required if --org option is not specified).
GHE_REPO=    # Github Repository (required if --repo option is not specified).

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=    # Github Enterprise API Token(Optional if you are using --git-token-path)

Options pour git :

--git-token-path    #(Optional) Github Token's path
--git-api-url           #(Optional) Github API url
Options pour Git
Option Description Type de valeur Requise ou facultative Valeur(s) possible(s) / Valeur par défaut / Remarques
artefact Nom de l'artefact créé pour l'application. Chaîne Obligatoire Si le type d'artefact est une image, utilisez le format suivant :
<static_name>:<version>@sha256:<sha256_digest>
OU
<static_name>@sha256:<sha256_digest>.

Si le type d'entrée n'est pas une image, utilisez un nom statique qui reste inchangé à chaque mise à jour de l'entrée.
version La version de l'application. Chaîne Obligatoire
url-référentiel L' URL pointant vers le dépôt de code source de l'application (de github ou GRIT/gitlab repository) Chaîne Obligatoire Il doit s'agir d'un dépôt de code source valide (comme github / gitlab) et non d'un dépôt docker (comme artifactory)
ID-EXÉCUTION-PIPELINE ID de l'exécution du pipeline. Chaîne Obligatoire Il est utilisé pour étendre la portée des preuves. Doit être l'identifiant ou l'uuid de l'exécution du pipeline. (Exemple de valeur : " f21321af-9084-4af3-80b8-4fb34143b7d9 )
Commit-sha Le commit du référentiel d'application à partir duquel l'artefact est construit. Chaîne Obligatoire Il doit s'agir d'un commit sha au format long (40 caractères en minuscules)
nom Nom de l'application à laquelle appartient l'artefact Chaîne Obligatoire C'est un domaine unique en son genre. Nous pouvons utiliser des sous-répertoires, comme name=subdir/foo, qui peuvent rendre votre référentiel d'inventaire mieux organisé.
numéro-génération Le numéro de la version. number Obligatoire Le numéro de construction est utilisé pour établir une corrélation entre l'artefact de construction et l'artefact de déploiement
org Organisation GitHub qui possède le référentiel d'inventaire. Chaîne Facultatif si la variable d'environnement GHE_ORG est définie
référentiel Nom du référentiel d'inventaire. Chaîne Facultatif si la variable d'environnement GHE_REPO est définie
artefacts d'application Contenu d'application arbitraire au format JSON Chaîne Facultatif Tout contenu supplémentaire peut être ajouté ici à des fins d'automatisation ou de flux de travail
type Type d'artefact. Peut être "image" pour les images, ou peut être une valeur statique pour les types génériques tels que les fichiers de déploiement, les diagrammes de barre, etc. Chaîne Obligatoire Valeurs possibles : ["image"] pour les artefacts de type image, "
pour les autres valeurs telles que ["helm-chart", "deployment-file"] ou toute autre valeur arbitraire
sha256 Le hachage sha256 de l'artefact. Chaîne Obligatoire Doit être du format " sha256:<64 character hash>
provenance URL pointant vers l'artefact (par exemple, une image construite). Chaîne Obligatoire Pour une entrée d'inventaire de type "image", la provenance doit être la même que le champ de l'artefact
signature Signature de l'artefact Chaîne Obligatoire
environnement Nom de l'environnement dans lequel l'entrée est ajoutée. Chaîne Facultatif Défaut : "master"
à partir d'un fichier Le nom du fichier qui contient les détails des entrées d'inventaire. Utilisez ce drapeau pour télécharger plusieurs entrées d'inventaire en une seule fois dans le répertoire d'inventaire. chaîne Facultatif Exemple : " path/to/file.json
git-fournisseur Fournisseur de services de contrôle de version Git. Chaîne Facultatif Valeur par défaut : "github"
' Valeurs possibles : ["github", "gitlab"]
Chemin-jeton-git Chemin du jeton Git à partir duquel le secret doit être lu Chaîne Facultatif si la variable d'environnement GHE_TOKEN est définie Exemple : " path/to/git-token
URL-api-git URL 'API Git Chaîne Facultatif Valeur par défaut : " https://<region>.git.cloud.ibm.com/api/v4
emplacement Emplacement de l'artefact dans d'autres registres, ainsi que l'emplacement de l'artefact sha256 Chaîne Facultatif Exemple : <environment>#<static_name>:<version>@sha256:<sha256_digest>.
Ce drapeau peut être fourni plusieurs fois.

Exécution de la commande :

$ cocoa inventory add \
  --artifact=us.icr.io/namespace/hello-compliance-app:20201217081811-master-b85e3d472e9cc35b429c39e8c3f9eb282738c20a@sha256:da36831d5154307ac9ca4b8d900df2da0c6c14754977c32479dc62994b5722d0 \
  --type=image \
  --sha256=sha256:786800e8e48938664fe2397ca14ab8dabd48f34656ef5cfda4143b4519cb714f \
  --name=hello-compliance-app \
  --repository-url=https://github.com/test-org/compliance-app-20201211 \
  --commit-sha=8e86dc4647ce28632103dce46b756c70d339349a \
  --version=v4 \
  --build-number=33 \
  --pipeline-run-id=f21321af-9084-4af3-80b8-4fb34143b7d9 \
  --git-token-path=./git-token \
  --org=test-org \
  --app-artifacts='{"app": "test", "some_value": "value"}' \
  --repo=compliance-inventory-repo
  --signature=owFNUX1IE3EY3vwAEy0VyoSJdkVWtu0+d3eTjNIIi0jETCSU3353cz+83V23myi2BlFgYiUFqSmZLciUzCJkRYJp9IEWFWXB0hAyrBQxEjIIuhFSf70vL8/7vM/zPi3JsaYEc+TnbqG8qrnTPDZ8w2WqiqwtacCghnQEgYQ5GzAkiLKO9PpoLyiwRtSsmugWNVGGIubE/D4bgpoNKXag60gCdo8oSYoVKl5VQsDAWIGqOkmcxAmSYHGO4AjC6gU+3eBxcYxICTRLijyEFOOiSR5SvMhBys2LLpIjWYqDJA6wwHYMeUG1+J8GL5CRW/TpVgFVG8VQ4vMAknE4BUA5OIoQGIKhKZwFkIeAdnECj+OCmxQADh2QoFmG5lkWUiTN8gJ0kDxPuxiWJAU8ekyvV6PegK54EcyGiqwDJItatg9Vy0D3a2IUpKg6UuS/T4KaaIC1fzuMDbfhmMGEvIY64FUxJ+Ew3PMU5SADgdNmKs5kTjBlrtsQ99iyY49nns8o6jsXWgkjPiYahClxVcrK5Flngumz2j7YdmD0ecutytsvxxNPHflKlRV2RyqD69NjC6Smji9XuukFyZ+lvM18gUr7F4NXge9YyZPik411tc1n9bKO/hDz7oGaX/ur94OnNHiwOG6n5ZsrsCsvtyvmkH4zOWlrRWuL7fzgj9zlcCTAhtu2LbeGLNfv3Ju0Jc9PZPk7Pm3Ov2CW+2xj8ReX6ooGamZ610yqRM/+8Qo2XnOeyZzbVKgs+f2+9unpJOve4Tmla+PdqftDWkHPm9Vq3nsyZ2DUkmP/nTb7qNw5l2SfWtiSemJx9nLaYOpx6amlOT18aeIwJQhHg1XOjJF9r18NXQvPuL9rH5tSQqbGhyN/AA== \
  --location=stage#stage-us.icr.io/namespace/hello-compliance-app:20201217081811-master-b85e3d472e9cc35b429c39e8c3f9eb282738c20a@sha256:da36831d5154307ac9ca4b8d900df2da0c6c14754977c32479dc62994b5722d0
$ cocoa inventory add \
  --environment=staging \
  --artifact=foo-helm-chart/foo/chart.yaml \
  --repository-url=https://github.com/test-org/compliance-app-20201211 \
  --provenance=https://github.com/test-org/compliance-app-20201211/foo-helm-chart/foo/chart.yaml \
  --commit-sha=786800e8e48938664fe2397ca14ab8dabd48f34656ef5cfda4143b4519cb714f \
  --build-number=33 \
  --pipeline-run-id=f21321af-9084-4af3-80b8-4fb34143b7d9 \
  --version=v4 \
  --name=foo-app-helm-chart \
  --sha256=sha256:9106cdf8c0f5c110f1cdf65825edd195927cdb439db8767791ac2011c2d41894 \
  --signature=9106cdf8c0f5c110f1cdf65825edd195927cdb439db8767791ac2011c2d41894 \
  --type=helm-chart
$ cocoa inventory add --from-file multi-artifacts.json \
  --environment=environment  \
  --org=test \
  --repo=repository

Utilisation de l'option --from-file

Lorsque l'option --from-file est utilisée, la commande permet d'ajouter plusieurs entrées en une seule fois. Cette option attend un fichier JSON contenant un tableau d'objets, où chaque objet du tableau doit avoir les mêmes champs que ceux décrits dans le tableau d'options ci-dessus. Les exigences en matière de champs (obligatoires ou facultatifs) restent les mêmes que lors de l'utilisation des options individuelles de la ligne de commande. La seule différence est qu'au lieu de fournir ces champs en tant qu'arguments de ligne de commande, ils sont lus à partir du fichier JSON.

Les options --environment, --org, et --repo doivent être fournies sur la ligne de commande et s'appliquent à toutes les entrées du fichier.

Exemple de structure de fichier JSON :

[
  {
    "artifact": "us.icr.io/namespace/hello-compliance-app:20201217081811-master-b85e3d472e9cc35b429c39e8c3f9eb282738c20a@sha256:da36831d5154307ac9ca4b8d900df2da0c6c14754977c32479dc62994b5722d0",
    "type": "image",
    "sha256": "sha256:786800e8e48938664fe2397ca14ab8dabd48f34656ef5cfda4143b4519cb714f",
    "name": "hello-compliance-app",
    "repository-url": "https://github.com/test-org/compliance-app-20201211",
    "commit-sha": "8e86dc4647ce28632103dce46b756c70d339349a",
    "version": "v4",
    "build-number": 33,
    "pipeline-run-id": "f21321af-9084-4af3-80b8-4fb34143b7d9",
    "provenance": "us.icr.io/namespace/hello-compliance-app:20201217081811-master-b85e3d472e9cc35b429c39e8c3f9eb282738c20a@sha256:da36831d5154307ac9ca4b8d900df2da0c6c14754977c32479dc62994b5722d0",
    "signature": "owFNUX1IE3EY3vwAEy0VyoSJdkVWtu0+d3eTjNIIi0jETCSU3353cz+83V23myi2BlFgYiUFqSmZLciUzCJkRYJp9IEWFWXB0hAyrBQxEjIIuhFSf70vL8/7vM/zPi3JsaYEc+TnbqG8qrnTPDZ8w2WqiqwtacCghnQEgYQ5GzAkiLKO9PpoLyiwRtSsmugWNVGGIubE/D4bgpoNKXag60gCdo8oSYoVKl5VQsDAWIGqOkmcxAmSYHGO4AjC6gU+3eBxcYxICTRLijyEFOOiSR5SvMhBys2LLpIjWYqDJA6wwHYMeUG1+J8GL5CRW/TpVgFVG8VQ4vMAknE4BUA5OIoQGIKhKZwFkIeAdnECj+OCmxQADh2QoFmG5lkWUiTN8gJ0kDxPuxiWJAU8ekyvV6PegK54EcyGiqwDJItatg9Vy0D3a2IUpKg6UuS/T4KaaIC1fzuMDbfhmMGEvIY64FUxJ+Ew3PMU5SADgdNmKs5kTjBlrtsQ99iyY49nns8o6jsXWgkjPiYahClxVcrK5Flngumz2j7YdmD0ecutytsvxxNPHflKlRV2RyqD69NjC6Smji9XuukFyZ+lvM18gUr7F4NXge9YyZPik411tc1n9bKO/hDz7oGaX/ur94OnNHiwOG6n5ZsrsCsvtyvmkH4zOWlrRWuL7fzgj9zlcCTAhtu2LbeGLNfv3Ju0Jc9PZPk7Pm3Ov2CW+2xj8ReX6ooGamZ610yqRM/+8Qo2XnOeyZzbVKgs+f2+9unpJOve4Tmla+PdqftDWkHPm9Vq3nsyZ2DUkmP/nTb7qNw5l2SfWtiSemJx9nLaYOpx6amlOT18aeIwJQhHg1XOjJF9r18NXQvPuL9rH5tSQqbGhyN/AA==",
    "app-artifacts": "{\"app\": \"test\", \"some_value\": \"value\"}",
    "locations": {
      "stage":"stage-us.icr.io/namespace/hello-compliance-app:20201217081811-master-b85e3d472e9cc35b429c39e8c3f9eb282738c20a@sha256:da36831d5154307ac9ca4b8d900df2da0c6c14754977c32479dc62994b5722d0",
      "prod":"prod-us.icr.io/namespace/hello-compliance-app:20201217081811-master-b85e3d472e9cc35b429c39e8c3f9eb282738c20a@sha256:da36831d5154307ac9ca4b8d900df2da0c6c14754977c32479dc62994b5722d0"
   },
  },
  {
    "artifact": "foo-helm-chart/foo/chart.yaml",
    "repository-url": "https://github.com/test-org/compliance-app-20201211",
    "provenance": "https://github.com/test-org/compliance-app-20201211/foo-helm-chart/foo/chart.yaml",
    "commit-sha": "786800e8e48938664fe2397ca14ab8dabd48f34656ef5cfda4143b4519cb714f",
    "build-number": 34,
    "pipeline-run-id": "f21321af-9084-4af3-80b8-4fb34143b7d9",
    "version": "v4",
    "name": "foo-app-helm-chart",
    "sha256": "sha256:9106cdf8c0f5c110f1cdf65825edd195927cdb439db8767791ac2011c2d41894",
    "signature": "9106cdf8c0f5c110f1cdf65825edd195927cdb439db8767791ac2011c2d41894",
    "type": "helm-chart",
  }
]

En utilisant --from-file, il est possible de fournir des emplacements pour l'artefact dans d'autres registres. La commande s'attend à ce que le champ locations soit un objet dont la clé est <environment> et la valeur <static_name>:<version>@sha256:<sha256_digest> dans ce format.

cocoa inventory get

Obtient une entrée à partir du référentiel d'inventaire. La cible peut être une version spécifique ou un environnement. Utilisez --version ou --environment, et seulement l'une de ces deux options. Si l'option --property est manquante, tout le contenu de l'entrée d'inventaire est imprimé.

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=    # Github Enterprise API Token (Optional if you are using --git-token-path)

Options pour git :

--git-token-path       #(Optional) Github Token's path
--git-api-url          #(Optional) Github API url

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux paires GHE_TOKEN GH_URL et --git-token-path --git-api-url sont fournies, --git-token-path et --git-api-url sont prioritaires.

Par défaut, l'interface de ligne de commande de chaque appel garantit que vous utilisez une version à jour d'un casier Git. Ce comportement peut être désactivé en définissant COCOA_USE_CACHE sur n'importe quelle valeur sauf 0, false, no ou n. Dans ce cas, l'interface de ligne de commande utilise son cache interne pour rechercher des informations collectées (beaucoup plus rapidement), mais les résultats peuvent être périmés.

Exécution de la commande :

# Uses the environment as target, and pretty-prints only a given property of the inventory entry to the console.
$ cocoa inventory get \
  --org='Github-ID' \
  --repo='compliance-inventory-repo' \
  --entry='hello-compliance-app' \
  --environment='master' \
  --property='name'
# Uses the version as target, and pretty-prints the whole content of the inventory entry to the console.
$ cocoa inventory get \
  --org='Github-ID' \
  --repo='compliance-inventory-repo' \
  --entry='hello-compliance-app' \
  --version='v1'

cocoa inventory get-sha

Récupère le hachage du dernier commit associé à une étiquette ou à un environnement dans le référentiel d'inventaire. Utilisez --label ou --environment, et seulement l'une de ces deux options.

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=    # Github Enterprise API Token (Optional if you are using --git-token-path)

Options pour git :

--git-token-path    #(Optional) Github Token's path
--git-api-url       #(Optional) Github API url

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si des paires GHE_TOKEN GH_URL et --git-token-path --git-api-url sont fournies, --git-token-path et --git-api-url sont prioritaires.

Exécution de la commande :

# Get the latest commit hash of the staging branch
$ cocoa inventory get-sha \
  --org='Github-ID' \
  --repo='compliance-inventory-repo' \
  --environment='staging'
# Get the commit hash of the "pipeline-run-id" label
$ cocoa inventory get-sha \
  --org='Github-ID' \
  --repo='compliance-inventory-repo' \
  --label='pipeline-run-id'

cocoa inventory label

L'utilisation d'une étiquette d'inventaire permet d'ajouter ou de déplacer des étiquettes au sein d'un élément d'inventaire, en ciblant le dernier commit sur une branche ou une autre étiquette.

Options :

--org          # The Github organisation which owns the inventory repository.
--repo         # The name of the inventory repository.
--environment  # The inventory branch ( not required for deleting a cocoa inventory label)
--to-label     # Another label in the inventory that can be referenced or removed. ( not required for deleting a cocoa inventory label )

Variables d'environnement obligatoires :

GHE_ORG=     # Github Organization (required if --org option is not specified).
GHE_REPO=    # Github Repository (required if --repo option is not specified).

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=    # Github Enterprise API Token (Optional if you are using --git-token-path)

Options pour git :

--git-token-path    #(Optional) Github Token's path
--git-api-url           #(Optional) Github API url

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux paires GHE_TOKEN GH_URL et --git-token-path --git-api-url sont fournies, --git-token-path et --git-api-url sont prioritaires.

Exécution de la commande :

# label the latest state on "staging" branch
$ cocoa inventory label add \
  --org='Github-ID' \
  --repo='compliance-inventory-repo' \
  --environment='staging' \
  "new-label-to-add"
# attach a label to another label (to the same commit)
$ cocoa inventory label add \
  --org='Github-ID' \
  --repo='compliance-inventory-repo' \
  --to-label="some-label" \
  "new-label-to-add"
# move or create the `label-to-move` label to another label (to the same commit)
$ cocoa inventory label move \
  --org='Github-ID' \
  --repo='compliance-inventory-repo' \
  --to-label="some-label" \
  "label-to-move"
# delete the `label-to-delete` label from the inventory
$ cocoa inventory label delete \
  --org='Github-ID' \
  --repo='compliance-inventory-repo' \
  "label-to-delete"

cocoa inventory promote

Effectue la promotion d'entrées à partir de l'inventaire d'un environnement à un autre. L'environnement source peut être une branche ou une étiquette.

Variables d'environnement obligatoires :

GHE_ORG=          # Github Organization (required if --org option is not specified).
GHE_REPO=         # Github Repository (required if --repo option is not specified).
PIPELINE_RUN_ID=  # Can be used instead of --pipeline-run-id (either the option or the variable is required).

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=    # Github Enterprise API Token (Optional if you are using --git-token-path)

Options pour git :

--git-token-path    #(Optional) Github Token's path
--git-api-url           #(Optional) Github API url

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux sont fournis, --git-token-path et --git-api-url sont prioritaires.

Exécution de la commande :

$ cocoa inventory promote \
  --org='Github-ID' \
  --repo='compliance-inventory-repo' \
  --source='master' \
  --target='prod' \
  --priority='Critical' \
  --assigned-to='employee@ibm.com' \
  --description='desc' \
  --purpose='purpose' \
  --impact='impact' \
  --customer-impact='impact' \
  --deployment-impact='small' \
  --backout-plan='rollback'

validation de l'inventaire du cacao

Valide les entrées présentes dans un répertoire d'inventaire (ou un fichier JSON). L'environnement (branch) ou le label (tag) du repo d'inventaire peuvent être validés.

Les options à valider sont les suivantes (au moins un des drapeaux doit être utilisé)

  1. en utilisant l'indicateur " --environment- qui prend une branche comme valeur et valide toutes les entrées qu'elle contient.
  2. en utilisant l'indicateur '--label- qui prend la balise comme valeur et valide toutes les entrées qu'elle contient.
  3. en utilisant l'option '--from-file- qui prend le chemin d'un fichier JSON contenant les entrées de l'inventaire (au format avec trait d'union).

Facultatif :

  1. Si un nom de fichier inventoryignore personnalisé doit être utilisé, l'indicateur '--inventory-ignore-file-name peut être utilisé pour remplacer la valeur par défaut.
  2. Si un répertoire d'inventaire cloné existe déjà et que vous souhaitez que la commande l'utilise, vous pouvez fournir le chemin du répertoire d'inventaire cloné à l'aide de l'option '--inventory-path

Options obligatoires :

--org          # The Github organisation which owns the inventory repository.
--repo         # The name of the inventory repository.
--environment  # The inventory branch to validate
--label        # label in the inventory, that will be validated

Variables d'environnement (optionnelles et peuvent être utilisées à la place de --org --repo et --git-token-path)

GHE_ORG=                    # Can be used instead of --org (either the option or the variable is required)
GHE_REPO=                   # Can be used instead of --repo (either the option or the variable is required)
GHE_TOKEN=    # Github Enterprise API Token (Optional if using --git-token-path)

Exécution de la commande :

$ cocoa inventory validate \
   --org "Github-ID" \
   --repo "inventory-repo" \
   --git-token-path="$INVENTORY_TOKEN_PATH" \
   --label "$latest_tag" \
   --inventory-path "${DIRECTORY_NAME}"

inventaire cacao get-delta

Obtenir le delta entre les commits du référentiel d'inventaire. Il est possible d'obtenir les commentaires des pairs dans le delta entre deux commentaires.

Variables d'environnement obligatoires :

GHE_ORG=     # Github Organization (required if --org option is not specified).
GHE_REPO=    # Github Repository (required if --repo option is not specified).

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=    # Github Enterprise API Token(Optional if you are using --git-token-path)

Options pour git :

--git-token-path    #(Optional) Github Token's path
--git-api-url           #(Optional) Github API url
Options pour Git
Option Description Type de valeur Requise ou facultative Valeur(s) possible(s) / Valeur par défaut / Remarques
de-sha L'engagement de départ pour calculer le delta à partir de Chaîne facultatif
à partir de l'étiquette L'étiquette à utiliser comme début d'engagement pour calculer le delta à partir de Chaîne facultatif
to-sha L'engagement final de calculer le delta jusqu'à Chaîne facultatif
à l'environnement Le commit HEAD de la branche environnement pour calculer le delta jusqu'à Chaîne facultatif
à-étiqueter L'étiquette indiquant l'engagement final pour calculer le delta jusqu'à Chaîne facultatif
org Organisation GitHub qui possède le référentiel d'inventaire. Chaîne Facultatif si la variable d'environnement GHE_ORG est définie
référentiel Nom du référentiel d'inventaire. Chaîne Facultatif si la variable d'environnement GHE_REPO est définie
git-fournisseur Fournisseur de services de contrôle de version Git. Chaîne Facultatif Valeur par défaut : "github"
' Valeurs possibles : ["github", "gitlab"]
Chemin-jeton-git Chemin du jeton Git à partir duquel le secret doit être lu Chaîne Facultatif si la variable d'environnement GHE_TOKEN est définie Exemple : " path/to/git-token
URL-api-git URL 'API Git Chaîne Facultatif Valeur par défaut : " https://<region>.git.cloud.ibm.com/api/v4
delta Indicateur pour calculer le delta Booléen facultatif false
delta-suppression Indicateur pour calculer les suppressions delta Booléen facultatif false
liste d'inventaire Indicateur pour calculer la liste d'inventaire complète Booléen facultatif false
évaluation par les pairs Drapeau pour calculer les engagements de l'examen par les pairs Booléen facultatif false
chemin d'accès à l'inventaire Chemin optionnel du répertoire d'inventaire. Si cette condition est remplie, le répertoire d'inventaire n'est pas cloné à l'intérieur de la commande Chaîne facultatif
chemin d'accès au fichier d'inventaire ignoré Chemin d'accès facultatif pour le fichier d'ignorance de l'inventaire Chaîne facultatif
chemin d'accès au fichier de l'inventeur précédent Chemin d'accès facultatif au fichier d'ignorance de l'inventaire du déploiement précédent Chaîne facultatif

Exécution de la commande :

$ cocoa inventory get-delta \
  --git-provider=github \
  --git-token-path=./git-token \
  --org=test-org \
  --repo=compliance-inventory-repo \
  --git-api-url=<git-api-url> \
  --to-sha 534ff2bbbf0291e10f3b1f6aa409d8de059bbe27 \
  --from-sha e54b5aa12ccb687020ac04b16d489b5a04f90399 \
  --inventory-ignore-file-path=/path/to/current/.inventoryignore \
  --previous-inventory-ignore-file-path=/path/to/previous/.inventoryignore \
  --delta \
  --delta-deletion \
  --inventory-list \
  --peer-review

mise à jour de l'inventaire du cacao - localisations

Mise à jour de l'emplacement d'une entrée/d'un artefact dans le référentiel d'inventaire.

Variables d'environnement obligatoires :

GHE_ORG=     # Github Organization (required if --org option is not specified).
GHE_REPO=    # Github Repository (required if --repo option is not specified).

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=    # Github Enterprise API Token(Optional if you are using --git-token-path)

Options pour git :

--git-token-path    #(Optional) Github Token's path
--git-api-url           #(Optional) Github API url
Options pour Git
Option Description Type de valeur Requise ou facultative Valeur(s) possible(s) / Valeur par défaut / Remarques
nom Nom de l'application à laquelle appartient l'artefact Chaîne Obligatoire
org Organisation GitHub qui possède le référentiel d'inventaire. Chaîne Facultatif si la variable d'environnement GHE_ORG est définie
référentiel Nom du référentiel d'inventaire. Chaîne Facultatif si la variable d'environnement GHE_REPO est définie
environnement Nom de l'environnement dans lequel l'entrée est ajoutée. Chaîne Facultatif Défaut : "master"
git-fournisseur Fournisseur de services de contrôle de version Git. Chaîne Facultatif Valeur par défaut : "github"
' Valeurs possibles : ["github", "gitlab"]
Chemin-jeton-git Chemin du jeton Git à partir duquel le secret doit être lu Chaîne Facultatif si la variable d'environnement GHE_TOKEN est définie Exemple : " path/to/git-token
URL-api-git URL 'API Git Chaîne Facultatif Valeur par défaut : " https://<region>.git.cloud.ibm.com/api/v4
emplacement Emplacement de l'artefact dans d'autres registres, ainsi que l'emplacement de l'artefact sha256 Chaîne Facultatif Exemple : <environment>#<static_name>:<version>@sha256:<sha256_digest>.
Ce drapeau peut être fourni plusieurs fois.

Exécution de la commande :

$ cocoa inventory update-locations \
  --name=hello-compliance-app \
  --git-token-path=./git-token \
  --org=test-org \
  --repo=compliance-inventory-repo \
  --location=stage#stage-us.icr.io/namespace/hello-compliance-app:20201217081811-master-b85e3d472e9cc35b429c39e8c3f9eb282738c20a@sha256:da36831d5154307ac9ca4b8d900df2da0c6c14754977c32479dc62994b5722d0 \
  --location=prod#prod-us.icr.io/namespace/hello-compliance-app:20201217081811-master-b85e3d472e9cc35b429c39e8c3f9eb282738c20a@sha256:da36831d5154307ac9ca4b8d900df2da0c6c14754977c32479dc62994b5722d0

commandes d'incident de cacao

processus incident de cacao

Cette commande traite les résultats d'analyse fournis et crée des incidents dans le référentiel fourni pour chaque vulnérabilité. S'il existe déjà des problèmes pour les paires objet-incident, cela ne crée pas de nouveaux problèmes.

Si --set-grace-period est défini, il crée des problèmes avec le délai de grâce défini, ou met à jour les problèmes existants, afin de disposer d'un délai de grâce.

Le délai de grâce est défini sur 15 jours s'il est activé. Si le délai d'exemption ou de grâce est défini sur un problème d'incident, la case à cocher répertorie le problème, mais ne le marque pas comme une erreur.

Les exceptions sont configurées dans CR VA ou vous pouvez soumettre l'incident ou la CVE pour une approbation d'exemption. S'il est approuvé, vous pouvez éditer le problème d'incident (paramètre Excempt: **true**) et le lier à la demande approuvée.

Fichiers de résultats d'analyse actuellement pris en charge:

  • Container Registry Balayage VA (option --type va)
  • CRA Vulnerability Scan (option --type cra)
  • Scan CRA « CIS » (option --type cra-cis)
  • Rayons X (option --type xray)
  • OWASP ZAP (option --type owasp-zap)
  • Interface utilisateur OWASP ZAP (option --type owasp-zap-ui)
  • Verrou tournant (en option --type twistlock)
  • Analyses effectuées par le système CIMS (Container Image Multi-Scanner) (option --type cims)
  • Examen par les pairs (option --type peer-review)
  • GoLang Scan de sécurité (option --type gosec)
  • SonarQube Numérisation (option --type sonarqube)
  • Réparer le scan (option --type mend)
  • Réparer le scan SAST (option --type mend-sast)
  • Tchekhov (option --type checkov)
  • CRA Vulnerability Scan for Terraform (option --type cra-tf)
  • Analyse de sécurité Terraform (option --type tfsec)
  • Scanner Fips (option --type fips-scanner)
  • Détecter les secrets (option --type detect-secrets)
  • Sysdig (option --type sysdig)
  • CycloneDX (option --type cyclonedx)
  • Grype (option --type grype)

Pour plus d'informations sur Container Registry VA et le format des résultats, voir Vulnerability Advisor pour IBM Cloud Container Registry. Pour plus d'informations sur le scanner de vulnérabilité CRA, voir la documentation Configuration de Code Risk Analyzer.

Syntaxe :

$ cocoa incident process \
  <options> \
  <path to result file>

Options :

--type             # (Required) Scan type [choices: "cra", "va", "xray", "peer-review", "gosec","owasp-zap", "owasp-zap-ui", "sonarqube", "twistlock", "cims", "mend","mend-sast", "checkov", "cra-tf", "tfsec", "fips-scanner", "contrast-sast","detect-secrets", "sysdig", "cyclonedx", "grype", "cra-cis"]
--subject          # (Required) Subject of scans (repo, or image name)
--drilldown-url    # (Required) URL to the point where the incident was found (can be a pipeline run, a commit hash or an image URL with digest)
--set-grace-period # Should the created incidents have Grace period set
--git-provider     # Git service provider [github] Default is "github"
--org              # The incident issue repository org
--repo             # The incident issue repository name
--label            # Label(s) to add to the incident issue (optional) e.g: --label=foo --label=bar
--assignee         #(Optional) Assignee(s) for the incident issue (github username) e.g: --assignee=jane-doe --assignee=john-smith
--git-token-path   #(Optional) Github Token's path
--git-api-url      #(Optional) Github API url
--custom-exempt-label # (Optional) Defines the custom label with which the incident issue has been marked as exempted
--custom-comment   # (Optional) Additional text to be added to issue comments
--format           # (Optional) Format of the output ("list", "json", default: "list")

Variables d'environnement obligatoires :

INCIDENT_REPO_ORG=        # Can be used instead of --org (either the option or the variable is required)
INCIDENT_REPO_NAME=       # Can be used instead of --repo (either the option or the variable is required)

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=                # Github Enterprise API Token (Optional if you are using --git-token-path)

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux sont fournis, --git-token-path et --git-api-url sont prioritaires.

Valeurs renvoyées :

  • Si aucun problème n'est détecté ou si tous les problèmes détectés ont un délai d'exemption ou de grâce défini, la commande se ferme avec le statut zéro.
  • Si l'un des problèmes détectés n'a pas d'exemption ou de délai de grâce défini, la commande se ferme avec un statut différent de zéro.
  • If format == list-La commande répertorie les adresses URL de problème d'incident trouvées ou créées en fonction du fichier de résultats et du sujet.
  • If format == json-La commande imprime un fichier JSON contenant un tableau d'objets de constatations (informations de problème supplémentaires) pour chacun des problèmes détectés, créés et fermés automatiquement en fonction du fichier de résultats et du sujet.
  • Structure de l'objet JSON de constatations correspondant à un problème:
{
 "id": string,
 "due_date": string,
 "severity": ("high", "medium", "low", "critical, "informational"),
 "first_found": "string" (optional),
 "url": string,
 "found_status": ("new", "existing", "autoclosed", "readonly"),
 "has_exempt": boolean
}

Exécution de la commande :

$ cocoa incident process \
  --type va \
  --subject us.icr.io/service-image \
  --drilldown-url us.icr.io/service-image@sha256:digest \
  path/to/scan-result.json

processus d'incident de cacao-existant

Cette commande crée des problèmes d'incident dans le référentiel fourni pour les scénarios où un fichier d'analyse n'est pas disponible. Généralement, ces scénarios sont des échecs non liés à la vulnérabilité tels que l'échec du test d'unité, l'échec de la protection de la branche, l'échec du test d'acceptation et l'échec de la signature d'image. Ces échecs ne seraient pas des vulnérabilités, mais ils seraient un écart par rapport à la situation de conformité. Si des problèmes existent déjà pour les combinaisons incident-sujet-outil, la commande ne crée pas de nouveaux problèmes. Par défaut, l'évaluation de la gravité high est définie sur les problèmes créés.

Si --set-due-date est défini, la commande crée des problèmes ou met à jour les problèmes existants avec des dates d'échéance. Les dates d'échéance sont calculées à partir du délai de grâce du problème, en fonction de la gravité.

Si l'indicateur --close-resolved-issues est défini, la commande recherche les problèmes ouverts avec le même outil, le même sujet et le même ID d'incident que l'exécution en cours. Si des problèmes sont détectés, alors que --current-status a été transmis en tant que success, la commande ferme ces problèmes.

Si --read-only est défini, la commande ne crée pas de nouveaux problèmes et ne modifie pas les problèmes existants. Les résultats sont traités et les problèmes existants sont collectés pour les résultats. La sortie contient la liste des URL des questions qui sont censées être suivies dans les questions si le mode lecture seule n'est pas activé.

Syntaxe :

cocoa incident process-legacy \
  <options>

Options :

--type             # (Required) Tool type
--subject          # (Required) Subject of scans (repo, or image name)
--drilldown-url    # (Required) URL to the point where the incident was found (can be a pipeline run, a commit hash or an image URL with digest)
--set-grace-period # Should the created incidents have Grace period set
--git-provider     # Git service provider [github] Default is "github"
--org              # The incident issue repository org
--repo             # The incident issue repository name
--label            # Label(s) to add to the incident issue (optional) e.g: --label=foo --label=bar
--assignee          #(Optional) Assignee(s) for the incident issue (github username) e.g: --assignee=jane-doe --assignee=john-smith
--git-token-path    #(Optional) Github Token's path
--git-api-url           #(Optional) Github API url
--close-resolved-issues # (Optional) Checking and closing resolved issues
--pipeline-run-url      # (Optional) The url to the pipeline run running the CLI command
--is-prod          # (Optional) Flag for whether or not the command was run in production environment. Default is false.
--read-only        # (Optional) Process result file in read-only mode (return found and existing issues, do not create new ones, set processed status to failure or success). Default is false
--custom-exempt-label # (Optional) Defines the custom label with which the incident has been marked as exempted
--incident-id         # (Required) Defines the incident ID to be used for creating legacy incident
--current-status      # (Required) Current status to be treated as success or failure [choices: "success", "failure"]
--custom-comment   # (Optional) Additional text to be added to issue comments
--format           # (Optional) Format of the output ("list", "json", default: "list")
--additional-comment  # (Optional) Additional comment for the issue on every run

VARIABLES D'ENVIRONNEMENT :

INCIDENT_REPO_ORG=    # Can be used instead of --org (either the option or the variable is required)
INCIDENT_REPO_NAME=   # Can be used instead of --repo (either the option or the variable is required)
# Required Environment Variables, if using GitHub:
GHE_TOKEN=    # Github Enterprise API Token (Optional if using --git-token-path)

Si vous utilisez github, vous pouvez utiliser le champ --git-token-path pour définir votre jeton GitHub et le champ --git-api-url pour définir l' URL l'API GitHub Enterprise ( https://<region>.git.cloud.ibm.com/api/v4 par défaut) au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux paires GHE_TOKEN GH_URL et --git-token-path --git-api-url sont toutes deux fournies, --git-token-path et --git-api-url sont prioritaires.

Valeurs renvoyées :

  • La commande répertorie les URL de problème d'incident trouvées ou créées si --current-status a été transmis en tant que failure. La commande ferme également les URL de problème d'incident correspondant à la même combinaison incident-outil-sujet si le --current-status a été transmis en tant que failure.
  • En mode --read-only, la commande répertorie les détails des incidents trouvés si aucun problème n'est détecté pour cet incident.
  • Si aucun problème n'est détecté ou si tous les problèmes détectés ont un libellé d'exemption défini, la commande se ferme avec le statut zéro.
  • Si aucun libellé d'exemption n'est défini pour l'un des problèmes détectés, la commande prend fin avec un statut différent de zéro.
  • En mode --read-only, si un nouvel incident sans problème est détecté, la commande se ferme avec un statut différent de zéro.
  • If format == list-La commande répertorie les URL de problème d'incident trouvées ou créées si --current-status a été transmis en tant que failure.
  • If format == json-La commande imprime un fichier JSON contenant un tableau d'objets de constatations (informations de problème supplémentaires) pour chacun des problèmes détectés, créés et fermés automatiquement en fonction du fichier de résultats et du sujet.
  • Structure de l'objet JSON de constatations correspondant à un problème:
{
 "id": string,
 "due_date": string,
 "severity": ("high", "medium", "low", "critical, "informational"),
 "first_found": "string" (optional),
 "url": string,
 "found_status": ("new", "existing", "autoclosed", "readonly"),
 "has_exempt": boolean
}

Exécution de la commande :

$ cocoa incident process-legacy \
   --type jest \
   --subject us.icr.io/service-image \
   --drilldown-url us.icr.io/service-image@sha256:digest \
   --incident-id com.ibm.unit_tests_master \
   --current-status success \
   --close-resolved-issues

évaluation de l'incident de cacao

Evaluer le statut des problèmes en fonction de due_date et de l'étiquette d'exemption et générer les résultats des problèmes.

Syntaxe :

$ cocoa incident evaluate \
  <options> \
  <filePath>

Options :

--git-provider         # Git service provider [github] Default is "github"
--org                  # The incident issue repository org
--repo                 # The incident issue repository name
--filePath             # Path to the JSON file that contains issues to be evaluated
--git-token-path       # (Optional) Github Token's path
--git-api-url          # (Optional) Github API url
--custom-exempt-label  # (Optional) Defines the custom label with which the incident issue has been marked as exempted
--is-prod              # (Optional) Whether or not the command was run in prod environment
--format               # (Optional) Format of the output ("list", "json", default: "list")

Variables d'environnement obligatoires :

INCIDENT_REPO_ORG=        # Can be used instead of --org (either the option or the variable is required)
INCIDENT_REPO_NAME=       # Can be used instead of --repo (either the option or the variable is required)

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=                # Github Enterprise API Token (Optional if you are using --git-token-path)

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et le champ --git-api-url pour définir l' URL # GitHub Enterprise API au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si les deux sont fournis, --git-token-path et --git-api-url sont prioritaires.

Valeurs renvoyées :

  • Si tous les problèmes détectés ont un délai d'exemption ou de grâce défini, la commande prend fin avec le statut zéro.
  • Si l'un des problèmes détectés n'a pas d'exemption ou de délai de grâce défini, la commande se ferme avec un statut différent de zéro.
  • Tableau JSON de constatations.
  • Structure de l'objet JSON de constatations correspondant à un problème.
json
{
  "id": string,
  "due_date": string,
  "severity": ("high", "medium", "low", "critical, "informational"),
  "first_found": "string" (optional),
  "url": string,
  "found_status": ("new", "existing", "autoclosed", "readonly"),
  "has_exempt": boolean
}

Exécution de la commande :

$ cocoa incident evaluate \
  --org \
  --repo \
  --git-provider \
  --git-token-path \
  --filePath

incident de cacao état de mise à jour

Mettre à jour l'état de la question de l'incident à open ou close en fonction de l'état actuel de l' URL de la question de l'incident spécifiée.

Extrait de code :

$ cocoa incident update-state \
  <options>

Options :

Spécifiez les variables et valeurs facultatives suivantes pour fournir plus de détails sur votre problème d'incident CoCa.

--org             # The incident issue repo org
--repo            # The incident issue repo name
--git-provider    # Git service provider [github, gitlab] Default is "github"
--git-token-path  # (Optional) Github Token's path
--git-api-url     # (Optional) Github API url
--issue-url       # Issue URL whose state is to be updated
--to-state        # target state for the issue to be updated [choices: "open", "close"]
--comment         # (Optional) Comment to be added to the issue being updated
--update-exempt   # (Optional) Flag to update state of exempted issues, default: false

Variables d'environnement obligatoires :

Vous devez fournir les variables d'environnement suivantes et leurs valeurs si vous n'avez pas utilisé les variables facultatives --org et --repo précédemment.

INCIDENT_REPO_ORG=        # Must be used if --org optional variable is not used.
INCIDENT_REPO_NAME=       # Must be used if ---repo optional variable is not used.

Si votre git-provider est github, utilisez la variable d'environnement suivante :

GHE_TOKEN=                # Github Enterprise API Token (Optional if you are using --git-token-path)
GH_URL=                   # Github API url (Optional if you are using --git-api-url)

Vous pouvez également utiliser les variables facultatives --git-token-path et --git-api-url pour fournir le chemin d'accès au jeton Github et les valeurs d' URL s de l'API. Les variables optionnelles ont une priorité plus élevée lorsque les deux sont fournies, --git-token-path et --git-api-url sont prioritaires.

Valeurs renvoyées :

  • La commande se termine avec le code de retour 0 si la mise à jour de l'état de la question est réussie.
  • La commande se termine avec le code de retour 1 si la mise à jour de l'état de la question n'est pas réussie.

Exécution de la commande :

$ cocoa incident update-state \
  --org \
  --repo \
  --git-provider \
  --git-token-path \
  --git-api-url \
  --issue-url \
  --comment \
  --to-state

commandes de verrouillage de cacao

Télécharger les preuves et les pièces jointes sur Cloud Object Storage à des fins d'archivage. Elle est effectuée automatiquement lorsque les variables d'environnement suivantes sont présentes:

  • COS_ENDPOINT: noeud final où le compartiment Cloud Object Storage est accessible.
  • COS_BUCKET_NAME: nom du compartiment Cloud Object Storage.
  • COS_API_KEY: clé d'API IBM Cloudou clé d'API d'ID de servicequi dispose d'un accès en écriture au compartiment Cloud Object Storage.
  • BACKUP_COS_ENDPOINT: noeud final où le compartiment Cloud Object Storage est accessible.
  • BACKUP_COS_BUCKET_NAME: Nom du seau d' BackupCloud Object Storage.
  • BACKUP_COS_API_KEY: Une clé API d' IBM Cloud ou une clé API d'ID de service qui dispose d'un accès en lecture au compartiment d' Cloud Object Storage.
  • IBM_AUTH_ENDPOINT: noeud final où la clé d'API peut être utilisée pour générer un jeton IAM(valeur par défaut: https://iam.cloud.ibm.com/identity/token){: external}.

Cacao locker asset add < URI >

Ajoute un actif au casier d'informations collectées. Il affiche les informations relatives à l'actif si l'actif spécifié existe.

Options :

--type             # Type of the asset ( All types are supported )
--version          # Show version number
--format           # Output format ("id", "json", default: "id")
--related          # The ID of a related asset (default: [])
--date             # Asset creation date
--details          # Additional asset details, as key=value pairs (default: [])
--origin           # Additional details about the origin of the asset, as key=value pairs (default: [])
--dry-run          # Shows what would be added to the locker (default: false)

Utilisez l'indicateur --dry-run si vous ne souhaitez rien ajouter au casier et que vous souhaitez vérifier ce qui doit être ajouté au casier.

Le type de l'actif peut être spécifié avec l'indicateur --type.

Le paramètre uri peut être n'importe quel URIvalide, mais quelques formats sont traités spécialement:

  • Si le schéma uri est docker (c'est-à-dire qu'il commence par docker://), la commande utilise l'indicateur --type=image
  • Si le schéma uri est git ou que le chemin se termine par un suffixe .git, la commande utilise l'indicateur --type=commit

Lorsque type est image ou commit, l'URI doit correspondre aux modèles suivants:

  • Pour image, l'URI doit contenir le résumé de l'image (par exemple, docker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777)

Lorsque type est autre chose que image ou commit, l'indicateur --type doit être explicitement transmis.

Des détails supplémentaires peuvent être ajoutés à l'actif à l'aide de l'indicateur --details, qui accepte les paires key=value.

Des détails supplémentaires sur l'origine de l'actif peuvent être fournis à l'aide de l'indicateur --origin, qui accepte les paires key=value.

Certaines variables d'environnement sont automatiquement sélectionnées pour ajouter des détails sur l'origine de l'actif:

  • Le paramètre TOOLCHAIN_CRN est identique à la spécification de --origin toolchain_crn=$TOOLCHAIN_CRN
  • Le paramètre PIPELINE_ID est identique à la spécification de --origin pipeline_id=$PIPELINE_ID
  • Le paramètre PIPELINE_RUN_ID est identique à la spécification de --origin pipeline_run_id=$PIPELINE_RUN_ID

L'indicateur --date peut être utilisé pour remplacer la date de création de l'actif (par défaut, l'heure en cours). Il accepte toute chaîne acceptée par Date.parse.

Les actifs apparentés peuvent être ajoutés à l'aide de l'indicateur --related (pour plusieurs actifs apparentés, l'indicateur peut être spécifié plusieurs fois). Les actifs peuvent être spécifiés avec leur ID interne ou par leur URI. Tous les identifiants des actifs liés (de l'arbre entier jusqu'au premier actif) seront ajoutés au champ parents dans le json de l'actif.

Par défaut, le format id (indicateur --format ) imprime l'ID interne de l'actif créé. Avec le format json, l'ensemble de l'actif va être imprimé, en tant qu'objet JSON.

Exécution de la commande permettant d'ajouter une validation Git:

$ cocoa locker asset add 'https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee' \
                         --details tag=v1.2.3

Exemple de sortie :

b5bbbbb55555b5555b555b55b5555bb5b555b5b555bb5b55bbb5555fbbbbb

Exécution de la commande permettant d'ajouter une image Docker:

$ cocoa locker asset add docker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777 \
                         --origin "job_name=my job" \
                         --related https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee \
                         --format json

Exemple de sortie :

{
   "version": "1.1",
   "id": "0000000011111111222222223333333344444444555555556666666677777777",
   "uri": "docker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777",
   "origin": {
    "job_name": "my job",
    "toolchain_crn": "crn:v1:bluemix:public:toolchain:au-syd:a/111111111111c2f2222222222b22a7a63:ac2a22a2-2a2a-2222-aaa2-222aa22a2a2a::",
    "pipeline_run_id": "f333b3bc-3333-3fea-3333-333d3a3b33b3",
    "pipeline_id": "444aaa4a-b4c4-4444-4f4b-aa4444a444a4"
   },
   "details": {
    "registry": "us.icr.io",
    "name": "foo/bar",
    "tag": "v1.2.3",
    "digest": "0000000011111111222222223333333344444444555555556666666677777777"
   },
   "date": "2021-07-15T14:26:06.301Z",
   "type": "image",
   "related": [
    "b5bbbbb55555b5555b555b55b5555bb5b555b5b555bb5b55bbb5555fbbbbb"
   ],
   "parents": [
    "b5bbbbb55555b5555b555b55b5555bb5b555b5b555bb5b55bbb5555fbbbbb"
   ]
}

Exécution de la commande permettant d'ajouter une édition:

$ cocoa locker asset add release:my-app@v1.2.3 \
                         --type generic \
                         --date 2021-06-01T12:00:00 \
                         --related docker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777

Exemple de sortie :

36d8852458adf44ab236c99beb69d7070d461d39480bc6b8ef7c771bee93cb49%

Cacaoyer locker asset get < URI >

Extrait un actif du casier d'informations collectées.

Options :

--type             # Type of the asset
--version          # Show version number
--format           # Output format ("id", "json", default: "id")

Exécutez la commande suivante :

 cocoa locker asset get release:my-app@v1.2.3 --format json

Exemple de sortie :

{
   "version": "1.1",
   "id": "36d8852458adf44ab236c99beb69d7070d461d39480bc6b8ef7c771bee93cb49",
   "uri": "release:my-app@v1.2.3",
   "origin": {
    "toolchain_crn": "crn:v1:bluemix:public:toolchain:au-syd:a/111111111111c2f2222222222b22a7a63:ac2a22a2-2a2a-2222-aaa2-222aa22a2a2a::",
    "pipeline_run_id": "f333b3bc-3333-3fea-3333-333d3a3b33b3",
    "pipeline_id": "444aaa4a-b4c4-4444-4f4b-aa4444a444a4"
   },
   "details": {
    "sha": "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee",
    "repository": <repository-url>,
    "tag": "v1.2.3"
   },
   "date": "2021-07-15T14:26:06.301Z",
   "type": "image",
   "related": ["0000000011111111222222223333333344444444555555556666666677777777"],
   "parents": ["0000000011111111222222223333333344444444555555556666666677777777", "b5bbbbb55555b5555b555b55b5555bb5b555b5b555bb5b55bbb5555fbbbbb"]
}
 cocoa locker asset get docker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777 --format json

Exemple de sortie :

{
   "version": "1.1",
   "id": "0000000011111111222222223333333344444444555555556666666677777777",
   "uri": "docker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777",
   "origin": {
    "toolchain_crn": "crn:v1:bluemix:public:toolchain:au-syd:a/111111111111c2f2222222222b22a7a63:ac2a22a2-2a2a-2222-aaa2-222aa22a2a2a::",
    "pipeline_run_id": "f333b3bc-3333-3fea-3333-333d3a3b33b3",
    "pipeline_id": "444aaa4a-b4c4-4444-4f4b-aa4444a444a4"
   },
   "details": {
    "sha": "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee",
    "repository": <repository-url>,
    "tag": "v1.2.3"
   },
   "date": "2021-07-15T14:26:06.301Z",
   "type": "image",
   "related": [],
   "parents": ["b5bbbbb55555b5555b555b55b5555bb5b555b5b555bb5b55bbb5555fbbbbb"]
}
 cocoa locker asset get https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee --format json

Exemple de sortie :

{
   "version": "1.1",
   "id": "0000000011111111222222223333333344444444555555556666666677777777",
   "uri": "docker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777",
   "origin": {
    "toolchain_crn": "crn:v1:bluemix:public:toolchain:au-syd:a/111111111111c2f2222222222b22a7a63:ac2a22a2-2a2a-2222-aaa2-222aa22a2a2a::",
    "pipeline_run_id": "f333b3bc-3333-3fea-3333-333d3a3b33b3",
    "pipeline_id": "444aaa4a-b4c4-4444-4f4b-aa4444a444a4"
   },
   "details": {
    "sha": "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee",
    "repository": <repository-url>,
    "tag": "v1.2.3"
   },
   "date": "2021-07-15T14:26:06.301Z",
   "type": "image",
   "related": [],
   "parents": []
}

Récapitulatif des actifs du casier de cacao get < URI >

Collecte un récapitulatif des informations collectées pour l'actif donné à partir du casier d'informations collectées.

Options :

--scope                   # (Required) Pipeline run ID of the CI piepline where the asset is built
--environment             # (Required) Name of the environment from which evidences are fetched, if the `service-environment` is `pre_prod`
                            This value must be the same as the `target-environment`. Or, if `service-environment` is `prod`, then this value must be the same as the `source-environment`
--service-environment     # Service environment of the asset get summary in deployed environment
                            (choices: 'pre_prod', 'dev', 'prod',  default: 'pre_prod')
--latest                  # Fetches the latest evidence summary of the asset for the `service-environment`.
                            The summary of the scope passed-in using `--scope` will be excluded. Currently supported for `dev` environment only.

Exécutez la commande suivante :

 cocoa locker asset summary get https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee \
  --scope 11a1aa11-1a11-11a1-aa11-a11a1a1111a1 \
  --environment prod \
  --service-environment prod

Exécutez la commande pour récupérer le dernier résumé des preuves à l'exclusion de celui de la portée transmise à l'aide de --scope:

 cocoa locker asset summary get https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee \
  --scope 11a1aa11-1a11-11a1-aa11-a11a1a1111a1 \
  --environment dev \
  --service-environment dev \
  --latest

Cacao locker asset list < URI >

Répertorie les actifs associés à partir du casier d'informations collectées.

Options :

--type             # Type of the asset
--version          # Show version number
--format           # Output format ("id", "json", default: "id")

Exécutez la commande suivante :

 cocoa locker asset list release:my-app@v1.2.3 --format id --type generic

Exemple de sortie :

1122211111122222111111111111111111111111111111666661111111111111
2222222222555552222222222222222333333222222222222222222222222222
3333333337777773333333333333333333333333333333344444433333333333

Exécutez la commande en utilisant le format json combiné à jq:

 cocoa locker asset list release:my-app@v1.2.3 --format json --type generic | jq -r '.[].uri'

Exemple de sortie :

release:my-app@v1.2.3
docker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777
https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee

ajout de preuves de casier de cacao

Ajoute des informations collectées au casier d'informations collectées.

Le casier d'informations collectées peut être spécifié à l'aide d'indicateurs. Pour plus d'informations, voir Commandes de casier de cacao.

La configuration de l'evidence peut être effectuée à l'aide des indicateurs suivants :

  • --evidence-type: chaîne qui identifie le type des informations collectées (par exemple, com.ibm.unit_test)
  • --evidence-type-version: chaîne qui identifie le schéma des détails des informations collectées (par exemple, 1.0.0, v2, etc.)

Certains indicateurs facultatifs peuvent également être spécifiés:

  • --date: date de création des informations collectées (par défaut, l'horodatage en cours), accepte une chaîne qui peut être analysée avec Date.parse.
  • --details: les détails des informations collectées peuvent être spécifiés sous forme de paires key=value, l'indicateur peut être spécifié plusieurs fois (par exemple, --details result=success --details foo=bar, etc.).
  • --origin: des détails sur l'origine des informations collectées peuvent être spécifiés à l'aide de paires key=value, par exemple --origin job_id=123, etc.
  • --asset: indique les actifs (par leur URI ou leur ID interne) qui sont pertinents pour les informations collectées. Voir les commandes cocoa locker asset. L'indicateur peut être spécifié plusieurs fois. L'actif doit déjà être présent dans le casier.
  • --attachment: indique les fichiers joints aux informations collectées. Chaque pièce jointe doit pointer vers un fichier existant et chaque nom de pièce jointe doit être unique (c'est-à-dire que --attachment a/foo.json --attachment b/foo.json n'est pas autorisé).
  • --attachment-url: indique les URL des pièces jointes qui sont déjà stockées dans le casier d'informations collectées. Chaque URL doit pointer vers une pièce jointe unique, afin d'éviter les doublons. Cet indicateur peut être spécifié plusieurs fois pour inclure plusieurs URL.
  • --issue: liste des URL de problème, qui peut être utilisée pour suivre les activités liées aux résultats. L'indicateur peut être transmis plusieurs fois.
  • --findings-path: utilisez ce chemin pour transmettre le tableau de constatations JSON qui est la sortie de la commande de processus d'incident.
  • --scope: identificateur unique qui peut être utilisé pour corréler des informations collectées provenant de plusieurs sources.
  • --comment-on-issues: ajoutez un commentaire avec des détails sur les informations collectées créées aux problèmes d'incident fournis à l'aide de l'indicateur --issue
    • Etant donné que les problèmes peuvent se produire sous github, le fournisseur est analysé à partir des URL de problème
    • Chaque problème doit provenir du même référentiel
    • Les URL de problème doivent correspondre au modèle suivant:
      • https://<host>/<owner>/<name>/issues/<issue number>-pour github
    • Variables d'environnement requises pour accéder au référentiel de problèmes:
      • si les URL pointent vers des problèmes github:
        • GH_URL: facultatif, la valeur par défaut est https://<region>.git.cloud.ibm.com/api/v4
        • GHE_TOKEN

Informations d'étiquette pour une pièce jointe en preuve JSON :

Chaque section de pièce jointe dans le JSON de preuve possède une propriété label pour contenir les métadonnées sur la pièce jointe. Une valeur par défaut est attribuée à l'étiquette et cette valeur dépend du fait que l'entrée de la pièce jointe est un chemin de fichier ou une URL de pièce jointe. Passez une étiquette personnalisée en ajoutant ::label=<value> à la fin du chemin de la pièce jointe ou de l’URL de la pièce jointe.

Exemples :

  • --attachment path/to/attachment::label=label_name- Crée une pièce jointe en utilisant le fichier dans path/to/attachment et définit la valeur de l'étiquette sur label_name. Si l'étiquette n'est pas transmise, le nom du fichier est utilisé comme valeur d'étiquette par défaut.

  • --attachment-url url/of/attachment::label=label_name- Utilise la pièce jointe spécifiée dans le attachment-url et définit la valeur de l'étiquette sur label_name. Si l'étiquette n'est pas transmise, la valeur de l'étiquette est une chaîne vide par défaut.

Certaines variables d'environnement sont automatiquement sélectionnées pour ajouter des détails sur l'origine de l'actif:

  • Le paramètre TOOLCHAIN_CRN est identique à la spécification de --origin toolchain_crn=$TOOLCHAIN_CRN
  • Le paramètre PIPELINE_ID est identique à la spécification de --origin pipeline_id=$PIPELINE_ID
  • Le paramètre PIPELINE_RUN_ID est identique à la spécification de --origin pipeline_run_id=$PIPELINE_RUN_ID

Le comportement de la commande peut être modifié à l'aide des indicateurs suivants:

  • --dry-run: n'ajoute rien au casier, mais indique ce qui sera ajouté.
  • --cache-mode: similaire à dry-run. N'ajoute pas réellement les preuves au casier, mais ajoute les pièces jointes (le cas échéant) au casier. Affiche les informations collectées qui seraient ajoutées.
  • --format: contrôle le format de sortie, id ou json (id par défaut).

Exécutez la commande suivante pour sauvegarder les résultats pour detect-secrets:

$ cocoa locker evidence add --evidence-type com.ibm.detect_secrets \
                            --evidence-type-version 1.0.0 \
                            --details result=success \
                            --asset https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee

Exécutez la commande suivante pour sauvegarder les résultats du test d'unité:

$ cocoa locker evidence add --evidence-type com.ibm.unit_test \
                            --evidence-type-version 1.0.0 \
                            --details failure \
                            --asset https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee
                            --attachment path/to/results/junit.xml \
                            --issue <issue-link> \
                            --findings-path <path/to/file>

Exécutez la commande suivante pour créer de nouvelles informations collectées à l'aide d'une pièce jointe qui existe déjà dans le casier d'informations collectées:

$ cocoa locker evidence add --evidence-type com.ibm.detect_secrets \
                            --evidence-type-version 1.0.0 \
                            --attachment-url https://github.com/foo/bar/blob/master/raw/attachments/5aa5555aa55aa55a555aa5a5aa555555aaaa5aa5aa5555a55a5aa5aa5a5aaaaa/content
                            --asset https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee

Exécutez la commande pour enregistrer les résultats des tests unitaires et ajouter une étiquette personnalisée à la pièce jointe :

$ cocoa locker evidence add --evidence-type com.ibm.unit_test \
                            --evidence-type-version 1.0.0 \
                            --details success \
                            --asset https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee
                            --issue <issue-link> \
                            --findings-path <path/to/file> \
                            --attachment path/to/results/junit.xml::label=unit-test

cacaoyer locker preuve get < id_preuve >

Extrait un élément de preuve du casier.

Options :

--version          # Show version number
--format           # Output format ("json", default: "json")

Exécutez la commande suivante :

 cocoa locker evidence get 0000000011111111222222223333333344444444555555556666666677777777

Exemple de sortie :

{
   "id": "0000000011111111222222223333333344444444555555556666666677777777",
   "evidence_type_id": "com.ibm.unit_tests",
   "evidence_type_version": "1.0.0",
   "date": "2024-03-27T16:36:48.167Z",
   "origin": {
     "toolchain_crn": "crn:v1:bluemix:public:toolchain:us-south:a/40111714589c4f7099032529b26a7a63:f0ffdc07-616e-40fa-98d5-2f52d5e8ef4d::",
     "pipeline_id": "b313626a-a612-4c98-ae5c-408af7d7ce58",
     "pipeline_run_id": "cadb83be-f00d-44af-95d0-1b49deb8abb5",
     "pipeline_run_url": "https://cloud.ibm.com/devops/pipelines/tekton/b313626a-a612-4c98-ae5c-408af7d7ce58/runs/cadb83be-f00d-44af-95d0-1b49deb8abb5/code-unit-tests/run-stage/?env_id=ibm:yp:us-south",
     "scope": "82aef875749c6386381a3baff8430df6f5ac2e8434cc91e5287ce65bd71a3985"
   },
   "details": {
     "result": "pending",
     "tool": "jest"
   },
   "issues": [],
   "findings": [],
   "attachments": [
      {
       "hash": "9a841ef856a5de813dbe440b102b9bff3ca1831630292cff7323c557704f386b",
       "url": "https://s3.private.us-south.cloud-object-storage.appdomain.cloud/test/assets/9a841ef856a5de813dbe440b102b9bff3ca1831630292cff7323c557704f386b/index.json",
       "label": "unit-test"
     }
   ],
   "assets": [
     {
       "hash": "7d930918fbb8be80f3a5100f0313c5b2518eba22cc915194cf971d4daf5170be",
       "uri": <git-uri-to-asset>,
       "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/cocoa-development/assets/7d930918fbb8be80f3a5100f0313c5b2518eba22cc915194cf971d4daf5170be/index.json"
     }
   ]
}

Récapitulatif des informations collectées du casier de cacao < asset-id >

Renvoie le récapitulatif des informations collectées pour un ou plusieurs actifs. Lorsqu'aucun actif n'est spécifié sur la ligne de commande, les actifs sont lus à partir de stdin.

Indicateurs facultatifs :

  • --latest-only: supprime les informations collectées si des informations collectées plus récentes sont disponibles pour un actif (true par défaut, défini sur false pour désactiver ce comportement)
  • --scope: prend en compte les informations collectées qui ont la portée spécifiée uniquement (voir evidence add --scope), qui peuvent être spécifiées plusieurs fois
  • --linked-scope  : prend en compte les preuves qui ont la portée liée spécifiée comme portée. En outre, les ajoute à la propriété linked-scopes dans le résumé des preuves renvoyé. Peut être spécifié plusieurs fois.
  • --check-immutable-storage: vérifie si chaque preuve est également présente dans un compartiment Cloud Object Storage et est protégée par une période de conservation d'au moins 365 jours. Ajoute des informations collectées com.ibm.immutable_storage au récapitulatif.
    • Voir la section cocoa locker pour savoir comment configurer le compartiment Cloud Object Storage.
  • --dry-run: a un effet lorsqu'il est associé à --check-immutable-storage. Si elles sont utilisées, les informations collectées com.ibm.immutable_storage sont uniquement ajoutées au récapitulatif, mais elles ne sont pas téléchargées dans le casier d'informations collectées.
  • --clone-dir: Un paramètre optionnel pour déterminer le chemin de clonage du référentiel Evidence, par défaut il clonera le répertoire repo /tmp
  • --initialized: Indicateur facultatif qui suppose que le casier de preuves est déjà cloné à l'emplacement fourni --clone-dir ou /tmp/.
  • --evidences-path: Pour créer un résumé à partir des preuves locales stockées dans un cache, ce champ est utilisé pour fournir le chemin du fichier où toutes les preuves sont présentes dans le tableau.

Exécutez la commande suivante :

$ cocoa locker evidence summary \
    docker://us.icr.io/foo/bar@sha256:1234567812345678123456781234567812345678123456781234567812345678 \
    docker://us.icr.io/baz/quux@sha256:1234567812345678123456781234567812345678123456781234567812345678 \
    --scope 11a1aa11-1a11-11a1-aa11-a11a1a1111a1 \
    --scope 22a2aa22-2a22-22a2-aa22-a22a2a2222a2 \
    --linked-scope 33a3aa33-3a33-33a3-33a3-a33a3a3333a3 \
    --linked-scope 12bqab22-1a23-1a23-1a23-b22a3a2222a3

Exemple lu à partir de stdin:

$ cat <<EOF | cocoa locker evidence summary
docker://us.icr.io/foo/bar@sha256:1234567812345678123456781234567812345678123456781234567812345678
docker://us.icr.io/baz/quux@sha256:1234567812345678123456781234567812345678123456781234567812345678
EOF

Cocoa Locker Attachment get < ID-pièce jointe >

Extrait une pièce jointe précédemment téléchargée avec cocoa locker evidence add.

Options :

--version          # Show version number

Exécutez la commande suivante pour télécharger la pièce jointe:

$ cocoa locker evidence add --evidence-type-id com.ibm.unit_test \
                            --evidence-type-version 1.0 \
                            --details result=success \
                            --attachment path/to/junit.xml::label=unit-test

Exemple de sortie de téléchargement de pièce jointe:

{
   ...
   "attachments": [
    {
      "hash": "9a841ef856a5de813dbe440b102b9bff3ca1831630292cff7323c557704f386b",
      "url": "https://s3.private.us-south.cloud-object-storage.appdomain.cloud/test/assets/9a841ef856a5de813dbe440b102b9bff3ca1831630292cff7323c557704f386b/index.json",
      "label": "unit-test"
    }
   ],
   ...
}

Exécutez la commande suivante pour récupérer la pièce jointe :

 cocoa locker attachment get 5aa5555aa55aa55a555aa5a5aa555555aaaa5aa5aa5555a55a5aa5aa5a5aaaaa

vérification des casiers à cacao

Vérifie la configuration et les paramètres requis du casier.

Actuellement, seul le casier basé sur Cloud Object Storage a une configuration requise:

  • Etant donné que chaque preuve doit être conservée pendant au moins un an, le compartiment Cloud Object Storage doit être protégé par une règle de conservation. La durée de conservation par défaut doit être supérieure ou égale à 365 jours.

Pour plus d'informations, voir Commandes de casier de cacao.

Variables d'environnement obligatoires :

COS_API_KEY=        # Cloud Object Storage API Key
COS_BUCKET_NAME=    # Bucket Name where the evidence will be uploaded in the COS Instance
COS_ENDPOINT=       # The COS API Endpoint matching the region where the bucket is located

Exécutez la commande suivante :

 cocoa locker check --provider='cos'

Vérification des preuves de casier de cacao

Validez les informations collectées requises en fonction des vérifications présentes dans le fichier de configuration cocoa locker evidence check.

Variables d'environnement obligatoires :

Options :

--org              # (Required) Owner of the evidence locker repo, defaults to `EVIDENCE_LOCKER_REPO_OWNER`
--repo             # (Required) Name of the evidence locker repo, defaults to `EVIDENCE_LOCKER_REPO_NAME`
--git-provider     # Git service provider ("github")
--git-token-path   # Git token path to read the secret from
--git-api-url      # Github API URL
--config-path      # (required) use this path to read the config file of all the required evidence check
--summary-path     # (required) use this path to read the summary file of all the evidences
--pre-deployment   # If present, will check only pre deployment checks, defaults to false
--post-deployment  # If present, will check only post deployment checks, defaults to false
--source           # (Applies to config file version 2) If present, is tupple of branch:region information(with region as optional) which will be used to filter the rules against `source_environments` field.
--target           # (Applies to config file version 2) If present, is tupple of branch:region information(with region as optional) which will be used to filter the rules against `target_environments` field.
--pipeline-run-id  # (Applies to config file version 2) If present, is current pipeline_run_id will be used for checking evidences.
--output-config-path # optional path to create a more suitable file based on the current config file

Exécutez la commande suivante :

 cocoa locker evidence check --summary-path `<summary-path>` --config-path `<config-path>` --pre-deployment --post-deployment --source `<source_branch:region>` --target `<target_branch:region>` --pipeline-run-id `<current_pipeline-run-id>`

casier à cacao collecte de preuves

Recueillir les preuves et les conserver dans le casier. Cette commande est l'implémentation sous-jacente du script shell collect-evidence.

Utilisation

cocoa locker evidence collect [OPTIONS]

Paramètres obligatoires

  • --tool-type <string> Identifiant de l'outil (par exemple, "sonarqube", "cra", "owasp-zap", "detect-secrets")

  • --evidence-type <string> Type de preuve (par exemple, " com.ibm.static_scan ", " com.ibm.unit_tests ", " com.ibm.detect_secrets ")

  • --assets <key:type> Spécifications des actifs au format "key:type". Peut être spécifié plusieurs fois pour plusieurs actifs. Exemple : --assets app-repo:repo ou --assets my-image:artifact

  • --status <string> Statut de la preuve : success | failure pending

  • --pipeline-run-id <string> Identifiant d'exécution du pipeline

  • --pipeline-namespace <string> Espace de noms du pipeline : pr | ci | cd | cc

  • --incident-org <string> Git organisation pour le dépôt des incidents

  • --incident-repo <string> Nom du référentiel d'incidents

Paramètres requis pour la plateforme tekton.
  • --pipeline-id <string> Identifiant de la canalisation

  • --task-name <string> Nom de la tâche dans le pipeline

  • --step-name <string> Nom de l'étape dans la tâche

Paramètres facultatifs

  • --attachment <path> Fichiers joints tels que les résultats de l'analyse (peuvent être spécifiés plusieurs fois)

  • --attachment-url <url> URL des pièces jointes préchargées (peut être spécifié plusieurs fois)

  • --meta <key=value> Paires clé/valeur des métadonnées (peuvent être spécifiées plusieurs fois)

  • --additional-comment <string> Commentaire supplémentaire à inclure dans les questions relatives aux incidents

  • --show-table Afficher les détails de la preuve sous forme de tableau

  • --dry-run Prévisualisation sans enregistrement dans le casier

  • --cache-mode Ajouter les pièces jointes uniquement, ignorer les preuves elles-mêmes

  • --evidence-reuse Activer la fonction de réutilisation des preuves

  • --evidence-per-asset Créer des preuves pour chaque actif séparément

  • --upload-logs <boolean> Télécharger les journaux en tant que pièces jointes si aucune autre pièce jointe n'est fournie (par défaut : true)

  • --incident-git-provider <string> Git fournisseur : github | gitlab (par défaut : github)

  • --incident-git-token-path <path> Chemin d'accès au jeton d'authentification Git

  • --incident-git-api-url <url> Base personnalisée Git API URL

  • --incident-labels <string> Étiquettes à appliquer aux incidents (peuvent être spécifiées plusieurs fois)

  • --incident-assignees <string> GitHub/GitLab les noms d'utilisateur à attribuer aux incidents (peuvent être spécifiés plusieurs fois)

  • --comment-on-issues Relier les éléments de preuve supplémentaires sur les questions d'incidents

  • --pr-issue-management Permettre la liaison et la gestion des demandes d'extraction vers les problèmes

  • --opt-in-auto-close Permettre la clôture automatique des incidents s'ils sont résolus

  • --custom-exempt-label <string> Étiquette indiquant l'exemption des exigences de conformité

  • --platform <string> Plate-forme utilisée pour récupérer les journaux : tekton | github-actions (par défaut : tekton)

  • --root-pipeline-run-id <string> Identifiant de la canalisation racine

  • --toolchain-crn <string> Nom de ressource cloud (CRN) de la chaîne d'outils

  • --deployment-prefix <string> Le préfixe de déploiement

  • --target-environment <string> Environnement cible (par défaut : prod)

  • --target-environment-purpose <string> Objectif de l'environnement cible

  • --collect-evidence-in-pr <string> Recueillir des preuves dans le contexte des relations publiques : none | success | all

  • --pr-html-url <string> URL à la demande d'extraction associée

  • --base-branch <string> Branche de base pour la demande d'extraction

  • --branch <string> Nom de branche

  • --gh-org <string> GitHub l'organisation où le pipeline s'exécute (spécifique à la plateforme d'actions github).

  • --gh-repo <string> GitHub dépôt où le pipeline s'exécute ( spécifique à la plateforme d'actions github ).

  • --gh-server-url <string> GitHub Actions : Serveur URL (spécifique à la plateforme d'actions github).

  • --gh-repository-url <string> GitHub Actions : Dépôt complet URL (spécifique à la plateforme d'actions github).

  • --gh-run-attempt <string> GitHub Actions : Numéro de tentative d'exécution du flux de travail (spécifique à la plateforme d'actions github).

  • --run-id <string> Identificateur d'exécution

  • --xforce-api-key <string> Clé API pour IBM X-Force Exchange

  • --xforce-password <string> Mot de passe API pour IBM X-Force Exchange

  • --xforce-url <string> IBM X-Force Exchange API URL

Exemple

cocoa locker evidence collect \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --status "success" \
  --attachment ./sonarqube-result.json \
  --pipeline-run-id "abc123" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues" \
  --meta "environment=staging"

réutilisation des preuves des casiers à cacao

Trouver et réutiliser les preuves existantes pour l'actif donné. Cette commande est l'implémentation sous-jacente du script shell check-evidence-for-reuse.

Utilisation

cocoa locker evidence reuse [OPTIONS]

Paramètres obligatoires

  • --tool-type <string> Identifiant de l'outil (par exemple, "sonarqube", "cra", "owasp-zap")

  • --evidence-type <string> Type de preuve (par exemple, " com.ibm.static_scan ", " com.ibm.unit_tests ")

  • --assets <key:type> Spécifications des actifs au format "key:type"

  • --pipeline-run-id <string> Identifiant d'exécution du pipeline

  • --pipeline-namespace <string> Espace de noms du pipeline : pr | ci

  • --incident-org <string> Git organisation pour le dépôt des incidents

  • --incident-repo <string> Nom du référentiel d'incidents

Paramètres requis pour la plateforme tekton.
  • --task-name <string> Nom de la tâche dans le pipeline

  • --step-name <string> Nom de l'étape dans la tâche

  • --pipeline-id <string> Identifiant de la canalisation

Paramètres facultatifs

  • --meta <key=value> Métadonnées pour la validation des preuves trouvées pour la réutilisation (peuvent être spécifiées plusieurs fois)

  • --evidence-validity-period <number> Période de validité en heures (par défaut : 24, max : 720 heures / 30 jours)

  • --evidence-reuse-for-failure Activer la réutilisation des preuves échouées (par défaut : false)

  • --dry-run Mode de prévisualisation sans réutilisation des preuves

  • --show-table Afficher les détails de la preuve sous forme de tableau

  • --format <string> Format de sortie : json (par défaut : json)

  • --incident-git-provider <string> Git fournisseur : github | gitlab (par défaut : github)

  • --incident-git-token-path <path> Chemin d'accès au jeton d'authentification Git

  • --incident-git-api-url <url> Base personnalisée Git API URL

  • --incident-assignees <string> GitHub/GitLab les noms d'utilisateur à attribuer aux incidents (peuvent être spécifiés plusieurs fois)

  • --custom-exempt-label <string> Étiquette indiquant l'exemption des exigences de conformité

  • --deployment-prefix <string> Le préfixe de déploiement

  • --root-pipeline-run-id <string> Identifiant de la canalisation racine

  • --toolchain-crn <string> Nom de ressource cloud (CRN) de la chaîne d'outils

  • --platform <string> Plate-forme utilisée pour récupérer les journaux : tekton | github-actions (par défaut : tekton)

  • --gh-org <string> GitHub organisation où le pipeline s'exécute ( spécifique à la plateforme d'actions github )

  • --gh-repo <string> GitHub dépôt où le pipeline s'exécute ( spécifique à la plateforme d'actions github )

  • --run-id <string> Identificateur d'exécution

  • --environment <string> Environnement (par défaut : dev)

  • --serviceEnvironment <string> Environnement de service (par défaut : dev)

Exemple

Utilisation de base :

cocoa locker evidence reuse \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --pipeline-run-id "abc123" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues" \
  --format "json"

Avec une période de validité personnalisée et une validation des métadonnées :

cocoa locker evidence reuse \
  --tool-type "cra" \
  --evidence-type "com.ibm.code_vulnerability_scan" \
  --assets "app-repo:repo" \
  --pipeline-run-id "xyz789" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues" \
  --evidence-validity-period 48 \
  --meta "tool-version=1.2.3" \
  --meta "base-image=ubuntu:22.04" \
  --format "json"

Réutiliser les preuves qui ont échoué :

cocoa locker evidence reuse \
  --tool-type "owasp-zap" \
  --evidence-type "com.ibm.dynamic_scan" \
  --assets "my-app:artifact" \
  --pipeline-run-id "xxx-001" \
  --pipeline-namespace "cd" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues" \
  --evidence-reuse-for-failure \
  --format "json"

Code de sortie

  • 0: Preuves trouvées et réutilisées avec succès
  • 1: Aucune preuve réutilisable n'a été trouvée ou la validation a échoué

commandes de tekton de cacao

cocoa tekton get-pipeline-logs

Crée des fichiers journaux pour chaque étape à partir d'une exécution de pipeline et sauvegarde ces fichiers journaux dans un répertoire. Utilisez les variables d'environnement (PIPELINE_ID, PIPELINE_RUN_ID) ou remplacez les variables d'environnement par des indicateurs explicites (--pipeline-id, --pipeline-run-id). Les fichiers journaux peuvent également être extraits au niveau par tâche et par étape en fournissant des indicateurs --task-name et --step-name.

Si --task-name est fourni, la commande tente d'extraire et de créer les fichiers journaux pour chaque étape pour le nom de tâche indiqué.

Si --step-name est fourni avec --task-name, la commande crée le fichier journal pour l'étape spécifique de l' task-name fournie. --step-name sans la signature de commande --task-name n'est pas valide.

Options :

-o --output-dir       # (Required) Specifies the directory where the logs will be saved
   --pipeline-id      # ID of the pipeline
   --pipeline-run-id  # ID of the pipeline run
-u --use-task-ref     # (Optional) Can be used to override the default name of the pipeline task to the taskRef, when creating the directory
   --task-name       # (Optional) use task-name to fetch the logs for --task-name
   --step-name       # (Optional) use step-name in conjunction with task-name to fetch the log for --step-name

Variables d'environnement obligatoires :

IBMCLOUD_API_KEY= # IBM Cloud API Token
TOOLCHAIN_REGION= # Region of the toolchain
PIPELINE_ID=      # Can be used instead of '--pipeline-id option
PIPELINE_RUN_ID=  # Can be used instead of '--pipeline-run-id option

Exécution de la commande :

$ cocoa tekton get-pipeline-logs \
   --output-dir=<output-dir> \
   --pipeline-id=<pipeline-id> \
   --pipeline-run-id=<pipeline-run-id> \
   --use-task-ref

Commandes de commentaire de cacao

ajouter un commentaire de cacao

Ajoute un commentaire à une demande de problème ou d'extraction dans GitHub.

Options :

--content           # (Required) The content to be added as comment to issue or pr
--id                # (Required) The issue number or pull request number
--type              # (Optional) The type (issue or pr), default is issue
--org               # The git repo org
--repo              # The git repo name
--git-provider      # (Optional) Git service provider [github]
--git-token-path    # (Optional) Github Token's path
--git-api-url       # (Optional) Github API URL

Variables d'environnement obligatoires :

GHE_ORG=                    # Can be used instead of --org (either the option or the variable is required)
GHE_REPO=                   # Can be used instead of --repo (either the option or the variable is required)

Variables d'environnement requises, si vous utilisezGitHub:

GHE_TOKEN=    # Github Enterprise API Token (Optional if you are using --git-token-path)

Si vous utilisez github, utilisez le champ --git-token-path pour définir votre Token GitHub et utilisez le champ --git-api-url pour définir l' URL l'API GitHub Enterprise au lieu des variables d'environnement GHE_TOKEN et GH_URL. Si des propriétés d'environnement et des paramètres de ligne de commande sont fournis, --git-token-path et --git-api-url sont prioritaires.

Exécution de la commande :

$ cocoa comment add --id 1 \
                    --content "This is a test comment" \
                    --type pr \
                    --git-provider github \
                    --org <github-organization> \
	  				--repo <github-repo-name>

commandes d'étiquettes de cacao

label cacao ajouter

Ajoute une ou plusieurs étiquettes aux demandes d'extraction dans GitHub ou GitLab.

Options :

--label           	# (Required) The label to be added to the pull request. This command be specified multiple times.
--id       	        # (Required) The pull request number. Can be specified multiple times.
--type             	# (Optional)The type of the item (issue or PR). The default type is PR.
--org               # The Git repository organization.
--repo              # The Git repository name.
--git-provider     	# (Optional) The Git service provider. The default git provider is Github.
--git-token-path    # (Optional) The path to the Git token.
--git-api-url       # (Optional) The URL of the Git API.

Variables d'environnement obligatoires :

GHE_ORG=                    # The Git repository organization. Can be used instead of the --org option. Either the option or the variable is required.
GHE_REPO=                   # The Git repository name. Can be used instead of the --repo option. Either the option or the variable is required.

Variables d'environnement requises pour GitHub:

GHE_TOKEN=    # Github Enterprise API Token (Optional if you are using --git-token-path)

Si vous utilisez GitHub, la variable d'environnement suivante est nécessaire :

Variables d'environnement requises pour GitHub
Variable Description
GHE_TOKEN Le jeton de l'API d' GitHub Enterprise. Facultatif si vous utilisez l'option --git-token-path.

Options de la ligne de commande :

Vous pouvez également utiliser les options de ligne de commande suivantes pour vous authentifier :

Options de ligne de commande pour GitHub
Options de la ligne de commande Description
--git-token-path Définissez votre jeton « GitHub ».
--git-api-url Définir l' URL l'API GitHub Enterprise

Si des propriétés d'environnement et des paramètres de ligne de commande sont fournis, les options --git-token-pat h et --git-api-url sont prioritaires.

Exemple : Ajout d'une étiquette à une demande de retrait

Vous pouvez ajouter un label à une pull request en exécutant la commande suivante :

$ cocoa label add --id 1 \
                  --label "deployed" \
                  --type pr \
                  --git-provider github \
                  --org <github-organization> \
                  --repo <github-repo-name>