- Visão geral
- Introdução
- Conceitos
- Usando o UiPath CLI
- UiPath para agentes de codificação
- Guias de instruções
- Receitas de CI/CD
- Referência de comando
- Visão geral
- Códigos de saída
- Opções globais
- Agente de código uip
- Documento da UIP
- adicionar-tipo-dados-de-teste
- adicionar-dados-de-teste-fila
- adicionar-teste-variação de dados
- Analisar
- Criar
- criar projeto
- Comparação
- encontrar atividades
- obter-analisador-regras
- obter-padrão-atividade-xaml
- obter-erros
- obter-casos-de-teste-manuais
- obter-etapas-de-teste-manual
- Obter versões
- obter-fluxo-de-trabalho-exemplo
- indicar aplicativo
- indicar elemento
- inspecionar pacote
- instalar-data-fabric-entities
- instalar-ou-atualizar pacotes
- listar-data-fabric-entities
- listar-exemplos-de-fluxo-de-trabalho
- Empacotar
- restore
- arquivo de execução
- modelos-pesquisar
- Iniciar Studio
- interromper a execução
- UIA
- Traces da UIP
- Migração
- Visão geral
- Migração do.NET CLI legado
- Mapa de comando (legado para uip)
- Renomeações de sinalizadores
- Mudanças de impacto
- Referência e suporte
Guia do usuário da UiPath CLI
Cada verbo uipcli legado com seu equivalente uip . As entradas legadas refletem a superfície pública uipcli documentada para 2025.10 e anterior; a coluna uip corresponde às páginas de referência publicadas.
Como ler esta página. As linhas são agrupadas pela família de verbos legados (package, job, test, asset, solution, run). Cada linha carrega uma classificação:
- 1:1 — renomeação direta; o novo conjunto de sinalizadores está próximo o suficiente para que uma porta automática funcione.
- 2 etapas / N etapas — um verbo legado mapeia várias chamadas
uip. - Removido — substituição: … — o verbo legado não tem sucessor direto; a coluna "replacement" informa o fluxo idiomático de novo-CLI para o mesmo resultado.
Para obter detalhes no nível de sinalizador dentro de cada verbo, consulte Renomeações de sinalizadores. Para as alterações de autenticação/saída subjacentes que se aplicam a cada verbo, consulte Alterações interruptivas.
Pacote
| Comando legado | uip Equivalente | Observações |
|---|---|---|
uipcli package pack <project> | uip rpa pack <project> | 1:1. A nova superfície de sinalizador usa Kebab-case; --outputType → --output-type, --autoVersion → --auto-version, etc. uip rpa invocam o empacotador do Studio, que é suportado por.NET — o executor ainda precisa de um runtime.NET disponível. Consulte pacote de rpa uip. |
uipcli package analyze <project> | uip rpa analyze <project> --governance-file-path <policy> | 1:1. --governanceFilePath torna-se --governance-file-path (kebab-case). As regras do analisador de fluxo de trabalho permanecem inalteradas. O back-end.NET se aplica, o mesmo que rpa pack. Consulte análise de rpa do uip. |
uipcli package deploy <path> <url> <tenant> | uip or packages upload <path> Then uip or processes create --name <n> --package-key <k> --package-version <v> --folder-path <path> | 2 etapas. A implantação legada carrega o .nupkg e cria um processo em uma chamada; a nova CLI divide essas preocupações. Consulte uip ou upload de pacotes e uip ou criação de processos. |
uipcli package restore <project> | uip rpa restore <project> [outputPath] | 1:1. Restaura as dependências do pacote NuGet; é compatível com configurações do NuGet isoladas e personalizadas por meio dos mesmos sinalizadores que o legado. O back-end do.NET se aplica. Consulte restauração de rpa do uip. |
Pacote
# Legacy
uipcli package pack "C:\proj\project.json" -o "C:\dist" \
--outputType Process --autoVersion \
--traceLevel Information
# uip
uip rpa pack ./proj --output-type Process --auto-version
# Legacy
uipcli package pack "C:\proj\project.json" -o "C:\dist" \
--outputType Process --autoVersion \
--traceLevel Information
# uip
uip rpa pack ./proj --output-type Process --auto-version
Consulte pacote uip rpa para ver a lista completa de sinalizadores. A ferramenta encapsula o mesmo empacotador do Studio que a CLI legada usou, portanto, o formato de saída e o suporte ao projeto são idênticos.
análise de pacote
# Legacy
uipcli package analyze "C:\proj\project.json" \
--governanceFilePath "C:\policy.json" \
--resultPath "C:\result.json" \
--stopOnRuleViolation
# uip
uip rpa analyze ./proj \
--governance-file-path ./policy.json \
--result-path ./result.json \
--stop-on-rule-violation
# Legacy
uipcli package analyze "C:\proj\project.json" \
--governanceFilePath "C:\policy.json" \
--resultPath "C:\result.json" \
--stopOnRuleViolation
# uip
uip rpa analyze ./proj \
--governance-file-path ./policy.json \
--result-path ./result.json \
--stop-on-rule-violation
Implantação de pacote
Esta é a linha que captura cada porta do pipeline. Legado deploy é uma upload-e-criação único; uip divide-o em duas etapas explícitas para que o pacote possa ser carregado uma vez e associado a várias pastas.
# Legacy — upload and create a process in one call
uipcli package deploy "C:\pkg\InvoiceProcessing.1.0.3.nupkg" \
"https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Folders OR.Execution" \
-o "Shared" \
--processName "InvoiceProcessing" \
--entryPointsPath "Main.xaml"
# uip — upload, then create the process
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant TenantName
uip or packages upload ./InvoiceProcessing.1.0.3.nupkg
# response includes "body": "InvoiceProcessing:1.0.3"
uip or processes create \
--name InvoiceProcessing \
--package-key InvoiceProcessing \
--package-version 1.0.3 \
--folder-path Shared \
--entry-point Main.xaml
# Legacy — upload and create a process in one call
uipcli package deploy "C:\pkg\InvoiceProcessing.1.0.3.nupkg" \
"https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Folders OR.Execution" \
-o "Shared" \
--processName "InvoiceProcessing" \
--entryPointsPath "Main.xaml"
# uip — upload, then create the process
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant TenantName
uip or packages upload ./InvoiceProcessing.1.0.3.nupkg
# response includes "body": "InvoiceProcessing:1.0.3"
uip or processes create \
--name InvoiceProcessing \
--package-key InvoiceProcessing \
--package-version 1.0.3 \
--folder-path Shared \
--entry-point Main.xaml
Observações:
- O posicional
<orchestrator_url>e<orchestrator_tenant>do legado são substituídos pelo contexto da sessão deuip login(além da substituição opcional-t, --tenantem cada chamada). Eles nunca aparecem como argumentos posicionais emuip. --processNameé um nome de exibição personalizado para o processo criado. Emuipo equivalente é--nameemprocesses create— não--process(que não existe).--processNames <csv>(criação em massa de vários processos em 25.10) não tem equivalente direto; script um loop sobre linhas ou leia Soluções para o fluxo de vários processos recomendado.- Legado
--entryPointsPath(CSV) torna-se--entry-point(caminho único) emuip or processes create; executeprocesses createuma vez por ponto de entrada para pacotes com vários pontos de entrada.
restauração do pacote
# Legacy
uipcli package restore "C:\proj" \
--restoreFolder "C:\deps" \
--nugetConfigFilePath "C:\NuGet.Config"
# uip
uip rpa restore ./proj ./deps
# Legacy
uipcli package restore "C:\proj" \
--restoreFolder "C:\deps" \
--nugetConfigFilePath "C:\NuGet.Config"
# uip
uip rpa restore ./proj ./deps
Tarefa
| Comando legado | uip Equivalente | Observações |
|---|---|---|
uipcli job run <processName> <url> <tenant> | uip or jobs start <process-key> | 1:1 na intenção; identity é um GUID, não um nome. A CLI legada usou o nome de lançamento do processo como o argumento posicional; a nova CLI pega a chave de processo ( uip or processes list) retornada por. Use --wait-for-completion para o comportamento legado -w true + -W <timeout> . Consulte uip ou início de trabalhos. |
# Legacy
uipcli job run "InvoiceProcessing" \
"https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Folders OR.Execution OR.Jobs" \
-o "Shared" \
-i "C:\input.json" \
-w true -W 3600
# uip — resolve the name to a key, then start with wait-for-completion
PROCESS_KEY=$(uip or processes list --folder-path Shared \
--name InvoiceProcessing \
--output-filter "Data[0].Key" \
--output plain)
uip or jobs start "$PROCESS_KEY" \
--input-file ./input.json \
--wait-for-completion \
--timeout 3600
# Legacy
uipcli job run "InvoiceProcessing" \
"https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Folders OR.Execution OR.Jobs" \
-o "Shared" \
-i "C:\input.json" \
-w true -W 3600
# uip — resolve the name to a key, then start with wait-for-completion
PROCESS_KEY=$(uip or processes list --folder-path Shared \
--name InvoiceProcessing \
--output-filter "Data[0].Key" \
--output plain)
uip or jobs start "$PROCESS_KEY" \
--input-file ./input.json \
--wait-for-completion \
--timeout 3600
Detalhes no nível do sinalizador:
- Legado
-i, --input_path <file>→uipoferece duas alternativas:--input-arguments '<json>'para JSON incorporado ou--input-file <path>para uma carga útil de arquivo. Elas são mutuamente exclusivas. - Legado
-j, --jobscount <n>→--jobs-count <n>. - Legado
-P, --priority <Low|Normal|High>→--job-priority <Low|Normal|High>. -r, --robots <csv>→ sem equivalente direto (conceito somente de pasta clássica em legado). Máquinas de destino com--machine-keys <csv>(GUIDs) ou usuários com--user-keys <csv>(GUIDs).- Legado
-f, --fail_when_job_fails(padrãotrue) → a nova CLI sempre sai1se um trabalho esperado terminarFaulted; não há opções de exclusão. -R, --result_path <file>→ a nova CLI imprime o envelope do trabalho no stdout; redirecione com> result.jsonou use--output-filterpara extrair campos específicos.- Legado
-b, --job_type <Unattended|NonProduction>→--runtime-type <Unattended|Headless|Serverless|NonProduction|Development|TestAutomation>.
test
| Comando legado | uip Equivalente | Observações |
|---|---|---|
uipcli test run <url> <tenant> -s <testset> | uip tm testsets run --test-set-key <key> Then uip tm wait --execution-id <id> Then uip tm report get --execution-id <id> | 3 etapas (iniciar → aguardar → verificar). A nova CLI separa "disparar a execução" de "bloquear nela" de "ler o veredicto", para que os scripts de CI possam ramificar-se limpas em cada um. Consulte uip tm testessets run. O novo verbo reside no recurso testsets como uip tm testsets run — não no recurso executions (não há uip tm executions run). |
uipcli test run <url> <tenant> -P <project.json> (empacotar + testar um projeto) | uip rpa pack → uip or packages upload → criar um conjunto de testes no Test Manager → uip tm testsets run | N etapas. O fluxo legado legado "empacotar este projeto, implantá-lo, executar seus testes" é dividido entre as ferramentas rpa, or e tm . A criação do conjunto de testes é normalmente uma configuração única feita na interface gráfica da Web do Test Manager. |
uipcli test parallel <url> <tenant> --testsConfigurationFilePath <file> | Nenhum equivalente direto — loop sobre chamadas uip tm testsets run | Removido — substituição: script de um lançamento paralelo de conjuntos de testes independentes com uip tm testsets run (cada um retorna um ExecutionId), então um único uip tm wait por execução. O driver de projeto de teste do verbo legado parallel (que invocou uipcli test run internamente) não tem contraparte; o novo modelo pressupõe que os conjuntos de testes já foram criados no Test Manager. |
execução de teste (conjunto de testes único)
# Legacy
uipcli test run \
"https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Folders OR.TestSets OR.TestSetExecutions" \
-o "Shared" \
-s "Smoke Suite" \
--out junit \
--result_path "C:\results.xml" \
--timeout 1800
# uip — three verbs, clean exit-code branching
EXECUTION_ID=$(uip tm testsets run \
--test-set-key DEMO:10 \
--output-filter "Data.ExecutionId" \
--output plain)
if ! uip tm wait --execution-id "$EXECUTION_ID" --project-key DEMO --timeout 1800; then
case $? in
2) echo "timeout" >&2; exit 2 ;;
*) echo "wait failed" >&2; exit 1 ;;
esac
fi
FAILED=$(uip tm report get --execution-id "$EXECUTION_ID" --project-key DEMO \
--output-filter "Data.Failed" --output plain)
if [ "$FAILED" -gt 0 ]; then
uip tm result download --execution-id "$EXECUTION_ID" --project-key DEMO \
--destination ./results.xml
exit 1
fi
# Legacy
uipcli test run \
"https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Folders OR.TestSets OR.TestSetExecutions" \
-o "Shared" \
-s "Smoke Suite" \
--out junit \
--result_path "C:\results.xml" \
--timeout 1800
# uip — three verbs, clean exit-code branching
EXECUTION_ID=$(uip tm testsets run \
--test-set-key DEMO:10 \
--output-filter "Data.ExecutionId" \
--output plain)
if ! uip tm wait --execution-id "$EXECUTION_ID" --project-key DEMO --timeout 1800; then
case $? in
2) echo "timeout" >&2; exit 2 ;;
*) echo "wait failed" >&2; exit 1 ;;
esac
fi
FAILED=$(uip tm report get --execution-id "$EXECUTION_ID" --project-key DEMO \
--output-filter "Data.Failed" --output plain)
if [ "$FAILED" -gt 0 ]; then
uip tm result download --execution-id "$EXECUTION_ID" --project-key DEMO \
--destination ./results.xml
exit 1
fi
Observações no nível do sinalizador:
- Legado
-s, --testset <name>leva um nome de exibição; o novo--test-set-key <key>leva a chave do Test Manager (formatoPROJECT:NN). Procure comuip tm testsets list --project-key <key>. - O legado
-t, --testsetkey <key>(um alias legado mais recente) também existe — esses valores são movidos diretamente para o novo--test-set-key. - O legado
--out junit|uipathtorna-se o novouip tm result download --output-format junit(JUnit é o padrão; o XML nativo da UiPath também é suportado). - Legado
--attachRobotLogs→ anexar artefatos por meio deuip tm attachment download --execution-id <id>após a execução. - Legado
--retryCount <n>→uip tm executions retry --execution-id <id>executa novamente apenas os casos com falha de uma execução finalizada. Não há sinalizador de nova tentativa automática no início; script com a ramificação de saídareport getacima.
teste paralelo
Não há verbo uip que espelha o test parallel legado. O idioma mais próximo é um loop de shell que inicia várias chamadas uip tm testsets run simultaneamente, captura cada ExecutionId e, então, espera em cada uma:
# Launch in parallel (bash)
EXEC1=$(uip tm testsets run --test-set-key DEMO:10 --output-filter Data.ExecutionId --output plain) &
EXEC2=$(uip tm testsets run --test-set-key DEMO:11 --output-filter Data.ExecutionId --output plain) &
wait
# Then wait on each
uip tm wait --execution-id "$EXEC1" --project-key DEMO --timeout 1800 &
uip tm wait --execution-id "$EXEC2" --project-key DEMO --timeout 1800 &
wait
# Launch in parallel (bash)
EXEC1=$(uip tm testsets run --test-set-key DEMO:10 --output-filter Data.ExecutionId --output plain) &
EXEC2=$(uip tm testsets run --test-set-key DEMO:11 --output-filter Data.ExecutionId --output plain) &
wait
# Then wait on each
uip tm wait --execution-id "$EXEC1" --project-key DEMO --timeout 1800 &
uip tm wait --execution-id "$EXEC2" --project-key DEMO --timeout 1800 &
wait
O esquema --testsConfigurationFilePath legado (que listava caminhos por projeto e seus conjuntos de testes) não tem contraparte uip ; gere o loop a partir da sua matriz de CI ou de uma lista simples de shell de chaves de conjuntos de testes.
Ativo
| Comando legado | uip Equivalente | Observações |
|---|---|---|
uipcli asset deploy <csv> <url> <tenant> | Percorrer uip resource assets create <name> <value> por linha | Removido — substituição: itere o CSV em um loop de shell e chame create por linha. A nova CLI não oferece uma implantação de CSV única; consulte ativos de recursos da uip. |
uipcli asset delete <csv> <url> <tenant> | Percorrer uip resource assets delete <key> por linha | Removido — substituição: iterar e excluir por chave. delete leva o GUID do ativo, não o nome — resolve os nomes para as chaves primeiro com uip resource assets list --folder-path <path>. |
# Legacy — bulk CSV
uipcli asset deploy "C:\assets.csv" "https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Assets" -o "Shared"
# uip — script the loop
# CSV columns: name,type,value,description
while IFS=, read -r NAME TYPE VALUE DESCRIPTION; do
[ "$NAME" = "name" ] && continue # skip header
uip resource assets create "$NAME" "$VALUE" \
--folder-path Shared \
--type "$TYPE" \
--description "$DESCRIPTION"
done < assets.csv
# Legacy — bulk CSV
uipcli asset deploy "C:\assets.csv" "https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Assets" -o "Shared"
# uip — script the loop
# CSV columns: name,type,value,description
while IFS=, read -r NAME TYPE VALUE DESCRIPTION; do
[ "$NAME" = "name" ] && continue # skip header
uip resource assets create "$NAME" "$VALUE" \
--folder-path Shared \
--type "$TYPE" \
--description "$DESCRIPTION"
done < assets.csv
Os ativos do tipo credencial em legados usam a forma de valor username::password . Com uip resource assets create, o formato do valor da Credencial é username:password (dois pontos únicos), e os segredos exigem --credential-store-key <guid>. Consulte ativos de recursos uip — criar.
Solução
| Comando legado | uip Equivalente | Observações |
|---|---|---|
uipcli solution pack <path> | uip solution pack <solutionPath> <outputPath> | 1:1 na intenção. A saída é uma .zip em ambas as geração (contém arquivos .nupkg internos); a forma de argumento foi alterada de -o para um diretório de saída posicional. |
uipcli solution analyze <path> | uip rpa analyze <project> por projeto | N etapas. Execute o analisador em cada projeto dentro da solução; não há um único verbo uip solution analyze . |
uipcli solution restore <path> | uip rpa restore <project> por projeto | N etapas. Mesmo padrão de solution analyze. |
uipcli solution upload-package <zip> | uip solution publish <zip> | 1:1. O novo nome é publish; o comportamento (carregar para o feed da solução do tenant) não foi alterado. |
uipcli solution download-package <name> <version> | Nenhum equivalente direto | Removido — substituição: baixe o(s) .nupkg pacote(s) subjacente(s) com uip or packages download <key> ou busque o registro da solução publicada por meio da API REST do Orchestrator. |
uipcli solution delete-package <name> <version> | uip solution packages delete <packageName> <packageVersion> | 1:1. |
uipcli solution download-config <name> | uip solution deploy config get <package-name> [--package-version <v>] [-d <path>] | 1:1. |
uipcli solution deploy <...> | uip solution deploy run --name <n> --package-name <n> --package-version <v> --folder-name <n> [--folder-path <path>] | 1:1 na intenção; nomes de sinalizadores alterados. --name o nome da implantação , não o nome do pacote. Consulte first-pipeline.md — Etapa 3. |
uipcli solution deploy-activate <...> | uip solution deploy activate <deployment-name> | 1:1. |
uipcli solution deploy-uninstall <...> | uip solution deploy uninstall <deployment-name> | 1:1. |
# Legacy — pack + upload + deploy, one verb each
uipcli solution pack "C:\my-solution" \
-o "C:\dist" \
-v 1.2.0
uipcli solution upload-package "C:\dist\my-solution.1.2.0.zip" \
"https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Folders"
uipcli solution deploy "..." "..."
# uip — publish replaces upload-package; positional --version in pack
uip login --client-id env.UIPATH_CLIENT_ID --client-secret env.UIPATH_CLIENT_SECRET --tenant TenantName
uip solution pack ./my-solution ./dist --version 1.2.0
uip solution publish ./dist/my-solution.1.2.0.zip
uip solution deploy run \
--name "my-solution-deployment" \
--package-name my-solution \
--package-version 1.2.0 \
--folder-name MySolution \
--folder-path Shared
# Legacy — pack + upload + deploy, one verb each
uipcli solution pack "C:\my-solution" \
-o "C:\dist" \
-v 1.2.0
uipcli solution upload-package "C:\dist\my-solution.1.2.0.zip" \
"https://cloud.uipath.com/" "TenantName" \
-A "myOrg" -I "<app-id>" -S "<app-secret>" \
--applicationScope "OR.Folders"
uipcli solution deploy "..." "..."
# uip — publish replaces upload-package; positional --version in pack
uip login --client-id env.UIPATH_CLIENT_ID --client-secret env.UIPATH_CLIENT_SECRET --tenant TenantName
uip solution pack ./my-solution ./dist --version 1.2.0
uip solution publish ./dist/my-solution.1.2.0.zip
uip solution deploy run \
--name "my-solution-deployment" \
--package-name my-solution \
--package-version 1.2.0 \
--folder-name MySolution \
--folder-path Shared
Consulte Seu primeiro pipeline para um guia com explicações para cada etapa.
Executar
| Comando legado | uip Equivalente | Observações |
|---|---|---|
uipcli run <arguments.json> | Nenhum equivalente direto | Removido — substituição: reescreva a etapa do pipeline como um script de shell que chama uip diretamente com sinalizadores. O verbo run legado consumia um arquivo JSON que serializava uma invocação uipcli <verb> <args> completa (produzida pelo sinalizador --captureCommandToJsonFile oculto); uip não envia um equivalente. |
A CLI 1.x não expõe um sinalizador --from-file universal para repetição de argumentos em massa. Se seu pipeline depender desse padrão (comum com o fluxo de trabalho legado captureCommandToJsonFile + uipcli run ), converta a carga útil do JSON em invocações uip diretas.
Comandos sem equivalente legado
Esses verbos uip não têm contraparte no CLI legado; eles abrem fluxos de trabalho que não eram possíveis apenas com uipcli . Nenhuma delas requer migração — elas são um novo recurso.
uip login,uip login tenant list/set,uip logout,uip login status— gerenciamento completo da sessão.uip or folders *,uip or machines *,uip or users *,uip or roles *,uip or licenses *,uip or sessions *,uip or audit-logs *,uip or calendars *,uip or credential-stores *,uip or feeds *,uip or settings *— superfície de administração completa do Orchestrator.uip or jobs list / get / stop / restart / resume / logs / traces / healing-data / history,uip or processes list / get / edit / update-version / rollback,uip or packages list / get / versions / entry-points / download— verbos de introspecção que o legado não expôs.uip resource buckets / bucket-files / libraries / queues / queue-items / triggers / webhooks— CRUD de recurso do Orchestrator.uip agent *,uip codedagent *,uip codedapp *,uip flow *,uip maestro *,uip api-workflow *,uip df *,uip insights *,uip traces *,uip docsai *,uip vss *— superfície totalmente nova.uip tools *,uip skills *,uip mcp,uip completion— gerenciamento no nível do host.
Veja também
- Renomeações de sinalizadores — todos os sinalizadores que alteraram o nome entre
uipclieuip, com a regra de mapeamento. - Alterações interruptivas — alterações semânticas por trás da renomeação (auth, formato stdout, códigos de saída).
- Exemplos de pipeline — antes/depois dos pipelines do Azure DevOps e do Jenkins.
- Índice de referência — cada ferramenta
uipe verbo em um só lugar.