- Vue d'ensemble (Overview)
- Démarrer
- Concepts
- Utilisation de la UiPath CLI
- Guides pratiques
- Revenus CI/CD
- Référence de commande
- Vue d'ensemble (Overview)
- Codes de sortie
- Options globales
- agent codé uip
- encodeur UIP
- uip ancrage dans le contexte
- UiPath Docsai
- Fonction UiP
- garde-fous UiP
- configuration llm uip
- uip llm-passerelle
- uip model-hub
- Tâches (Jobs)
- Dossiers
- Processus
- Paquets
- Machines
- Utilisateurs
- Rôles
- Licences
- Flux
- Pièces jointes (Attachments)
- Sessions
- Calendriers
- magasins d'informations d’identification
- journaux-audit
- paramètres
- Actifs
- Compartiments
- Compartiment-fichiers
- Bibliothèques
- Files d'attente (Queues)
- éléments de la file d'attente
- Déclencheurs (Triggers)
- Webhooks
- add-test-data-entity
- ajouter une file d'attente de données de test
- add-test-data-variation
- Analyser
- Construire
- créer-projet
- Différence
- recherche-activités
- Obtenir les règles de l'analyse
- récupérer-activité-xaml par défaut
- Récupérer les erreurs
- obtenir des cas de test manuels
- Obtenir les étapes de test manuelles
- Get-Library-Object-Repository
- Récupérer le référentiel d'objets
- Obtenir les versions
- exemple de workflow
- indiquer l'application
- indiquer l'élément
- inspecter-package
- install-data-fabric-entities
- installer-ou-Update-packages
- list-data-fabric-entités
- instances-liste
- listes-exemples-workflow
- Créer un package
- Publier
- Distant
- restore
- exécuter, déboguer et amp; Exécution
- Exécuter le fichier
- modèles-recherche
- Démarrer-Studio
- arrêter l'exécution
- TM
- UIA
- tâches UIP
- Traçages UIP
- Commentaires sur les traces UIP
- Migration
- Référence et assistance
Schéma CI/CD: Azure Pipelines
YAML Azure Pipelines pour l'authentification, la compression, la publication, le déploiement d'une solution UiPath et l'exécution des tests de Test Manager.
Cette page vous fournit une azure-pipelines.yml complète qui installe la CLI, s'authentifie avec une application externe, compresse et publie une solution UiPath, la déploie dans Orchestrator et exécute une suite Test Manager dans le cadre du déploiement. Le pipeline est autonome: copiez-le à la racine de votre référentiel, reliez-le à deux clés secrètes et il s'exécute.
Pour les principes sous-jacents — authentification, mise en cache, préinstallation d'outils, épinglage de version — voir Comment: déployer dans Orchestrator depuis CI. Cette page se concentre sur la syntaxe des pipelines Azure.
Prérequis
Avant de copier le YAML ci-dessous:
- Créez une application externe dans UiPath avec les étendues
OR.*dont votre pipeline a besoin. Voir Authentification — Flux 2. - Stockez les clés secrètes dans un groupe de variables Azure DevOps:
- Paramètres du projet → Pipelines → Bibliothèque → Nouveau groupe de variables (par exemple,
uipath-prod). - Ajoutez
UIPATH_CLIENT_IDetUIPATH_CLIENT_SECRET— marquez les deux comme secret (icône de cadenas). - Ajoutez éventuellement
UIPATH_TENANT(pas un secret).
- Paramètres du projet → Pipelines → Bibliothèque → Nouveau groupe de variables (par exemple,
- Liez le groupe de variables au pipeline (voir le bloc
variablesci-dessous). - Enregistrez un projet et un ensemble de tests Test Manager (si vous souhaitez l'étape de test). Vous aurez besoin de
TEST_SET_KEY(formatPROJECT:42) etPROJECT_KEY. Consultez Comment procéder: exécuter des tests à partir de la CLI.
Azure-Pipelines.yml
trigger:
branches:
include: [ main ]
pr:
branches:
include: [ main ]
variables:
- group: uipath-prod # contains UIPATH_CLIENT_ID, UIPATH_CLIENT_SECRET
- name: CLI_VERSION
value: '1.0.0'
- name: NODE_VERSION
value: '22.x'
- name: SOLUTION_NAME
value: 'my-solution'
- name: SOLUTION_DIR
value: '$(Build.SourcesDirectory)/my-solution'
- name: OUTPUT_DIR
value: '$(Build.ArtifactStagingDirectory)'
- name: SOLUTION_VERSION
value: '1.2.0-ci.$(Build.BuildId)'
# Path where npm places globally-installed packages. Used to cache the CLI + tools.
- name: NPM_GLOBAL_CACHE
value: '$(HOME)/.npm-global/lib/node_modules'
stages:
- stage: Build
displayName: 'Pack the Solution'
jobs:
- job: pack
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
displayName: 'Use Node.js $(NODE_VERSION)'
inputs:
versionSpec: $(NODE_VERSION)
- task: Cache@2
displayName: 'Cache npm global (@uipath/cli)'
inputs:
key: 'uip | "$(Agent.OS)" | $(CLI_VERSION)'
path: $(NPM_GLOBAL_CACHE)
- script: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
export PATH="$HOME/.npm-global/bin:$PATH"
echo "##vso[task.prependpath]$HOME/.npm-global/bin"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@$(CLI_VERSION)"
fi
uip --version
displayName: 'Install UiPath CLI'
- script: |
set -euo pipefail
uip solution pack "$(SOLUTION_DIR)" "$(OUTPUT_DIR)" \
--name "$(SOLUTION_NAME)" \
--version "$(SOLUTION_VERSION)"
displayName: 'Pack Solution'
- publish: '$(OUTPUT_DIR)'
artifact: solution-zip
displayName: 'Publish artifact'
- stage: Deploy
displayName: 'Publish to feed and deploy to Orchestrator'
dependsOn: Build
jobs:
- deployment: deploy
environment: 'uipath-prod' # Azure DevOps environment — gates / approvals live here
pool:
vmImage: 'ubuntu-latest'
strategy:
runOnce:
deploy:
steps:
- task: NodeTool@0
displayName: 'Use Node.js $(NODE_VERSION)'
inputs:
versionSpec: $(NODE_VERSION)
- task: Cache@2
displayName: 'Cache npm global (@uipath/cli)'
inputs:
key: 'uip | "$(Agent.OS)" | $(CLI_VERSION)'
path: $(NPM_GLOBAL_CACHE)
- script: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
export PATH="$HOME/.npm-global/bin:$PATH"
echo "##vso[task.prependpath]$HOME/.npm-global/bin"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@$(CLI_VERSION)"
fi
displayName: 'Install UiPath CLI'
- script: |
set -euo pipefail
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant "$UIPATH_TENANT"
displayName: 'Authenticate'
env:
UIPATH_CLIENT_ID: $(UIPATH_CLIENT_ID)
UIPATH_CLIENT_SECRET: $(UIPATH_CLIENT_SECRET)
UIPATH_TENANT: $(UIPATH_TENANT)
- download: current
artifact: solution-zip
- script: |
set -euo pipefail
ARTIFACT=$(find "$(Pipeline.Workspace)/solution-zip" -maxdepth 1 -name "*.zip" | head -1)
uip solution publish "$ARTIFACT"
displayName: 'Publish to tenant feed'
- script: |
set -euo pipefail
uip solution deploy run \
--name "$(SOLUTION_NAME)-$(Build.BuildId)" \
--package-name "$(SOLUTION_NAME)" \
--package-version "$(SOLUTION_VERSION)" \
--folder-name MySolution \
--parent-folder-path Shared
displayName: 'Deploy to Orchestrator'
- stage: Test
displayName: 'Run Test Manager suite'
dependsOn: Deploy
condition: and(succeeded(), ne(variables['TEST_SET_KEY'], ''))
jobs:
- job: test
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
displayName: 'Use Node.js $(NODE_VERSION)'
inputs:
versionSpec: $(NODE_VERSION)
- task: Cache@2
displayName: 'Cache npm global (@uipath/cli)'
inputs:
key: 'uip | "$(Agent.OS)" | $(CLI_VERSION)'
path: $(NPM_GLOBAL_CACHE)
- script: |
set -euo pipefail
export PATH="$HOME/.npm-global/bin:$PATH"
echo "##vso[task.prependpath]$HOME/.npm-global/bin"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@$(CLI_VERSION)"
fi
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant "$UIPATH_TENANT"
displayName: 'Install + authenticate'
env:
UIPATH_CLIENT_ID: $(UIPATH_CLIENT_ID)
UIPATH_CLIENT_SECRET: $(UIPATH_CLIENT_SECRET)
UIPATH_TENANT: $(UIPATH_TENANT)
- script: |
set -euo pipefail
EXECUTION_ID=$(uip tm testsets run \
--test-set-key "$TEST_SET_KEY" \
--output-filter "Data.ExecutionId" \
--output plain)
echo "started execution $EXECUTION_ID"
if ! uip tm wait \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY" \
--timeout 1800; then
code=$?
case "$code" in
2) echo "##vso[task.logissue type=error]test run did not finish within 30 minutes"; exit 2 ;;
*) echo "##vso[task.logissue type=error]wait failed (exit $code)"; exit "$code" ;;
esac
fi
uip tm report get \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY"
FAILED=$(uip tm report get \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY" \
--output-filter "Data.Failed" \
--output plain)
if [ "$FAILED" -gt 0 ]; then
echo "##vso[task.logissue type=error]$FAILED test case(s) failed"
exit 1
fi
displayName: 'Launch, wait, verify'
env:
TEST_SET_KEY: $(TEST_SET_KEY)
PROJECT_KEY: $(PROJECT_KEY)
trigger:
branches:
include: [ main ]
pr:
branches:
include: [ main ]
variables:
- group: uipath-prod # contains UIPATH_CLIENT_ID, UIPATH_CLIENT_SECRET
- name: CLI_VERSION
value: '1.0.0'
- name: NODE_VERSION
value: '22.x'
- name: SOLUTION_NAME
value: 'my-solution'
- name: SOLUTION_DIR
value: '$(Build.SourcesDirectory)/my-solution'
- name: OUTPUT_DIR
value: '$(Build.ArtifactStagingDirectory)'
- name: SOLUTION_VERSION
value: '1.2.0-ci.$(Build.BuildId)'
# Path where npm places globally-installed packages. Used to cache the CLI + tools.
- name: NPM_GLOBAL_CACHE
value: '$(HOME)/.npm-global/lib/node_modules'
stages:
- stage: Build
displayName: 'Pack the Solution'
jobs:
- job: pack
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
displayName: 'Use Node.js $(NODE_VERSION)'
inputs:
versionSpec: $(NODE_VERSION)
- task: Cache@2
displayName: 'Cache npm global (@uipath/cli)'
inputs:
key: 'uip | "$(Agent.OS)" | $(CLI_VERSION)'
path: $(NPM_GLOBAL_CACHE)
- script: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
export PATH="$HOME/.npm-global/bin:$PATH"
echo "##vso[task.prependpath]$HOME/.npm-global/bin"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@$(CLI_VERSION)"
fi
uip --version
displayName: 'Install UiPath CLI'
- script: |
set -euo pipefail
uip solution pack "$(SOLUTION_DIR)" "$(OUTPUT_DIR)" \
--name "$(SOLUTION_NAME)" \
--version "$(SOLUTION_VERSION)"
displayName: 'Pack Solution'
- publish: '$(OUTPUT_DIR)'
artifact: solution-zip
displayName: 'Publish artifact'
- stage: Deploy
displayName: 'Publish to feed and deploy to Orchestrator'
dependsOn: Build
jobs:
- deployment: deploy
environment: 'uipath-prod' # Azure DevOps environment — gates / approvals live here
pool:
vmImage: 'ubuntu-latest'
strategy:
runOnce:
deploy:
steps:
- task: NodeTool@0
displayName: 'Use Node.js $(NODE_VERSION)'
inputs:
versionSpec: $(NODE_VERSION)
- task: Cache@2
displayName: 'Cache npm global (@uipath/cli)'
inputs:
key: 'uip | "$(Agent.OS)" | $(CLI_VERSION)'
path: $(NPM_GLOBAL_CACHE)
- script: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
export PATH="$HOME/.npm-global/bin:$PATH"
echo "##vso[task.prependpath]$HOME/.npm-global/bin"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@$(CLI_VERSION)"
fi
displayName: 'Install UiPath CLI'
- script: |
set -euo pipefail
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant "$UIPATH_TENANT"
displayName: 'Authenticate'
env:
UIPATH_CLIENT_ID: $(UIPATH_CLIENT_ID)
UIPATH_CLIENT_SECRET: $(UIPATH_CLIENT_SECRET)
UIPATH_TENANT: $(UIPATH_TENANT)
- download: current
artifact: solution-zip
- script: |
set -euo pipefail
ARTIFACT=$(find "$(Pipeline.Workspace)/solution-zip" -maxdepth 1 -name "*.zip" | head -1)
uip solution publish "$ARTIFACT"
displayName: 'Publish to tenant feed'
- script: |
set -euo pipefail
uip solution deploy run \
--name "$(SOLUTION_NAME)-$(Build.BuildId)" \
--package-name "$(SOLUTION_NAME)" \
--package-version "$(SOLUTION_VERSION)" \
--folder-name MySolution \
--parent-folder-path Shared
displayName: 'Deploy to Orchestrator'
- stage: Test
displayName: 'Run Test Manager suite'
dependsOn: Deploy
condition: and(succeeded(), ne(variables['TEST_SET_KEY'], ''))
jobs:
- job: test
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
displayName: 'Use Node.js $(NODE_VERSION)'
inputs:
versionSpec: $(NODE_VERSION)
- task: Cache@2
displayName: 'Cache npm global (@uipath/cli)'
inputs:
key: 'uip | "$(Agent.OS)" | $(CLI_VERSION)'
path: $(NPM_GLOBAL_CACHE)
- script: |
set -euo pipefail
export PATH="$HOME/.npm-global/bin:$PATH"
echo "##vso[task.prependpath]$HOME/.npm-global/bin"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@$(CLI_VERSION)"
fi
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant "$UIPATH_TENANT"
displayName: 'Install + authenticate'
env:
UIPATH_CLIENT_ID: $(UIPATH_CLIENT_ID)
UIPATH_CLIENT_SECRET: $(UIPATH_CLIENT_SECRET)
UIPATH_TENANT: $(UIPATH_TENANT)
- script: |
set -euo pipefail
EXECUTION_ID=$(uip tm testsets run \
--test-set-key "$TEST_SET_KEY" \
--output-filter "Data.ExecutionId" \
--output plain)
echo "started execution $EXECUTION_ID"
if ! uip tm wait \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY" \
--timeout 1800; then
code=$?
case "$code" in
2) echo "##vso[task.logissue type=error]test run did not finish within 30 minutes"; exit 2 ;;
*) echo "##vso[task.logissue type=error]wait failed (exit $code)"; exit "$code" ;;
esac
fi
uip tm report get \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY"
FAILED=$(uip tm report get \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY" \
--output-filter "Data.Failed" \
--output plain)
if [ "$FAILED" -gt 0 ]; then
echo "##vso[task.logissue type=error]$FAILED test case(s) failed"
exit 1
fi
displayName: 'Launch, wait, verify'
env:
TEST_SET_KEY: $(TEST_SET_KEY)
PROJECT_KEY: $(PROJECT_KEY)
Présentation
Étape 1 - Construire
NodeTool@0épingle Node.js à la version 22. Épingler à un majeur; la CLI nécessite au moins 22 versions.Cache@2met en cache le répertoirenode_modulesglobal npm. La clé de cache inclut$(CLI_VERSION)pour qu’une bogue de version s’invalide correctement.- L'étape d'installation fait basculer le préfixe global de npm sur
$HOME/.npm-global(aucunsudonécessaire), l'ajoute au PATH et, — uniquement si le cache est manquant, installe@uipath/cli. La première invocation d'une commande d'outil (uip solution …,uip tm …) installe automatiquement cet outil, donc aucunuip tools installexplicite n'est nécessaire. Voir Installation de la UiPath CLI — CI/CD et Modèles de script — versions épinglées. - L'étape de compression invoque
uip solution packavec une--versionexplicite (ne vous fondez jamais sur la valeur1.0.0par défaut dans CI). publish: ...télécharge l'intégralité de$(OUTPUT_DIR)sous forme d'artefact de pipeline nommésolution-zipafin que l'étape de déploiement puisse l'utiliser. La publication du répertoire plutôt qu’un nom de fichier codé en dur maintient la formule stable en fonction des modifications de convention d’affectation de noms CLI.
Étape 2 - Déployer
Utilise une tâche de déploiement liée à un environnement nommé. Les environnements sont l'endroit où vous configurez les passerelles et les approbations dans Azure DevOps — l'YAML reste simple.
- Réinstalle la CLI (le cache doit atteindre la deuxième étape de la même exécution).
uip loginutilise le préfixeenv.VAR_NAMEpour l’ID client et la clé secrète. Le blocenv:au niveau de l'étape mappe$(UIPATH_CLIENT_ID)(du groupe de variables) à la variable d'environnement réelleUIPATH_CLIENT_IDque l'indicateur résout. Ne transmettez pas le secret littéralement sur la ligne de commande (--client-secret "$(UIPATH_CLIENT_SECRET)") - qui le introduit dans le journal de build et la sortieps. La fonctionnalité de préfixeenv.est documentée dans Authentification — le préfixe env.VAR_NAME.download: currentextrait l'artefactsolution-zipde l'étape 1 dans$(Pipeline.Workspace)/solution-zip.uip solution publishcharge le fichier.zipdans le flux de locataire.uip solution deploy runcrée le déploiement.--nameutilise$(Build.BuildId)pour que les enregistrements de chaque déploiement soient identifiables – mais--folder-name/--parent-folder-pathsont statiques, etdeploy runcrée toujours un nouveau déploiement dans un nouveau dossier; il ne met jamais à jour une application existante. Lors d'une exécution répétée sur un package déjà déployé, il s'arrête et pointe sur le chemin de mise à niveau (à moins que--yesne soit transmis, ce qui déploie une deuxième copie renommée par collage —MySolution 1,MySolution 2,...). Cette vérification en amont nécessite une session utilisateur, elle est donc entièrement ignorée sous la connexion par informations d’identification du client, qu'utilise ce pipeline - chaque exécution verte crée ici un nouveau dossier. Pour mettre à jour le déploiement existant à la place, utilisezuip solution deploy upgrade <deployment-key>(recherchez la clé avecuip solution deploy list --folder-path Shared).
Étape 3 — Test
S'exécute uniquement si TEST_SET_KEY est défini au niveau du groupe de variables - le garde-fou condition: ignore l'étape proprement si vous n'avez pas configuré de suite de tests.
Le bloc shell est le lancement canonique → attendre → vérifier le flux de Comment faire: exécuter des tests à partir de la CLI:
uip tm testsets runlance l'exécution et renvoie uneExecutionId.uip tm waitbloque jusqu'à ce que l'exécution atteigne un état terminal (la sortie2signifie un délai d'expiration, et non un échec d'authentification — une réutilisation spécifique au domaine de l'emplacement du code de sortie).uip tm report getlitData.Failed; l'étape échoue avec##vso[task.logissue type=error]de sorte que le résultat s'affiche proprement dans l'interface utilisateur d'Azure DevOps.
Variations courantes
Promouvoir dans tous les environnements
Liez deux groupes de variables — uipath-stage et uipath-prod — et transformez chacun en une tâche deployment: distincte. Utilisez des passerelles/approbations spécifiques à l'environnement pour décider quand exécuter la production:
- stage: DeployStage
dependsOn: Build
jobs:
- deployment: deploy-stage
variables: [ { group: uipath-stage } ]
environment: 'uipath-stage'
# …same steps as above, but with stage's tenant
- stage: DeployProd
dependsOn: DeployStage
jobs:
- deployment: deploy-prod
variables: [ { group: uipath-prod } ]
environment: 'uipath-prod' # attach a manual approval gate here
# …same steps as above
- stage: DeployStage
dependsOn: Build
jobs:
- deployment: deploy-stage
variables: [ { group: uipath-stage } ]
environment: 'uipath-stage'
# …same steps as above, but with stage's tenant
- stage: DeployProd
dependsOn: DeployStage
jobs:
- deployment: deploy-prod
variables: [ { group: uipath-prod } ]
environment: 'uipath-prod' # attach a manual approval gate here
# …same steps as above
Couverture plus approfondie dans Comment procéder: compresser et publier une solution — promouvoir un package entre les locataires.
Restaurer (Rollback)
Azure DevOps n'est pas restauré automatiquement; ajouter une étape manuelle qui met à niveau le déploiement existant vers la version précédente — deploy run créerait un tout nouveau dossier au lieu de touchez celui que vous essayez de faire revenir:
- stage: Rollback
dependsOn: [] # run on demand, not from Deploy
jobs:
- job: rollback
pool: { vmImage: 'ubuntu-latest' }
steps:
# …install + auth…
- script: |
set -euo pipefail
DEPLOYMENT_KEY=$(uip solution deploy list --folder-path Shared \
--output-filter "Data[?Name=='MySolution'].Key | [0]" --output plain)
uip solution deploy upgrade "$DEPLOYMENT_KEY" --version "$(ROLLBACK_VERSION)"
displayName: 'Roll back to previous version'
- stage: Rollback
dependsOn: [] # run on demand, not from Deploy
jobs:
- job: rollback
pool: { vmImage: 'ubuntu-latest' }
steps:
# …install + auth…
- script: |
set -euo pipefail
DEPLOYMENT_KEY=$(uip solution deploy list --folder-path Shared \
--output-filter "Data[?Name=='MySolution'].Key | [0]" --output plain)
uip solution deploy upgrade "$DEPLOYMENT_KEY" --version "$(ROLLBACK_VERSION)"
displayName: 'Roll back to previous version'
Transmettez ROLLBACK_VERSION au moment de la file d'attente. deploy upgrade préserve la configuration existante du déploiement (les valeurs de ressources/informations d’identification déjà définies sur ce déploiement ne sont pas réinitialisées par les valeurs par défaut du package). Pour une restauration irréversible (désinstallation + suppression d'artefact), consultez la section Comment procéder: compresser et publier une solution — restauration.
Ignorer les tests
Pour exécuter sans l’étape de test, supprimez le bloc d’étape Test (ou laissez TEST_SET_KEY indéfini - le condition: de l’étape l’ignorera).
Erreurs courantes
env.préfixe vs secret littéral. Toujours--client-secret env.UIPATH_CLIENT_SECRET, jamais--client-secret "$(UIPATH_CLIENT_SECRET)". La forme littérale intègre la valeur dans la ligne de commande rendue. Consultez l' avertissement d'authentification.##vso[task.setvariable]n'est pas nécessaire pour la résolutionenv.-env:sur l'étape expose directement la variable.- Le bash multiligne a besoin de
set -euo pipefailen haut de chaque blocscript:. Sans cela,packpeut échouer tandis que les étapes ultérieures se continuent à s'exécuter. Voir Modèles de script — Options shell strictes. - Les résultats de cache ne sont pas garantis. Enveloppez toujours les commandes d'installation dans
if ! command -v uipafin que le pipeline se répare automatiquement lorsque le cache est gelé.
Voir également
- Procédures: déployer dans Orchestrator à partir de CI — directives indépendantes de la plateforme.
- Procédures: compresser et publier une solution — contrôle de version et restauration.
- Comment procéder: exécuter des tests à partir de la CLI — lancer → attendre → vérifier le modèle en profondeur.
- Formule CI/CD: GitHub Actions, Jenkins, GitLab CI — le même pipeline dans les autres plates-formes.