CLI do DevSecOps
DevSecOps A CLI adota soluções de conformidade em IBM Cloud® DevSecOps implementação de referência; por exemplo, os pipelines de referência da abordagem shift-left. Para obter mais informações sobre a arquitetura de conformidade Shift-Left, consulte DevSecOps com Continuous Delivery.
Interface de CLI
A CLI usa uma estrutura multipartes na linha de comandos que deve ser especificada na ordem a seguir:
cocoa <command> <subcommand> [options]
-
A chamada base para a CLI.
-
O comando principal, que normalmente corresponde a um serviço ou módulo utilizado pela arquitetura “shift-left”; por exemplo, solicitação de mudança, inventário ou Tekton.
-
O subcomando que especifica a ação a ser executada.
-
As opções da CLI exigidas pela ação. Com a condição de que eles sigam os passos 1-3, você pode especificar as opções CLI em qualquer ordem.
Alguns comandos utilizam variáveis de ambiente para obter chaves de API ou para configurar o valor de uma opção que não foi fornecido na linha de comando. É preciso exportar essas variáveis antes de executar o comando.
As opções de linha de comando podem aceitar vários tipos de valores de entrada, como números, cadeias de caracteres, valores booleanos, matrizes e objetos JSON. O tipo de opção depende do comando que você especificar. Acesse cocoa <command> <subcommand> --help para ver os tipos de opções.
Tentando novamente chamadas API com falha
A Cocoa CLI tenta novamente qualquer chamada API que falhe com um status de resposta de 5xx três vezes. É possível substituir esse comportamento fornecendo as variáveis de ambiente a seguir:
MAX_RETRY_ATTEMPTS-O número de novas tentativas que a CLI do Cocoa faz antes de ser desisto. Por exemplo,MAX_RETRY_ATTEMPTS=5RETRY_STATUS_CODE-Os códigos do status de resposta para os quais a nova tentativa acontece Por exemplo,RETRY_STATUS_CODE=409,422,500para tentar novamente nesses três códigos de status.
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.
As novas tentativas são espaçadas exponencialmente no tempo, portanto, configurar novas tentativas mais altas faz com que as novas tentativas sejam espaçadas mais além.
Tempo decorrido para execução do comando
Cocoa CLI pode exibir o tempo decorrido de qualquer comando em segundos, configurando DISPLAY_ELAPSED_TIME para uma sequência não vazia como a seguir:
export DISPLAY_ELAPSED_TIME=1` # Display a snippet showing the total execution time of the cli command, example `Elapsed time: 5.32 seconds`
Comandos de CLI
Embora ServiceNow esteja documentado, ele não é compatível com a implementação de referência padrão IBM Cloud DevSecOps.
comandos de pedido de puxao
cocoa check pull-request-approval
Verifica o status de aprovação de uma solicitação de pull com base no hash de um commit. Se a solicitação de pull não for aprovada, será criada uma nova solicitação de incidente no repositório especificado. O comando pode identificar solicitações
de pull de emergência marcadas com um rótulo, neste caso ele tem um código de saída de 0.
Variáveis de ambiente obrigatórias:
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
Opções:
--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
Se estiver usando GitHub, poderá usar o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir o URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se ambos forem fornecidos, --git-token-path e --git-api-url terão precedência.
Execução do comando:
cocoa check pull-request-approval
cocoa check pull-request-status
Verifica o status de uma determinada solicitação pull e as configurações dos repositórios.
- Proteção da ramificação: regras para desativar o envio forçado, evitar a exclusão de ramificações e, opcionalmente, exigir verificações de status antes da mesclagem. Como aprimoramento, além da validação tradicional baseada em Branch Protection, o comando também oferece suporte à validação baseada em Ruleset para GitHub Repositories. Por padrão, o comando verifica se há um conjunto de regras associado na ramificação no repositório GitHub e retorna à validação tradicional baseada na proteção de ramificação se nenhum conjunto de regras for encontrado. Se tanto o Ruleset quanto a regra tradicional de proteção de ramificação estiverem presentes para uma ramificação, o comando levará em consideração apenas o Ruleset. Para obter mais informações sobre o GitHub Rulesets, consulte Configuração do repositório GitHub
- Verificação do status do commit: Serviços externos que marcam os commits com os status “
error”, “failure”, “pending” ou “success”, o que é então refletido nas solicitações de pull que envolvem esses commits. - Execuções de verificações: aplicativos que executam serviços de integração contínua, linting de código ou de varredura de código e que fornecem feedbacks detalhados sobre commits.
Variáveis de ambiente obrigatórias:
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
Se estiver usando GitHub, poderá usar o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir o URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se os pares GHE_TOKEN GH_URL e --git-token-path --git-api-url forem fornecidos, --git-token-path e --git-api-url terão precedência.
Para especificar o caminho do arquivo de saída para as configurações do Branch Protection, use a opção ' --branch-protection-settings-output-path. Quando a ramificação for protegida, a representação JSON das configurações
de proteção da ramificação do repositório será salva nesse caminho especificado.
Para especificar o caminho do arquivo de saída para os resultados da validação do Branch Protection, use a opção ' --branch-protection-markdown-output-path. Quando a ramificação estiver protegida, os resultados da validação
serão salvos no formato Markdown nesse caminho especificado.
REQUIRED_CHECKS Por exemplo:
[
{
"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"
}
}
]
Execução do comando:
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>
comandos de solicitação de troca de cac
Os comandos cocoa change-request suportam os seguintes provedores de gerenciamento de mudanças:
- ServiceNow V1
- ServiceNow V3
É possível especificar o provedor usando a opção --provider com os seguintes valores: servicenow (padrão) ou servicenow-v3.
Cada provedor requer configuração de variável de ambiente diferente:
servicenow:SERVICENOW_TOKEN- ServiceNow V1 API TokenSERVICENOW_URL- URL da API ServiceNow V1
servicenow-v3:PNP_IBMCLOUD_API_KEY-A chave de API para acessar os terminais do ServiceNow v3, se não for fornecida, volta para IAM_ACCESS_TOKENIAM_ACCESS_TOKEN- IBMCloud IAM OAuth TokenSERVICENOW_URL- URL da API ServiceNow V3
github-enterprise:GHE_TOKEN-Token do GitHub EnterpriseGITHUB_CHANGE_MANAGEMENT_REPO- GitHub Repositório de Gerenciamento de MudançasGITHUB_CHANGE_MANAGEMENT_ORG- GitHub Organização de Gerenciamento de Mudanças
cocoa change-request get
Consulta uma solicitação de alteração por meio da API ServiceNow e a salva em um arquivo ou a exibe no console.
Variáveis De Ambiente Necessárias para ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias para ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais para 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
Variáveis de ambiente necessárias para o 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)
Variáveis de ambiente necessárias para o 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)
Opções:
--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')
Execução do comando:
# 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
Cria uma solicitação de mudança e a posta para a API do ServiceNow.
Dois métodos de uso:
- Forneça todos os campos de CR necessários a partir das opções da CLI.
Opções:
--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.]+)
- Forneça o nome de um arquivo cujos dados de solicitação de mudança devem ser analisados. Espera-se o formato JSON.
Opções:
--file --f # json file name to parse the cr data from
--provider # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')
Arquivo de exemplo:
{
"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",
}
Variáveis De Ambiente Necessárias para ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias para ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais para 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
Variáveis de ambiente necessárias para o 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)
Execução do comando:
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> \
atualização do pedido de mudança do cacau
Atualize uma solicitação de mudança existente usando a API ServiceNow v3 e imprima-a no console.
Variáveis De Ambiente Necessárias para ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
CHANGE_REQUEST_ID= # ID of the Change Request
Variáveis de ambiente adicionais para 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
Opções:
--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
Execução do comando:
# 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"
Quando a opção description é usada, o comando substitui a descrição existente pela nova descrição. Caso o usuário queira anexar conteúdo à descrição original, ele precisará extrair a descrição existente e anexá-la manualmente antes de usar esse comando.
cocoa change-request change-state-to-implement
Altera o status de uma Solicitação de Mudança para “ implement ” por meio da API ServiceNow.
Opções:
--provider # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')
Variáveis De Ambiente Necessárias independentemente do provedor:
CHANGE_REQUEST_ID= # ID of the Change Request
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais, se você estiver usando o provedor 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
Variáveis de ambiente necessárias para o provedor 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)
Execução do comando:
cocoa change-request change-state-to-implement
cocoa change-request close
Encerra uma solicitação de alteração por meio da API do ServiceNow. Você pode anexar “notas de encerramento” usando a opção --close-notes e especificar a “categoria de encerramento” usando a opção --close-category.
Opções:
--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')
Variáveis De Ambiente Necessárias independentemente do provedor:
CHANGE_REQUEST_ID= # ID of the Change Request
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais, se você estiver usando o provedor 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
Variáveis de ambiente necessárias para o provedor 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)
Execução do comando:
cocoa change-request close
cocoa change-request check-approval
Verifica o status de aprovação de uma solicitação de alteração. Se a solicitação de alteração for uma emergência, o comando não falhará, mas solicitará uma aprovação retroativa.
Opções:
--provider # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')
Variáveis De Ambiente Necessárias independentemente do provedor:
CHANGE_REQUEST_ID= # ID of the Change Request
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais, se você estiver usando o provedor 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
Variáveis de ambiente necessárias para o provedor 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)
Execução do comando:
cocoa change-request check-approval
cocoa change-request prepare
Cria os dados da solicitação de modificação e os exibe no console ou em um arquivo.
Variáveis de ambiente obrigatórias:
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)
Os campos a seguir podem ser analisados a partir do corpo da solicitação pull:
--assigned-to
--impact
--priority
--purpose
--backout-plan
--type
--customer-impact
--deployment-impact
Caso sejam fornecidos por meio da opção da CLI, essa opção substitui o valor encontrado na solicitação de pull. Se todos eles forem fornecidos, o pr não é analisado, e os parâmetros --org, --repo e GHE_TOKEN não são necessários.
Opções:
--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
Execução do comando:
$ cocoa cr prepare \
--org=<github-organization> \
--repo=<github-repo-name> \
--pr=<pr number>
cocoa change-request request-approval
Solicita a aprovação de registros no novo estado com aprovação não solicitada. Ao ser processado, o registro segue o fluxo de aprovação manual.
Opções:
--crid="<ID>"
# or
--change-request-id="<ID>"
--provider # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais, se você estiver usando o provedor 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
Variáveis de ambiente necessárias para o provedor 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)
Execução do comando:
cocoa change-request request-approval --crid="<insert-change-request-id-here>"
mudança de cacau-pedido anexo add
Adiciona um anexo de alteração a uma solicitação de alteração específica.
Opções:
--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')
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais, se você estiver usando o provedor 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
Variáveis de ambiente necessárias para o provedor 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)
Execução do comando:
$ 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>'
mudança de cacau-pedido anexo get
Obtém um anexo específico de uma solicitação de mudança.
Opções:
--provider # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais, se você estiver usando o provedor 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
Variáveis de ambiente necessárias para o provedor 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)
Execução do comando:
cocoa change-request attachment get "CHGXXXXXXX" "CTASKXXXXXXX"
mudança de cacau-Lista de anexas
Listas: Anexos de alteração para uma solicitação de alteração.
Opções:
--provider # (Optional) Change Management service provider (choices: 'servicenow', 'servicenow-v3', default: 'servicenow')
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais, se você estiver usando o provedor 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
Variáveis de ambiente necessárias para o provedor 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)
Execução do comando:
cocoa change-request attachment list "<insert-change-request-id-here>"
mudança de cacau-Atualização de solicitação
Atualiza um anexo de modificação em uma solicitação de modificação específica.
Opções:
--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')
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v1 ou v2:
SERVICENOW_TOKEN= # ServiceNow API Token
SERVICENOW_URL= # ServiceNow API URL
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais, se você estiver usando o provedor 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
Variáveis de ambiente necessárias para o provedor 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)
Execução do comando:
$ 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>'
cacau change-request comment add
Adiciona um comentário a uma Solicitação de Alteração específica.
Opções:
--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]
Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
SERVICENOW_URL= # ServiceNow API URL
Variáveis de ambiente adicionais, se você estiver usando o provedor 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
Variáveis de ambiente necessárias para o provedor GitLab:
GITLAB_TOKEN= # Gitlab Token
GITLAB_URL= # Gitlab API URL
GITLAB_ORG= # Gitlab ORG
GITLAB_REPO= # Gitlab REPO Name
Variáveis de ambiente necessárias para o provedor GitHub Enterprise:
GHE_TOKEN= # Github Enterprise API Token
GITHUB_CHANGE_MANAGEMENT_ORG= # The owner of the repository
GITHUB_CHANGE_MANAGEMENT_REPO= # The repository name
Execução do comando:
$ 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'
comandos de provas do
cocoa evidence format-summary
Formata o resumo de evidências para um formato legível. Ele pode ser incluído no conteúdo da solicitação de mudança.
Execução do comando:
$ 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
markdown de evidências de cacau-resumo
Formata o resumo de evidência em um formato de redução de preço que pode ser alimentado como um comentário de solicitação pull do GitHub..
A entrada é um resumo bruto e pode estar em um dos dois formatos:
- Resumo em formato JSON.
- Resumo agregado, que é uma matriz JSON de resumos de aplicativos individuais.
Quando um resumo agregado é transmitido como entrada, a saída agrupa o status de evidência baseado nos aplicativos nos resumos.
Sinalização opcional:
--detailed: um resumo de redução de preço detalhado será gerado se o sinalizador for configurado como true (truepor padrão, configurado comofalsepara um resumo reduzido).
Execução do comando:
$ 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
comandos de artefatos de cacau
cocoa artifact upload
Faz upload de um artefato para os backends especificados. Os backends podem ser diferentes tipos de armazenamentos de evidências, por exemplo, Object Storage, GitHub or DevOps Insights. Armazenamentos diferentes exigem o fornecimento de parâmetros diferentes.
Opções:
--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
Opções para git:
--git-token-path #(Optional) Github Token's path
--git-api-url #(Optional) Github API url
Variáveis de ambiente obrigatórias:
PIPELINE_RUN_ID= # Can be used instead of '--pipeline-run-id' option
NAMESPACE= # Can be used instead of '--namespace' option
Variáveis De Ambiente Necessárias, se você estiver usando o provedor '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)
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Variáveis De Ambiente Necessárias, se você estiver usando o 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)
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir a URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se os pares GHE_TOKEN GH_URL e --git-token-path --git-api-url forem fornecidos, --git-token-path e --git-api-url terão precedência.
Execução do comando:
$ 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>
As opções da CLI também podem ser definidas por meio de variáveis de ambiente, exceto backend e upload-path.
Recuperação de um artefato
Você pode recuperar artefatos de vários armários de evidências, como Object Storage, GitHub, ou DevOps Insights, usando o comando cocoa artifact get. Esse comando permite que você busque artefatos de diferentes tipos de armários, cada um exigindo parâmetros específicos.
O comando cocoa artifact get recupera um artefato dos backends especificados. Armazenamentos diferentes exigem o fornecimento de parâmetros diferentes. Opções:
--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.
Opções para git:
--git-token-path # Github Token's path
--git-api-url # (Optional) Github API url
Variáveis de ambiente obrigatórias:
Variáveis De Ambiente Necessárias, se você estiver usando o provedor '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)
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Variáveis De Ambiente Necessárias, se você estiver usando o 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)
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir a URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se os pares GHE_TOKEN GH_URL e --git-token-path --git-api-url forem fornecidos, --git-token-path e --git-api-url terão precedência.
Execução do comando:
$ 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>
As opções da CLI também podem ser definidas a partir de variáveis de ambiente, exceto para backend e artifact-path / artifact-prefix.
cocoa set-status
Configura um status de commit. A implemetação atual é testada no GitHub. Veja a documentação sobre os status GitHub.
Variáveis de ambiente obrigatórias:
GHE_ORG= # Github organization/username
GHE_REPO= # Github repository
GHE_COMMIT= # Github commit hash
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github token (Optional if you are using --git-token-path)
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir a URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se os pares GHE_TOKEN GH_URL e --git-token-path --git-api-url forem fornecidos, --git-token-path e --git-api-url terão precedência.
Opções para git:
--git-token-path #(Optional) GitHub token's path
--git-api-url #(Optional) GitHub API url
Execução do comando:
$ 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."
comandos do inventário do
cocoa inventory add
Adiciona um valor ao repositório de estoque. Cria um arquivo com a opção “ name ”; caso ele não exista, o arquivo é sobrescrito.
Variáveis de ambiente obrigatórias:
GHE_ORG= # Github Organization (required if --org option is not specified).
GHE_REPO= # Github Repository (required if --repo option is not specified).
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token(Optional if you are using --git-token-path)
Opções para git:
--git-token-path #(Optional) Github Token's path
--git-api-url #(Optional) Github API url
| Opção | Descrição | Tipo de valor | Obrigatório ou opcional | Valor(es) possível(is) / Valor padrão / Observações |
|---|---|---|---|---|
| artefato | Nome do artefato criado para o aplicativo. | Sequência | Obrigatório | Se o tipo do artefato for uma imagem, use o seguinte formato: <static_name>:<version>@sha256:<sha256_digest> OU <static_name>@sha256:<sha256_digest>. Se o tipo de entrada não for uma imagem, use um nome estático que permaneça constante em todas as atualizações da entrada. |
| versão | A versão do aplicativo. | Sequência | Obrigatório |
|
| repositório-url | A URL que aponta para o repositório de código-fonte do aplicativo (de repositórios do github ou GRIT/gitlab) | Sequência | Obrigatório | Esse deve ser um repositório de código-fonte válido (como github/gitlab) e não um repositório do docker (como artifactory) |
| PIPELINE-RUN-ID | O id da execução do pipeline. | Sequência | Obrigatório | Isso é usado para escopo de evidências. Deve ser o ID ou uuid de execução do pipeline. (Exemplo de valor: ' f21321af-9084-4af3-80b8-4fb34143b7d9 ) |
| Commit-sha | O commit do repositório de aplicativos a partir do qual o artefato é criado. | Sequência | Obrigatório | Deve ser um sha de commit de formato longo (40 caracteres em minúsculas) |
| nome | O nome da aplicação o artefato pertence a | Sequência | Obrigatório | É uma área única. Podemos usar subdiretórios, como name=subdir/foo, o que pode tornar seu repositório de inventário mais organizado. |
| número de construção | O número da construção. | número | Obrigatório | O número de compilação é usado para correlacionar o artefato de compilação e o artefato de implementação |
| org | A organização do GitHub que possui o repositório de inventário. | Sequência | Opcional se a variável de ambiente GHE_ORG estiver definida |
|
| repo | O nome do repositório de inventário. | Sequência | Opcional se a variável de ambiente GHE_REPO estiver definida |
|
| app-artefatos | Conteúdo de app arbitrário no formato JSON | Sequência | Opcional | Qualquer conteúdo adicional pode ser adicionado aqui para uso em automação/fluxo de trabalho |
| tipo | Tipo do artefato. Pode ser "image" para imagens ou pode ser um valor estático para tipos genéricos, como arquivos de implantação, gráficos de leme etc. | Sequência | Obrigatório | Valores possíveis: ["image"] para artefatos do tipo imagem, " , caso contrário, podem ser usados valores como ["helm-chart", "deployment-file"] ou qualquer outro valor arbitrário |
| sha256 | O hash sha256 do artefato. | Sequência | Obrigatório | Deve ter o formato ' sha256:<64 character hash> |
| Procedência | URL que aponta para o artefato (por exemplo, imagem construída). | Sequência | Obrigatório | Para uma entrada de inventário do tipo "imagem", a procedência deve ser a mesma do campo de artefato |
| assinatura | A assinatura do artefato | Sequência | Obrigatório |
|
| ambiente | O nome do ambiente onde a entrada é adicionada. | Sequência | Opcional | Padrão: "master" |
| do arquivo | O nome do arquivo que contém os detalhes das entradas de inventário. Use esse sinalizador para fazer upload de várias entradas de inventário em um único commit no repositório de inventário. | string | Opcional | Exemplo: ' path/to/file.json |
| provedor git | O provedor de serviços de controle de versão do Git. | Sequência | Opcional | Padrão : "github" Valores possíveis : ["github", "gitlab"] |
| caminho-do-token-git | Caminho do token Git para ler o segredo de | Sequência | Opcional se a variável de ambiente GHE_TOKEN estiver definida | Exemplo: ' path/to/git-token |
| url-da-api-git | URL da API Git | Sequência | Opcional | Padrão : ' https://<region>.git.cloud.ibm.com/api/v4 |
| local | Localização do artefato em outras regiões, juntamente com o sha256 | Sequência | Opcional | Exemplo: <environment>#<static_name>:<version>@sha256:<sha256_digest>. É possível fornecer essa opção várias vezes. |
Execução do comando:
$ 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
Usando a opção --from-file
Ao usar a opção --from-file, o comando suporta a adição de várias entradas em um único commit. Essa opção espera um arquivo JSON contendo uma matriz de objetos, em que cada objeto da matriz deve ter os mesmos campos descritos
na tabela de opções acima. Os requisitos de campo (obrigatório vs. opcional) permanecem os mesmos que quando se usam opções individuais de linha de comando. A única diferença é que, em vez de fornecer esses campos como argumentos de linha
de comando, eles são lidos do arquivo JSON.
As opções --environment, --org e --repo devem ser fornecidas na linha de comando e serão aplicadas a todas as entradas do arquivo.
Exemplo de estrutura de arquivo 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",
}
]
Ao usar --from-file, é possível fornecer locais para o artefato em outro registro. O comando espera que o campo locations seja um objeto em que a chave seja <environment> e o valor seja <static_name>:<version>@sha256:<sha256_digest> nesse formato.
cocoa inventory get
Obtém uma entrada a partir do repositório de inventário. O destino pode ser uma versão ou um ambiente específico. Use --version ou --environment e somente uma destas opções. Caso a opção --property não
seja fornecida, todo o conteúdo do inventário será impresso.
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Opções para git:
--git-token-path #(Optional) Github Token's path
--git-api-url #(Optional) Github API url
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir a URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se os pares GHE_TOKEN GH_URL e --git-token-path --git-api-url forem fornecidos, --git-token-path e --git-api-url terão precedência.
Por padrão, a CLI em cada chamada garante que você trabalhe com uma versão atualizada de um armário Git. Esse comportamento pode ser desativado configurando-se COCOA_USE_CACHE para qualquer valor, exceto 0, false,
no ou n. Neste caso, a CLI usa seu cache interno para consultar evidências (muito mais rápido), mas resultados podem ser estantes.
Execução do comando:
# 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
Obtém o hash do commit mais recente por meio de um rótulo ou ambiente no repositório de inventário. Use --label ou --environment e somente uma destas opções.
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Opções para git:
--git-token-path #(Optional) Github Token's path
--git-api-url #(Optional) Github API url
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir a URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se os pares GHE_TOKEN GH_URL e --git-token-path --git-api-url forem fornecidos, --git-token-path e --git-api-url terão precedência.
Execução do comando:
# 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
O uso de um rótulo de inventário permite adicionar ou realocar rótulos em um item de inventário, visando o último commit em um ramo ou outro rótulo.
Opções:
--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 )
Variáveis de ambiente obrigatórias:
GHE_ORG= # Github Organization (required if --org option is not specified).
GHE_REPO= # Github Repository (required if --repo option is not specified).
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Opções para git:
--git-token-path #(Optional) Github Token's path
--git-api-url #(Optional) Github API url
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir a URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se os pares GHE_TOKEN GH_URL e --git-token-path --git-api-url forem fornecidos, --git-token-path e --git-api-url terão precedência.
Execução do comando:
# 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
Promove entradas do inventário de um ambiente para outro. O ambiente de origem pode ser uma ramificação ou uma tag.
Variáveis de ambiente obrigatórias:
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).
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Opções para git:
--git-token-path #(Optional) Github Token's path
--git-api-url #(Optional) Github API url
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir a URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se ambos forem fornecidos --git-token-path e --git-api-url têm precedência.
Execução do comando:
$ 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'
validação do inventário de cacau
Valida as entradas presentes em um repositório de inventário (ou arquivo JSON). O repositório do inventário pode ter seu ambiente (branch) ou rótulo (tag) validado.
As opções a serem validadas incluem (pelo menos um dos sinalizadores deve ser utilizado)
- usando o sinalizador '
--environment, que recebe uma ramificação como valor e valida todas as entradas nela. - usando o sinalizador '
--label, que recebe a tag como valor e valida todas as entradas nela. - usando o sinalizador '
--from-file, que recebe o caminho de um arquivo JSON contendo entradas de inventário (em formato hifenizado).
Opcional:
- Se for necessário usar um nome de arquivo inventoryignore personalizado, o sinalizador '
--inventory-ignore-file-namepoderá ser usado para substituir o valor padrão. - Se já existir um repositório de inventário clonado e você desejar que o comando utilize o mesmo, poderá fornecer o caminho para o repositório de inventário clonado usando o sinalizador '
--inventory-path.
Opções obrigatórias:
--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
Variáveis de ambiente (opcionais e podem ser usadas em vez de fornecer --org --repo e --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)
Execução do comando:
$ cocoa inventory validate \
--org "Github-ID" \
--repo "inventory-repo" \
--git-token-path="$INVENTORY_TOKEN_PATH" \
--label "$latest_tag" \
--inventory-path "${DIRECTORY_NAME}"
inventário de cacau get-delta
Obtenha o delta entre os commits do repositório do inventário. Opcionalmente, obtenha commits de revisão por pares dentro do delta entre dois commits.
Variáveis de ambiente obrigatórias:
GHE_ORG= # Github Organization (required if --org option is not specified).
GHE_REPO= # Github Repository (required if --repo option is not specified).
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token(Optional if you are using --git-token-path)
Opções para git:
--git-token-path #(Optional) Github Token's path
--git-api-url #(Optional) Github API url
| Opção | Descrição | Tipo de valor | Obrigatório ou opcional | Valor(es) possível(is) / Valor padrão / Observações |
|---|---|---|---|---|
| de-sha | O commit inicial para calcular o delta de | Sequência | opcional |
|
| do rótulo | A tag a ser usada como o commit inicial para calcular o delta a partir de | Sequência | opcional |
|
| to-sha | O commit final para calcular o delta até | Sequência | opcional |
|
| para o ambiente | O commit HEAD da ramificação do ambiente para calcular o delta até | Sequência | opcional |
|
| para etiqueta | A tag que indica o commit final para calcular o delta até | Sequência | opcional |
|
| org | A organização do GitHub que possui o repositório de inventário. | Sequência | Opcional se a variável de ambiente GHE_ORG estiver definida |
|
| repo | O nome do repositório de inventário. | Sequência | Opcional se a variável de ambiente GHE_REPO estiver definida |
|
| provedor git | O provedor de serviços de controle de versão do Git. | Sequência | Opcional | Padrão : "github" Valores possíveis : ["github", "gitlab"] |
| caminho-do-token-git | Caminho do token Git para ler o segredo de | Sequência | Opcional se a variável de ambiente GHE_TOKEN estiver definida | Exemplo: ' path/to/git-token |
| url-da-api-git | URL da API Git | Sequência | Opcional | Padrão : ' https://<region>.git.cloud.ibm.com/api/v4 |
| delta | Sinalizador para computar o delta | Booleano | opcional | Não |
| delta-deleção | Sinalizador para computar exclusões delta | Booleano | opcional | Não |
| lista de inventário | Sinalizador para computar toda a lista de inventário | Booleano | opcional | Não |
| revisão por pares | Sinalizador para computar os commits de revisão por pares | Booleano | opcional | Não |
| caminho do inventário-repo | Caminho opcional do repositório do inventário. Se for passado, o repositório do inventário não será clonado dentro do comando | Sequência | opcional | |
| inventário-ignorar-caminho-de-arquivo | Caminho opcional para o arquivo de ignorar o inventário | Sequência | opcional | |
| ignorar-caminho-do-arquivo-do-inventário-anterior | Caminho opcional para o arquivo ignore do inventário de implantação anterior | Sequência | opcional |
Execução do comando:
$ 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
atualização do inventário de cacau - locais
Atualizar os locais de uma entrada/artefato no repositório de inventário.
Variáveis de ambiente obrigatórias:
GHE_ORG= # Github Organization (required if --org option is not specified).
GHE_REPO= # Github Repository (required if --repo option is not specified).
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token(Optional if you are using --git-token-path)
Opções para git:
--git-token-path #(Optional) Github Token's path
--git-api-url #(Optional) Github API url
| Opção | Descrição | Tipo de valor | Obrigatório ou opcional | Valor(es) possível(is) / Valor padrão / Observações |
|---|---|---|---|---|
| nome | O nome da aplicação o artefato pertence a | Sequência | Obrigatório |
|
| org | A organização do GitHub que possui o repositório de inventário. | Sequência | Opcional se a variável de ambiente GHE_ORG estiver definida |
|
| repo | O nome do repositório de inventário. | Sequência | Opcional se a variável de ambiente GHE_REPO estiver definida |
|
| ambiente | O nome do ambiente onde a entrada é adicionada. | Sequência | Opcional | Padrão: "master" |
| provedor git | O provedor de serviços de controle de versão do Git. | Sequência | Opcional | Padrão : "github" Valores possíveis : ["github", "gitlab"] |
| caminho-do-token-git | Caminho do token Git para ler o segredo de | Sequência | Opcional se a variável de ambiente GHE_TOKEN estiver definida | Exemplo: ' path/to/git-token |
| url-da-api-git | URL da API Git | Sequência | Opcional | Padrão : ' https://<region>.git.cloud.ibm.com/api/v4 |
| local | Localização do artefato em outras regiões, juntamente com o sha256 | Sequência | Opcional | Exemplo: <environment>#<static_name>:<version>@sha256:<sha256_digest>. É possível fornecer essa opção várias vezes. |
Execução do comando:
$ 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
comandos de incidente do
processo de incidente do
Este comando processa os resultados da verificação fornecidos e cria problemas de incidentes no repositório fornecido por vulnerabilidade. Se questões existem já para pares de incidentes de assunto, ele não cria novos.
Se --set-grace-period for configurado, ele cria problemas com Grace Período de Graça, ou atualizar questões existentes, para ter Graça Período.
Período De Carência é definido para 15 dias se habilitado. Se Isentos ou Graça Período for configurado em uma questão de incidente, a verificação lista a questão, mas não a marca como um erro.
As exceções são configuradas em CR VA, ou você pode enviar o Incidente ou CVE para uma aprovação de isenção. Se aprovado, é possível editar a questão do Incidente (configuração Excempt: **true**), e link para a solicitação aprovada.
Arquivos de resultado de varredura suportados atualmente:
- Container Registry VA scan (opção
--type va) - CRA Vulnerability scan (opção
--type cra) - Digitalização do CRA CIS (opção
--type cra-cis) - Xray (opção
--type xray) - OWASP ZAP (opção
--type owasp-zap) - OWASP ZAP UI (opção
--type owasp-zap-ui) - Twistlock (opção
--type twistlock) - Varreduras do Container Image Multi-Scanner (CIMS) (opção
--type cims) - Varredura de revisão de peer (opção
--type peer-review) - GoLang Varredura de Segurança (opção
--type gosec) - SonarQube Varredura (opção
--type sonarqube) - Mend Scan (opção
--type mend) - Reparar varredura SAST (opção
--type mend-sast) - Checkov (opção
--type checkov) - Varredura de vulnerabilidade do CRA para o Terraform (opção
--type cra-tf) - Varredura de Segurança do Terraform (opção
--type tfsec). - Fips Scanner (opção
--type fips-scanner) - Detectar Segredos (opção
--type detect-secrets) - Sysdig (opção
--type sysdig) - CycloneDX (opção
--type cyclonedx) - Grype (opção
--type grype)
Para obter mais informações sobre Container Registry VA e formato de resultado, consulte Vulnerability Advisor para IBM Cloud Container Registry. Para obter mais informações sobre o scanner de Vulnerabilidade CRA, consulte a documentação Configurando o Code Risk Analyzer.
Uso:
$ cocoa incident process \
<options> \
<path to result file>
Opções:
--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")
Variáveis de ambiente obrigatórias:
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)
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir a URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se ambos forem fornecidos, --git-token-path e --git-api-url terão precedência.
Valores de retorno:
- Se não forem encontradas questões, ou todas as questões encontradas tiverem o conjunto de período de Isentos ou Graça, as saídas de comando com status zero.
- Se alguma das questões encontradas não tiver nenhum conjunto Isentos ou Grace Período, as saídas de comando com status nonzero.
- If format == list-O comando lista URLs de problemas de incidentes localizados ou criados de acordo com o arquivo de resultados e assunto.
- If format == json-O comando imprime um JSON contendo uma matriz de objetos de descobertas (informações de problema adicionais) para cada um dos problemas localizados, criados e fechados automaticamente de acordo com o arquivo e assunto de resultado.
- Estrutura do objeto JSON de descobertas correspondente a um problema:
{
"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
}
Execução do comando:
$ 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
processo incidente de cacau-legado
Este comando cria problemas de incidentes no repositório fornecido para cenários quando um arquivo de varredura não está disponível. Geralmente, tais cenários seriam falhas relacionadas a não vulnerabilidade como falha de teste unitário, falha
de proteção de ramificação, falha de teste de aceitação e falha de assinatura de imagem. Essas falhas seriam não vulnerabilidades, no entanto seriam um desvio em relação à postura de conformidade. Se existirem questões já para combinações
de ferramentas de assunto incidente, o comando não cria novos. Por padrão, o índice de gravidade high é configurado para questões criadas.
Se --set-due-date for configurado, o comando criará problemas ou atualiza questões existentes com as datas de vencimento. As datas de vencimento são calculadas a partir do período de carência da emissão, com base na gravidade.
Se --close-resolved-issues flag estiver configurado, o comando procura por questões abertas com a mesma ferramenta, assunto e o ID do incidente conforme a execução atual. Se houver algum problema encontrado, enquanto que o --current-status foi passado como success, o comando fecha essas questões.
Se --read-only for configurado, o comando não cria novos problemas ou ementa os existentes. Os resultados são processados, e as questões existentes são coletadas para resultados. A saída contém a lista de URL de problemas que
devem ser rastreados em problemas se o modo somente leitura não estiver ativado.
Uso:
cocoa incident process-legacy \
<options>
Opções:
--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
VARIÁVEIS DE AMBIENTE:
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)
Se estiver usando github, poderá usar o campo --git-token-path para definir seu token GitHub e usar o campo --git-api-url para definir o URL da API GitHub Enterprise (o padrão é https://<region>.git.cloud.ibm.com/api/v4 ) em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se o GHE_TOKEN GH_URL e o --git-token-path --git-api-url ambos os pares forem fornecidos, --git-token-path e --git-api-url terão precedência.
Valores de retorno:
- O comando lista as URLs de problema de incidente localizadas ou criadas se o
--current-statusfoi transmitido comofailureO comando também fecha as URLs de problema de incidente correspondentes à mesma combinação de incidente-ferramenta-assunto se o--current-statustiver sido transmitido comofailure - No modo
--read-only, o comando lista detalhes de incidentes localizados se nenhum problema for localizado para esse incidente. - Se não houver problemas localizados ou todos os problemas localizados tiverem rótulo isento configurado, o comando sairá com status zero.
- Se algum dos problemas localizados não tiver rótulo isento configurado, o comando sairá com um status diferente de zero.
- No modo
--read-only, se for localizado qualquer novo incidente sem problema, o comando sairá com um status diferente de zero. - Se format == list-O comando lista as URLs de problemas de incidentes localizadas ou criadas se o
--current-statusfoi transmitido comofailure - If format == json-O comando imprime um JSON contendo uma matriz de objetos de descobertas (informações de problema adicionais) para cada um dos problemas localizados, criados e fechados automaticamente de acordo com o arquivo e assunto de resultado.
- Estrutura do objeto JSON de descobertas correspondente a um problema:
{
"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
}
Execução do comando:
$ 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
avaliação do incidente do cacau
Avalie o status dos problemas com base em due_date e isentar o rótulo e produzir as descobertas de problemas
Uso:
$ cocoa incident evaluate \
<options> \
<filePath>
Opções:
--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")
Variáveis de ambiente obrigatórias:
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)
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e o campo --git-api-url para definir a URL da API do # GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se ambos forem fornecidos, --git-token-path e --git-api-url terão precedência.
Valores de retorno:
- Se todos os problemas localizados tiverem o período Isento ou Carência configurado, o comando sairá com status zero.
- Se alguma das questões encontradas não tiver nenhum conjunto Isentos ou Grace Período, as saídas de comando com status nonzero.
- matriz JSON de descobertas.
- A estrutura do objeto JSON de descobertas correspondente a um problema
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
}
Execução do comando:
$ cocoa incident evaluate \
--org \
--repo \
--git-provider \
--git-token-path \
--filePath
estado de atualização do incidente de cacau
Atualiza o estado do problema do incidente para open ou close com base no status atual da URL do problema do incidente especificado.
Trecho de código:
$ cocoa incident update-state \
<options>
Opções:
Especifique as seguintes variáveis e valores opcionais para fornecer mais detalhes sobre o problema do incidente do cooca.
--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
Variáveis de ambiente obrigatórias:
Você deve fornecer as seguintes variáveis de ambiente e seus valores se não tiver usado as variáveis opcionais --org e --repo anteriormente.
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.
Se seu git-provider for github, use a seguinte variável de ambiente obrigatória:
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)
Você também pode usar as variáveis --git-token-path opcionais e --git-api-url para fornecer o caminho do token do Github e os valores da API URL. As variáveis opcionais têm maior precedência quando ambas são fornecidas,
--git-token-path e --git-api-url têm precedência.
Valores de retorno:
- O comando será encerrado com o código de retorno
0se a atualização do estado do problema for bem-sucedida. - O comando será encerrado com o código de retorno
1se a atualização do estado do problema não for bem-sucedida.
Execução do comando:
$ cocoa incident update-state \
--org \
--repo \
--git-provider \
--git-token-path \
--git-api-url \
--issue-url \
--comment \
--to-state
comandos de armários
Para carregar evidências e anexos no Cloud Object Storage bem como para fins de arquivamento. Ele é feito automaticamente quando as seguintes variáveis de ambiente estão presentes:
COS_ENDPOINT: O endpointonde o balde Cloud Object Storage pode ser acessado.COS_BUCKET_NAME: O nome do balde Cloud Object Storage.COS_API_KEY: Uma chave API IBM Cloudou Chave API de ID de serviçoque tem acesso a gravação no balde Cloud Object Storage.BACKUP_COS_ENDPOINT: O endpointonde o balde Cloud Object Storage pode ser acessado.BACKUP_COS_BUCKET_NAME: O nome do bucket BackupCloud Object Storage.BACKUP_COS_API_KEY: Uma chave de API IBM Cloud ou uma chave de API de ID de serviço que tenha acesso de leitor ao bucket Cloud Object Storage.IBM_AUTH_ENDPOINT: O terminal onde a chave API pode ser usada para gerar um token IAM(padrões parahttps://iam.cloud.ibm.com/identity/token){: external}.
ativo armário de cacau add < URI>
Inclui um ativo no armário de provas. Ele exibe as informações do ativo se o ativo especificado existir.
Opções:
--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)
Use a sinalização --dry-run se você não quiser adicionar nada ao armário, e deseja verificar o que seria adicionado ao armário.
O tipo do ativo pode ser especificado com o sinalizador --type
O parâmetro uri pode ser qualquer URIválido, mas alguns formatos são tratados especialmente:
- No caso
uriesquema édocker(ou seja, ele começa comdocker://), o comando assume a bandeira--type=image - No caso
uriesquema égit, ou o caminho termina com um sufixo.git, o comando assume a bandeira--type=commit
Quando type é image ou commit, o URI deve corresponder aos seguintes padrões:
- Para
image, o URI deve conter a digest de imagem (por exemplodocker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777)
Quando type é algo diferente de image ou commit, o sinalizador --type deve ser transmitido explicitamente
Mais detalhes podem ser adicionados ao ativo usando a sinalização --details, que aceita key=value pares.
Mais detalhes sobre a origem do ativo podem ser fornecidos utilizando-se a sinalização --origin, que aceita key=value pares.
Algumas variáveis de ambiente são captados automaticamente para adicionar detalhes sobre a origem do ativo:
- A configuração
TOOLCHAIN_CRNé a mesma que especificar--origin toolchain_crn=$TOOLCHAIN_CRN - A configuração
PIPELINE_IDé a mesma que especificar--origin pipeline_id=$PIPELINE_ID - A configuração
PIPELINE_RUN_IDé a mesma que especificar--origin pipeline_run_id=$PIPELINE_RUN_ID
A sinalização --date pode ser usada para substituir a data de criação do ativo (padrões para o momento atual), ele aceita qualquer string que Date.parse aceita.
Os ativos relacionados podem ser adicionados usando a sinalização --related (para diversos ativos relacionados, a sinalização pode ser especificada várias vezes). Ativos podem ser especificados com seu ID interno ou por seu URI.
Todos os IDs de ativos relacionados (toda a árvore até o primeiro ativo) serão adicionados ao campo parents no json do ativo.
Por padrão, o formato id (a sinalização --format ) imprime o ID interno do ativo criado. Com o formato json, o ativo inteiro vai ser impresso, como um objeto JSON.
Executando o comando para adicionar um commit Git:
$ cocoa locker asset add 'https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee' \
--details tag=v1.2.3
Saída de exemplo:
b5bbbbb55555b5555b555b55b5555bb5b555b5b555bb5b55bbb5555fbbbbb
Executando o comando para adicionar uma imagem 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
Saída de exemplo:
{
"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"
]
}
Executando o comando para adicionar um release:
$ 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
Saída de exemplo:
36d8852458adf44ab236c99beb69d7070d461d39480bc6b8ef7c771bee93cb49%
ativo armário de cacau get < URI>
Recupera um ativo do armário de provas.
Opções:
--type # Type of the asset
--version # Show version number
--format # Output format ("id", "json", default: "id")
Execute o comando:
cocoa locker asset get release:my-app@v1.2.3 --format json
Saída de exemplo:
{
"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
Saída de exemplo:
{
"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
Saída de exemplo:
{
"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": []
}
Resumo do ativo do bloqueador de cacau obter < URI>
Coleta o resumo de evidência para o ativo fornecido a partir do armário de evidências.
Opções:
--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.
Execute o comando:
cocoa locker asset summary get https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee \
--scope 11a1aa11-1a11-11a1-aa11-a11a1a1111a1 \
--environment prod \
--service-environment prod
Execute o comando para buscar o resumo das evidências mais recentes, excluindo o escopo transmitido usando --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
lista de ativos de armário de cacau < URI
Lista os ativos relacionados a partir do armário de provas.
Opções:
--type # Type of the asset
--version # Show version number
--format # Output format ("id", "json", default: "id")
Execute o comando:
cocoa locker asset list release:my-app@v1.2.3 --format id --type generic
Saída de exemplo:
1122211111122222111111111111111111111111111111666661111111111111
2222222222555552222222222222222333333222222222222222222222222222
3333333337777773333333333333333333333333333333344444433333333333
Executando o comando usando o formato json combinado com jq:
cocoa locker asset list release:my-app@v1.2.3 --format json --type generic | jq -r '.[].uri'
Saída de exemplo:
release:my-app@v1.2.3
docker://us.icr.io/foo/bar:v1.2.3@sha256:0000000011111111222222223333333344444444555555556666666677777777
https://github.com/foo/bar.git#aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee
provas de armário de cacau
Adiciam provas no armário de provas.
O armário de provas pode ser especificado usando bandeiras. Para obter mais informações, consulte comandos do armário de cacau.
As provas podem ser configuradas usando-se as seguintes bandeiras:
--evidence-type: uma string que identifica o tipo das provas (por exemplocom.ibm.unit_test)--evidence-type-version: uma string que identifica o esquema de detalhes da evidência (por exemplo1.0.0,v2e assim por diante)
Algumas bandeiras opcionais podem ser especificadas também:
--date: data de criação de evidências (padrões para o timestamp atual), aceita uma string que pode ser analisada comDate.parse.--details: detalhes da evidência podem ser especificados como pareskey=value, a sinalização pode ser especificada várias vezes (por exemplo--details result=success --details foo=bar, e assim por diante).--origin: detalhes sobre a origem das provas podem ser especificados usando-sekey=valuepares, por exemplo--origin job_id=123, e assim por diante.--asset: especifica quais ativos (por seu URI ou ID interno) são relevantes para as provas, vejacocoa locker assetcomandos. A sinalização pode ser especificada várias vezes. O ativo deve estar já presente no armário.--attachment: especifica anexos de arquivo para as provas. Cada anexo deve apontar para um arquivo existente, e cada nome de anexo deve ser exclusivo (ou seja,--attachment a/foo.json --attachment b/foo.jsonnão é permitido).--attachment-url: especifica as URLs de anexos que já estão armazenados no armário de evidências. Cada URL deve apontar para um anexo exclusivo, garantindo que não haja duplicatas. Esse sinalizador pode ser especificado várias vezes para incluir várias URLs--issue: lista de URLs de emissão, que podem ser usadas para acompanhar as atividades que estão relacionadas com as descobertas. A bandeira pode ser passada várias vezes.--findings-path: use esse caminho para passar a matriz de descobertas JSON que é a saída do comando do processo Incidente.--scope: um identificador único que pode ser usado para correlacionar evidências de várias fontes.--comment-on-issues: inclua um comentário com detalhes sobre a evidência criada para os problemas de incidentes fornecidos usando-se--issueflag- Como os problemas podem estar no
github, o provedor é analisado a partir das URLs de problemas - Toda questão deve ser do mesmo repositório
- As URLs de emissão devem corresponder ao padrão a seguir:
https://<host>/<owner>/<name>/issues/<issue number>-paragithub
- Variáveis de ambiente necessárias para acessar o repositório de problemas:
- se as urls apontam para problemas
github:GH_URL: opcional, padronizado parahttps://<region>.git.cloud.ibm.com/api/v4GHE_TOKEN
- se as urls apontam para problemas
- Como os problemas podem estar no
Informações de rótulo para um anexo em evidência JSON:
Cada seção de anexo na evidência JSON possui uma propriedade de rótulo para conter metadados sobre o anexo. Um valor padrão é atribuído ao rótulo e esse valor depende se a entrada do anexo é um caminho de arquivo ou URL do anexo. Passe um
rótulo personalizado adicionando ::label=<value> no final do caminho ou URL do anexo.
Exemplos:
-
--attachment path/to/attachment::label=label_name- Cria anexo usando o arquivo empath/to/attachmente define o valor do rótulo comolabel_name. Se o rótulo não for passado, o nome do arquivo será usado como valor do rótulo por padrão. -
--attachment-url url/of/attachment::label=label_name- Usa o anexo especificado noattachment-urle define o valor do rótulo comolabel_name. Se o rótulo não for passado, o valor do rótulo será uma sequência vazia por padrão.
Algumas variáveis de ambiente são captados automaticamente para adicionar detalhes sobre a origem do ativo:
- A configuração
TOOLCHAIN_CRNé a mesma que especificar--origin toolchain_crn=$TOOLCHAIN_CRN - A configuração
PIPELINE_IDé a mesma que especificar--origin pipeline_id=$PIPELINE_ID - A configuração
PIPELINE_RUN_IDé a mesma que especificar--origin pipeline_run_id=$PIPELINE_RUN_ID
O comportamento do comando pode ser alterado usando-se estas bandeiras:
--dry-run: Adicite nada ao armário, mas mostra o que seria adicionado.--cache-mode: semelhante ao dry-run. Na verdade, não adiciona a evidência ao armário, mas adiciona os anexos (se houver) ao armário. Mostra a evidência que seria incluída..--format: controla o formato de saída,idoujson(idpor padrão).
Execute o comando para salvar resultados para 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
Execute o comando para salvar resultados de teste unitário:
$ 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>
Execute o comando para criar uma nova evidência usando um anexo que já exista no bloqueador de evidências:
$ 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
Execute o comando para salvar os resultados do teste de unidade e adicionar um rótulo personalizado ao anexo:
$ 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
evidências do armário de cacau conseguem < evidências-id>
Recupera uma parte de evidência do armário.
Opções:
--version # Show version number
--format # Output format ("json", default: "json")
Execute o comando:
cocoa locker evidence get 0000000011111111222222223333333344444444555555556666666677777777
Saída de exemplo:
{
"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"
}
]
}
resumo do armário de cacau resumo < ativo-id>
Retorna o resumo de provas para um ou mais ativos. Quando nenhum ativo é especificado na linha de comando, os ativos são lidos a partir de stdin.
Bandeiras opcionais:
--latest-only: Descarte provas se evidências mais recentes estão disponíveis para um ativo (truepor padrão, configurado comofalsepara desativar esse comportamento)--scope: Conanhas provas que tem o escopo especificado apenas (verevidence add --scope), podem ser especificadas várias vezes--linked-scope: considera evidências que possuem o escopo vinculado especificado como escopo. Além disso, adiciona-os à propriedade linked-scopes no resumo de evidências retornado. Pode ser especificado várias vezes.--check-immutable-storage: Verifica se toda evidência também está presente em um balde Cloud Object Storage e é protegida por um período de retenção de pelo menos 365 dias. Anexacom.ibm.immutable_storageprovas para o resumo.- Veja a seção
cocoa lockersobre como configurar o balde Cloud Object Storage.
- Veja a seção
--dry-run: Tem um efeito quando combinado com--check-immutable-storage. Se usada,com.ibm.immutable_storageprovas só são anexadas ao sumário mas ele não é transferido para o armário de provas.--clone-dir: Um parâmetro opcional para determinar o caminho de clonagem do Evidence Repository; por padrão, ele clonará o diretório do repositório /tmp--initialized: Sinalizador opcional que assume que o armário de evidências já está clonado no local fornecido--clone-dirou/tmp/.--evidences-path: Para criar um resumo das evidências locais armazenadas em um cache, esse campo é usado para fornecer o caminho do arquivo em que todas as evidências estão presentes na matriz.
Execute o comando:
$ 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
Exemplo lido 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
armário de cacau anexo get < anexo-id>
Recupera um anexo que foi previamente carregado com cocoa locker evidence add.
Opções:
--version # Show version number
Execute o comando para fazer o upload de anexo:
$ 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
Saída de exemplo de upload de anexo:
{
...
"attachments": [
{
"hash": "9a841ef856a5de813dbe440b102b9bff3ca1831630292cff7323c557704f386b",
"url": "https://s3.private.us-south.cloud-object-storage.appdomain.cloud/test/assets/9a841ef856a5de813dbe440b102b9bff3ca1831630292cff7323c557704f386b/index.json",
"label": "unit-test"
}
],
...
}
Execute o comando para recuperar o anexo:
cocoa locker attachment get 5aa5555aa55aa55a555aa5a5aa555555aaaa5aa5aa5555a55a5aa5aa5a5aaaaa
armário de cacau
Verifica a configuração e as configurações necessárias do armário.
Atualmente, apenas o armário baseado em Cloud Object Storage tem um requisito de configuração:
- Como toda evidência deve ser mantida por pelo menos um ano, o balde Cloud Object Storage deve ser protegido por uma política de retenção. O período de retenção padrão deve ser maior ou igual a 365 dias.
Para obter mais informações, consulte comandos do armário de cacau.
Variáveis de ambiente obrigatórias:
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
Execute o comando:
cocoa locker check --provider='cos'
verificação de armário de cacau
Validar as provas necessárias com base nas verificações presentes no arquivo config cocoa locker evidence check.
Variáveis de ambiente obrigatórias:
Opções:
--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
Execute o comando:
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>`
coleta de evidências do armário de cacau
Colete evidências e armazene-as no armário. Esse comando é a implementação subjacente do script de shell collect-evidence.
Uso
cocoa locker evidence collect [OPTIONS]
Parâmetros necessários
-
--tool-type <string>Identificador de ferramenta (por exemplo, "sonarqube", "cra", "owasp-zap", "detect-secrets") -
--evidence-type <string>Tipo de evidência (por exemplo, " com.ibm.static_scan ", " com.ibm.unit_tests ", " com.ibm.detect_secrets ") -
--assets <key:type>Especificações de ativos no formato "key:type". Pode ser especificado várias vezes para vários ativos. Exemplo:--assets app-repo:repoou--assets my-image:artifact -
--status <string>Status da evidência:success|failure|pending -
--pipeline-run-id <string>Identificador de execução do pipeline -
--pipeline-namespace <string>Espaço de nome do pipeline:pr|ci|cd|cc -
--incident-org <string>Git organização para repositório de incidentes -
--incident-repo <string>Nome do repositório de incidentes
Parâmetros necessários para a plataforma tekton.
-
--pipeline-id <string>Identificador do pipeline -
--task-name <string>Nome da tarefa no pipeline -
--step-name <string>Nome da etapa na tarefa
Parâmetros Opcionais
-
--attachment <path>Arquivos anexos, como resultados de varredura (podem ser especificados várias vezes) -
--attachment-url <url>URLs de anexos pré-carregados (podem ser especificados várias vezes) -
--meta <key=value>Pares de chave=valor de metadados (podem ser especificados várias vezes) -
--additional-comment <string>Comentário adicional a ser incluído nas questões de incidentes -
--show-tableExibir os detalhes da evidência em um formato de tabela -
--dry-runVisualizar sem salvar no armário -
--cache-modeAdicionar somente anexos, ignorar a própria evidência -
--evidence-reuseAtivar o recurso de reutilização de evidências -
--evidence-per-assetCriar evidências para cada ativo separadamente -
--upload-logs <boolean>Carregue os registros como anexos se nenhum outro anexo for fornecido (padrão: true) -
--incident-git-provider <string>Git provedor:github|gitlab(padrão: github) -
--incident-git-token-path <path>Caminho para o token Git para autenticação -
--incident-git-api-url <url>Base da API personalizada Git URL -
--incident-labels <string>Rótulos a serem aplicados a problemas de incidentes (podem ser especificados várias vezes) -
--incident-assignees <string>GitHub/GitLab nomes de usuário a serem atribuídos a incidentes (podem ser especificados várias vezes) -
--comment-on-issuesVincular as evidências adicionais sobre questões de incidentes -
--pr-issue-managementPermitir a vinculação e o gerenciamento de pull requests a problemas -
--opt-in-auto-closePermitir o fechamento automático de incidentes se forem resolvidos -
--custom-exempt-label <string>Etiqueta indicando isenção de requisitos de conformidade -
--platform <string>Plataforma usada para buscar os registros:tekton|github-actions(padrão: tekton) -
--root-pipeline-run-id <string>Identificador da execução do pipeline raiz -
--toolchain-crn <string>Nome do recurso na nuvem (CRN) da cadeia de ferramentas -
--deployment-prefix <string>O prefixo de implantação -
--target-environment <string>Ambiente de destino (padrão: prod) -
--target-environment-purpose <string>Objetivo do ambiente alvo -
--collect-evidence-in-pr <string>Colete evidências no contexto de RP:none|success|all -
--pr-html-url <string>URL para o pull request associado -
--base-branch <string>Branch base para o pull request -
--branch <string>Nome da ramificação -
--gh-org <string>GitHub organização onde o pipeline é executado (específico para a plataforma de ações do github). -
--gh-repo <string>GitHub repositório onde o pipeline é executado (específico para a plataforma de ações do github). -
--gh-server-url <string>GitHub Ações: Servidor URL (específico para a plataforma de ações do github). -
--gh-repository-url <string>GitHub Ações: Repositório completo URL (específico para a plataforma de ações do github). -
--gh-run-attempt <string>GitHub Ações: Número da tentativa de execução do fluxo de trabalho (específico para a plataforma de ações do github). -
--run-id <string>Identificador de execução -
--xforce-api-key <string>Chave de API para IBM X-Force Exchange -
--xforce-password <string>Senha da API para IBM X-Force Exchange -
--xforce-url <string>IBM X-Force Exchange API URL
Exemplo
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"
reutilização de evidências do armário de cacau
Localizar e reutilizar evidências existentes para o ativo em questão. Esse comando é a implementação subjacente do script de shell check-evidence-for-reuse.
Uso
cocoa locker evidence reuse [OPTIONS]
Parâmetros necessários
-
--tool-type <string>Identificador de ferramenta (por exemplo, "sonarqube", "cra", "owasp-zap") -
--evidence-type <string>Tipo de evidência (por exemplo, " com.ibm.static_scan ", " com.ibm.unit_tests ") -
--assets <key:type>Especificações de ativos no formato "key:type" -
--pipeline-run-id <string>Identificador de execução do pipeline -
--pipeline-namespace <string>Espaço de nome do pipeline:pr|ci -
--incident-org <string>Git organização para repositório de incidentes -
--incident-repo <string>Nome do repositório de incidentes
Parâmetros necessários para a plataforma tekton.
-
--task-name <string>Nome da tarefa no pipeline -
--step-name <string>Nome da etapa na tarefa\ -
--pipeline-id <string>Identificador do pipeline
Parâmetros Opcionais
-
--meta <key=value>Metadados para validação em relação às evidências encontradas para reutilização (podem ser especificados várias vezes) -
--evidence-validity-period <number>Período de validade em horas (padrão: 24, máximo: 720 horas / 30 dias) -
--evidence-reuse-for-failureHabilitar a reutilização de evidências com falha (padrão: false) -
--dry-runModo de visualização sem reutilizar de fato as evidências -
--show-tableExibir os detalhes da evidência em um formato de tabela -
--format <string>Formato de saída:json(padrão: json) -
--incident-git-provider <string>Git provedor:github|gitlab(padrão: github) -
--incident-git-token-path <path>Caminho para o token Git para autenticação -
--incident-git-api-url <url>Base da API personalizada Git URL -
--incident-assignees <string>GitHub/GitLab nomes de usuário a serem atribuídos a incidentes (podem ser especificados várias vezes) -
--custom-exempt-label <string>Etiqueta indicando isenção de requisitos de conformidade -
--deployment-prefix <string>O prefixo de implantação -
--root-pipeline-run-id <string>Identificador da execução do pipeline raiz -
--toolchain-crn <string>Nome do recurso na nuvem (CRN) da cadeia de ferramentas -
--platform <string>Plataforma usada para buscar os registros:tekton|github-actions(padrão: tekton) -
--gh-org <string>GitHub organização onde o pipeline é executado (específico para a plataforma de ações do github) -
--gh-repo <string>GitHub repositório onde o pipeline é executado (específico para a plataforma de ações do github) -
--run-id <string>Identificador de execução -
--environment <string>Ambiente (padrão: dev) -
--serviceEnvironment <string>Ambiente de serviço (padrão: dev)
Exemplo
Uso básico:
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"
Com período de validade personalizado e validação de metadados:
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"
Reutilizar evidências que falharam:
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"
Código de saída
0: Evidências encontradas e reutilizadas com sucesso1: Nenhuma evidência reutilizável foi encontrada ou a validação falhou
comandos do cacau tekton
cocoa tekton get-pipeline-logs
Cria arquivos de log para cada etapa de uma execução de pipeline e os salva em um diretório. Use as variáveis de ambiente (PIPELINE_ID, PIPELINE_RUN_ID) ou substitua as variáveis de ambiente com sinalizações explícitas
(--pipeline-id, --pipeline-run-id). Os arquivos de log podem ser recuperados em um nível por tarefa e por etapa, além de fornecer sinalizadores --task-name e --step-name.
Se --task-name for fornecido, o comando tenta puxar e cria os arquivos de log para cada etapa para o nome da tarefa dada.
Se --step-name for fornecido ao longo de --task-name, o comando cria o arquivo de log para a etapa específica para o fornecido task-name. --step-name sem o --task-name é uma
assinatura de comando inválida.
Opções:
-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
Variáveis de ambiente obrigatórias:
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
Execução do comando:
$ cocoa tekton get-pipeline-logs \
--output-dir=<output-dir> \
--pipeline-id=<pipeline-id> \
--pipeline-run-id=<pipeline-run-id> \
--use-task-ref
comandos de comentário cacau
Adicionar comentário de cacau
Inclui um comentário em um problema ou solicitação pull no GitHub.
Opções:
--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
Variáveis de ambiente obrigatórias:
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)
Variáveis de ambiente obrigatórias, se você estiver usandoGitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Se estiver usando github, use o campo --git-token-path para definir o token GitHub e use o campo --git-api-url para definir a URL da API GitHub Enterprise em vez das variáveis de ambiente GHE_TOKEN e GH_URL. Se as propriedades do ambiente e os parâmetros da linha de comandos forem fornecidos, --git-token-path e --git-api-url terão precedência..
Execução do comando:
$ cocoa comment add --id 1 \
--content "This is a test comment" \
--type pr \
--git-provider github \
--org <github-organization> \
--repo <github-repo-name>
comandos de rótulo de cacau
adição de rótulo de cacau
Adiciona um ou mais rótulos a pull requests no GitHub ou GitLab.
Opções:
--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.
Variáveis de ambiente obrigatórias:
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.
Variáveis de ambiente necessárias para GitHub:
GHE_TOKEN= # Github Enterprise API Token (Optional if you are using --git-token-path)
Se você estiver usando GitHub, a seguinte variável de ambiente é necessária:
| Variável | Descrição |
|---|---|
GHE_TOKEN |
O token da API GitHub Enterprise. Opcional se você estiver usando a opção --git-token-path. |
Opções de linha de comando:
Como alternativa, você pode usar as seguintes opções de linha de comando para autenticar:
| opções da linha de comandos | Descrição |
|---|---|
--git-token-path |
Defina seu token do GitHub. |
--git-api-url |
Defina a URL da API GitHub Enterprise. |
Se as propriedades do ambiente e os parâmetros da linha de comando forem fornecidos, as opções --git-token-pat h e --git-api-url terão precedência.
Exemplo: Adicionando um rótulo a um pull request
Você pode adicionar um rótulo a um pull request executando o seguinte comando:
$ cocoa label add --id 1 \
--label "deployed" \
--type pr \
--git-provider github \
--org <github-organization> \
--repo <github-repo-name>
lista de comentários de solicitações de mudança de cacau
Lista todos os comentários de uma Solicitação de Mudança específica.
Opções:
Nota:
--lastdeve ser um número não negativo.--beforee--afteraceitam datas no formato ISO 8601 e não podem estar no futuro.--beforee--after, a data de--beforedeve ser maior do que a data de--after.--before,--after) e depois--lastpara limitar os resultados.Variáveis De Ambiente Necessárias, se você estiver usando o provedor ServiceNow v3:
Variáveis de ambiente adicionais, se você estiver usando o provedor ServiceNow v3:
Variáveis de ambiente necessárias para o provedor GitLab:
Variáveis de ambiente necessárias para o provedor GitHub Enterprise:
Execução do comando:
# 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