- Información general
- CLI de Uipath
- Acerca de la CLI de UiPath
- Descarga de la CLI de UiPath
- Matriz de compatibilidad
- Ejecutar la CLI de UiPath
- Gestionar fuentes NuGet
- Soporte de Test Manager
- Empaquetar proyectos en un paquete
- Firma de paquetes de proyecto
- Analizar un proyecto
- Implementar un paquete en Orchestrator
- Ejecutar un trabajo dentro de Orchestrator
- Probar un paquete o ejecutar un conjunto de pruebas
- Probar varios paquetes
- Implementar activos en Orchestrator
- Eliminar activos de Orchestrator
- Ejecutar tareas utilizando la configuración JSON
- Restaurar dependencias de automatización
- Solución de problemas de la CLI de UiPath
- Extensión de Azure DevOps
- Acerca de la extensión de Azure DevOps
- Configurar la conexión del servicio Azure DevOps
- Añadir tareas de UiPath a un proceso de Azure DevOps
- Plataforma de instalación de Uipath
- Paquete de soluciones de UiPath
- Paquete de carga de la solución UiPath
- Implementación de la solución UiPath
- Activación de la solución UiPath
- Eliminar paquete de la solución UiPath
- Configuración de descarga de la solución UiPath
- Paquete de descarga de la solución UiPath
- Implementación de desinstalación de la solución UiPath
- Solución de problemas de la extensión de Azure DevOps
- Complemento de Jenkins
- Acerca del complemento de Jenkins
- Instalar el complemento de Jenkins
- Configurar la conexión de servicio para aplicaciones externas
- Plataforma de instalación de Uipath
- Paquete de soluciones de UiPath
- Paquete de carga de la solución UiPath
- Implementación de la solución UiPath
- Solución UiPath Activar implementación
- Eliminar paquete de la solución UiPath
- Configuración de descarga de la solución UiPath
- Paquete de descarga de la solución UiPath
- Implementación de desinstalación de la solución UiPath
- Solución de problemas del complemento de Jenkins

Guía del usuario de integraciones de CI/CD
Firma de paquetes de soluciones
Firma de paquetes de soluciones
UiPath CLI 25.10 introduce la capacidad de firmar digitalmente paquetes de soluciones de automatización durante la operación de empaquetado. La firma de paquetes proporciona verificación de autenticidad y garantiza que los paquetes de soluciones no hayan sido manipulados después de la creación, lo que mejora la seguridad en tu proceso de CI/CD.
Al firmar un paquete de soluciones, la CLI:
- Crea el archivo de paquete
.zipde la solución - Aplica una firma digital utilizando tu certificado a todos los paquetes Nuget dentro del archivo
.zip. - Opcionalmente, marca la fecha de la firma para una validez a largo plazo
Tipos de certificados compatibles
CLI admite el formato de certificado PKCS#12 (.pfx).
El certificado debe:
- Incluir una clave privada para firmar
- Ser válido (no caducado)
- Tener capacidades de firma de código
Parámetros
El comando solution pack admite los siguientes parámetros de firma:
| Parámetro | Descripción | Obligatorio |
|---|---|---|
--certificatePath | Ruta al archivo de certificado (.pfx) | Sí (si firma) |
--certificatePassword | Contraseña para el archivo de certificado | No |
--timestampServerUrl | URL del servidor de marcas de tiempo RFC 3161 | No |
Ejemplos de uso
Firma básica con certificado
# Windows
uipcli solution pack "C:\Solutions\MyAutomationSolution" `
-v "1.0.0" `
-o "C:\Packages" `
--certificatePath "C:\Certificates\codesign.pfx" `
--certificatePassword "YourPassword123"
# Linux/macOS
uipcli solution pack "./MyAutomationSolution" \
-v "1.0.0" \
-o "./packages" \
--certificatePath "./certificates/codesign.pfx" \
--certificatePassword "YourPassword123"
# Windows
uipcli solution pack "C:\Solutions\MyAutomationSolution" `
-v "1.0.0" `
-o "C:\Packages" `
--certificatePath "C:\Certificates\codesign.pfx" `
--certificatePassword "YourPassword123"
# Linux/macOS
uipcli solution pack "./MyAutomationSolution" \
-v "1.0.0" \
-o "./packages" \
--certificatePath "./certificates/codesign.pfx" \
--certificatePassword "YourPassword123"
Firma con el servidor de marca de tiempo
Añadir una marca de tiempo garantiza que la firma siga siendo válida incluso después de que caduque el certificado.
uipcli solution pack "./MyAutomationSolution" \
-v "1.0.0" \
-o "./packages" \
--certificatePath "./certificates/codesign.pfx" \
--certificatePassword "YourPassword123" \
--timestampServerUrl "http://timestamp.digicert.com"
uipcli solution pack "./MyAutomationSolution" \
-v "1.0.0" \
-o "./packages" \
--certificatePath "./certificates/codesign.pfx" \
--certificatePassword "YourPassword123" \
--timestampServerUrl "http://timestamp.digicert.com"
Firmar con dependencias de la biblioteca de Orchestrator
uipcli solution pack "./MyAutomationSolution" \
-v "1.0.0" \
-o "./packages" \
--libraryOrchestratorUrl "https://cloud.uipath.com/" \
--libraryOrchestratorTenant "Default" \
-A "myorg" \
-I "becc663c-8f1e-409a-a75f-c00330d80bc8" \
-S '********' \
--libraryOrchestratorApplicationScope "OR.Folders OR.Execution" \
--libraryOrchestratorFolder "Shared" \
--certificatePath "./certificates/codesign.pfx" \
--certificatePassword "YourPassword123" \
--timestampServerUrl "http://timestamp.digicert.com"
uipcli solution pack "./MyAutomationSolution" \
-v "1.0.0" \
-o "./packages" \
--libraryOrchestratorUrl "https://cloud.uipath.com/" \
--libraryOrchestratorTenant "Default" \
-A "myorg" \
-I "becc663c-8f1e-409a-a75f-c00330d80bc8" \
-S '********' \
--libraryOrchestratorApplicationScope "OR.Folders OR.Execution" \
--libraryOrchestratorFolder "Shared" \
--certificatePath "./certificates/codesign.pfx" \
--certificatePassword "YourPassword123" \
--timestampServerUrl "http://timestamp.digicert.com"
Firmar con certificado sin contraseña
uipcli solution pack "./MyAutomationSolution" \
-v "1.0.0" \
-o "./packages" \
--certificatePath "./certificates/codesign.pfx"
uipcli solution pack "./MyAutomationSolution" \
-v "1.0.0" \
-o "./packages" \
--certificatePath "./certificates/codesign.pfx"
Ejemplo de proceso de CI/CD (Acciones de GitHub)
- name: Pack and sign solution package
env:
CERT_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
APP_SECRET: ${{ secrets.UIPATH_APP_SECRET }}
run: |
uipcli solution pack "./src/MyAutomationSolution" \
-v "1.0.${{ github.run_number }}" \
-o "./output" \
--libraryOrchestratorUrl "https://cloud.uipath.com/" \
--libraryOrchestratorTenant "Default" \
-A "myorg" \
-I "becc663c-8f1e-409a-a75f-c00330d80bc8" \
-S "$APP_SECRET" \
--libraryOrchestratorApplicationScope "OR.Folders OR.Execution" \
--certificatePath "./certs/codesign.pfx" \
--certificatePassword "$CERT_PASSWORD" \
--timestampServerUrl "http://timestamp.digicert.com"
- name: Pack and sign solution package
env:
CERT_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
APP_SECRET: ${{ secrets.UIPATH_APP_SECRET }}
run: |
uipcli solution pack "./src/MyAutomationSolution" \
-v "1.0.${{ github.run_number }}" \
-o "./output" \
--libraryOrchestratorUrl "https://cloud.uipath.com/" \
--libraryOrchestratorTenant "Default" \
-A "myorg" \
-I "becc663c-8f1e-409a-a75f-c00330d80bc8" \
-S "$APP_SECRET" \
--libraryOrchestratorApplicationScope "OR.Folders OR.Execution" \
--certificatePath "./certs/codesign.pfx" \
--certificatePassword "$CERT_PASSWORD" \
--timestampServerUrl "http://timestamp.digicert.com"
Ejemplo de proceso de Azure DevOps
- task: PowerShell@2
displayName: 'Pack and Sign Solution'
env:
CERT_PASSWORD: $(CertificatePassword)
APP_SECRET: $(UiPathAppSecret)
inputs:
targetType: 'inline'
script: |
uipcli solution pack "$(Build.SourcesDirectory)\MyAutomationSolution" `
-v "$(Build.BuildNumber)" `
-o "$(Build.ArtifactStagingDirectory)" `
--libraryOrchestratorUrl "https://cloud.uipath.com/" `
--libraryOrchestratorTenant "Default" `
-A "myorg" `
-I "becc663c-8f1e-409a-a75f-c00330d80bc8" `
-S "$env:APP_SECRET" `
--libraryOrchestratorApplicationScope "OR.Folders OR.Execution" `
--certificatePath "$(Build.SourcesDirectory)\certs\codesign.pfx" `
--certificatePassword "$env:CERT_PASSWORD" `
--timestampServerUrl "http://timestamp.digicert.com"
- task: PowerShell@2
displayName: 'Pack and Sign Solution'
env:
CERT_PASSWORD: $(CertificatePassword)
APP_SECRET: $(UiPathAppSecret)
inputs:
targetType: 'inline'
script: |
uipcli solution pack "$(Build.SourcesDirectory)\MyAutomationSolution" `
-v "$(Build.BuildNumber)" `
-o "$(Build.ArtifactStagingDirectory)" `
--libraryOrchestratorUrl "https://cloud.uipath.com/" `
--libraryOrchestratorTenant "Default" `
-A "myorg" `
-I "becc663c-8f1e-409a-a75f-c00330d80bc8" `
-S "$env:APP_SECRET" `
--libraryOrchestratorApplicationScope "OR.Folders OR.Execution" `
--certificatePath "$(Build.SourcesDirectory)\certs\codesign.pfx" `
--certificatePassword "$env:CERT_PASSWORD" `
--timestampServerUrl "http://timestamp.digicert.com"
Servidores de marca de tiempo recomendados
Se recomienda utilizar un servidor de marcas de tiempo para garantizar que las firmas sigan siendo válidas después de la expiración del certificado:
http://timestamp.digicert.com- DigiCerthttp://timestamp.comodoca.com: Sectigo (Comodo)http://timestamp.globalsign.com: GlobalSignhttp://timestamp.sectigo.com: sección
Mejores prácticas
Almacenamiento seguro de certificados
- Nunca enviar certificados al control de versiones
- Utiliza soluciones de almacenamiento seguro:
- Azure Key Vault
- AWS Secrets Manager
- HashiCorp Vault
- Secretos de GitHub/Archivos seguros de Azure DevOps
- Gestión de secretos de la plataforma CI/CD
Uso de la marca de tiempo
- Utilice siempre un servidor de marcas de tiempo en entornos de producción
- Las marcas de tiempo garantizan la validez de la firma más allá de la expiración del certificado
Gestión de certificados
- Utilizar certificados de firma de código dedicados
- Rotar certificados antes de que caduquen
- Mantener copias de seguridad de certificados de forma segura