> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/cli/it/per-devops-e-amministratori/automate/ci-sign-in.md).

# Accedere da una pipeline CI

Accedere a Devolutions Cloud o Devolutions Server da una pipeline CI con Devolutions CLI, usando una chiave letta da una variabile d’ambiente o da un file.

Una pipeline non può aprire un browser né digitare una password. Devolutions CLI accede invece con una chiave e legge la parte segreta di quella chiave da una variabile d’ambiente o da un file protetto dal sistema CI. Il segreto non viene mai scritto sulla riga di comando.

## Scegliere il metodo di accesso giusto

<table><thead><tr><th width="230">SPAZIO DI LAVORO</th><th>METODO</th><th>OPZIONI</th></tr></thead><tbody><tr><td><strong>Devolutions Cloud</strong></td><td>Chiave dell’applicazione e segreto dell’applicazione</td><td><code>--application-key</code> con <code>--application-secret-env</code> o <code>--application-secret-file</code></td></tr><tr><td><strong>Devolutions Server</strong></td><td>Chiave API</td><td><code>--api-key-env</code> or <code>--api-key-file</code></td></tr><tr><td><strong>Devolutions Server</strong></td><td>Utente dell’applicazione</td><td><code>--as-application</code> con <code>--username</code> e <code>--password-env</code> o <code>--password-file</code></td></tr></tbody></table>

Crei prima la chiave applicazione, la chiave API o l’utente applicazione nello spazio di lavoro e gli dia accesso solo alle casseforti di cui la pipeline ha bisogno. Quindi memorizzi il suo segreto nelle variabili protette o nei file di segreti del sistema CI.

{% hint style="warning" %}
Non passi mai un segreto come argomento. Opzioni come `--application-secret-env`, `--api-key-env` e `--password-env` prendono il **nome** di una variabile d’ambiente, non il suo valore. `devo login` non ha alcuna opzione che accetti il segreto stesso.
{% endhint %}

## Accedere

{% tabs %}
{% tab title="Devolutions Cloud" %}

```bash
devo login ci-cloud --cloud https://<your-organization>.devolutions.app \
  --application-key <application-key> \
  --application-secret-env DEVO_APP_SECRET
```

`DEVO_APP_SECRET` è il nome della variabile che contiene il segreto dell’applicazione. Per leggerlo invece da un file, usi `--application-secret-file <path>`.
{% endtab %}

{% tab title="Devolutions Server (API key)" %}

```bash
devo login ci-server --server https://<your-server-address> \
  --api-key-env DEVO_API_KEY
```

Per leggere invece la chiave API da un file, usi `--api-key-file <path>`.
{% endtab %}

{% tab title="Devolutions Server (application user)" %}

```bash
devo login ci-server --server https://<your-server-address> \
  --as-application --username <application-user> \
  --password-env DEVO_APP_PASSWORD
```

Per leggere invece il segreto da un file, usi `--password-file <path>`.
{% endtab %}
{% endtabs %}

Il contesto a cui accede diventa quello corrente, quindi i comandi successivi lo usano. Aggiunga `--json` per ottenere un risultato che uno script possa controllare. Consulti [Leggere i risultati come JSON](/cli/it/per-devops-e-amministratori/automate/json-output.md).

## Tenere il segreto disponibile per l’intero job

Devolutions CLI non copia il segreto nella configurazione. Salva **dove** si trova il segreto, il nome della variabile o il percorso del file, e lo rilegge ogni volta che si connette allo spazio di lavoro, anche dal processo in background. Quindi:

* Imposti la variabile, oppure crei il file, **prima** del primo comando `devo` del job.
* La lasci impostata, oppure lasci il file al suo posto, fino all’ultimo comando `devo`.
* Se ruota un segreto tenuto in un file, sostituisca il contenuto del file: la connessione successiva legge il nuovo valore, senza un nuovo accesso.

Se in seguito manca la variabile o il file, i comandi non riescono con `secretReferenceUnavailable`.

## Esempio: un job CI generico

Questo job accede a Devolutions Cloud, esegue uno script di distribuzione con una password del database presa dalla cassaforte e pulisce. Adatti i nomi delle variabili al sistema CI: la maggior parte espone le variabili protette come variabili d’ambiente.

```bash
#!/usr/bin/env bash
set -euo pipefail

# Keep this job's contexts separate from other jobs on the same runner.
export DEVO_CLI_CONFIG_HOME="$(mktemp -d)"
# Fail instead of waiting for an answer.
export DEVO_NON_INTERACTIVE=1

# DEVO_APP_SECRET is provided by the CI system as a protected variable.
devo login ci-cloud --cloud "https://<your-organization>.devolutions.app" \
  --application-key "<application-key>" \
  --application-secret-env DEVO_APP_SECRET \
  --json > /dev/null

devo secret run \
  --env-ref DB_PASSWORD="<reference>" \
  --timeout-seconds 900 \
  -- ./deploy.sh

devo logout ci-cloud --json > /dev/null
devo daemon stop --wait
rm -rf "$DEVO_CLI_CONFIG_HOME"
```

Per eseguire la pulizia anche quando un passaggio non riesce, metta gli ultimi tre comandi nel passaggio «always run» del sistema CI o in un `trap` della shell. Altro sulla cartella di configurazione e sul processo in background è in [Installare Devolutions CLI sugli agenti di build](/cli/it/per-devops-e-amministratori/automate/install-on-runners.md).

## Accedere su un computer senza browser

Su un server o una sessione remota in cui *lei* è presente ma nessun browser può aprirsi, usi il flusso del codice dispositivo con `--oauth --use-device-code`. Devolutions CLI stampa un indirizzo web e un codice; apra l’indirizzo su qualsiasi dispositivo e acceda. Impostare la variabile d’ambiente `DEVO_CLI_USE_DEVICE_CODE` su `1` ha lo stesso effetto di `--use-device-code`. In entrambi i casi vale solo per un accesso con `--oauth`.

```bash
devo login my-server --server https://<your-server-address> --oauth --use-device-code
```

Questo flusso ha bisogno di una persona che lo completi, quindi non è adatto a una pipeline non presidiata.

{% hint style="warning" %}
Su Devolutions Cloud, un accesso con codice dispositivo non può leggere i dati: consente solo `devo status` e `devo logout`. Per i comandi sui dati su Devolutions Cloud, acceda con il browser (`--oauth` senza `--use-device-code`) o con una chiave dell’applicazione.
{% endhint %}

## Se non funziona

* L’errore dice che la variabile o il file non si trova: controlli il nome che ha passato (il **nome** della variabile, senza `$`) e che il sistema CI lo esponga a questo passaggio.
* L’accesso non riesce o la sessione scade: consulti [L’accesso non riesce o la sessione è scaduta](/cli/it/aiuto/troubleshooting/sign-in-fails.md).
* Tutti i metodi e le opzioni di accesso: [Accedere a Devolutions Cloud](/cli/it/guide/connect/devolutions-cloud.md), [Accedere a Devolutions Server](/cli/it/guide/connect/devolutions-server.md).

## Successivo

* [Install Devolutions CLI on build agents](/cli/it/per-devops-e-amministratori/automate/install-on-runners.md)
* [Run without prompts](/cli/it/per-devops-e-amministratori/automate/non-interactive.md)
* [Run a command with its secrets](/cli/it/guide/secrets/run-with-secrets.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/cli/it/per-devops-e-amministratori/automate/ci-sign-in.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
