> 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/de/fur-devops-und-administratoren/automate/ci-sign-in.md).

# Aus einer CI-Pipeline anmelden

Bei Devolutions Cloud oder Devolutions Server aus einer CI-Pipeline mit Devolutions CLI anmelden, mit einem Schlüssel, der aus einer Umgebungsvariable oder einer Datei gelesen wird.

Eine Pipeline kann keinen Browser öffnen und kein Passwort eingeben. Devolutions CLI meldet sich stattdessen mit einem Schlüssel an und liest den geheimen Teil dieses Schlüssels aus einer Umgebungsvariable oder einer Datei, die Ihr CI-System schützt. Das Geheimnis wird nie auf die Befehlszeile geschrieben.

## Die passende Anmeldemethode wählen

<table><thead><tr><th width="230">WORKSPACE</th><th>METHODE</th><th>OPTIONEN</th></tr></thead><tbody><tr><td><strong>Devolutions Cloud</strong></td><td>Anwendungsschlüssel und Anwendungsgeheimnis</td><td><code>--application-key</code> mit <code>--application-secret-env</code> oder <code>--application-secret-file</code></td></tr><tr><td><strong>Devolutions Server</strong></td><td>API-Schlüssel</td><td><code>--api-key-env</code> or <code>--api-key-file</code></td></tr><tr><td><strong>Devolutions Server</strong></td><td>Anwendungsbenutzer</td><td><code>--as-application</code> mit <code>--username</code> und <code>--password-env</code> oder <code>--password-file</code></td></tr></tbody></table>

Erstellen Sie zuerst den Anwendungsschlüssel, den API-Schlüssel oder den Anwendungsbenutzer in Ihrem Workspace und geben Sie ihm nur Zugriff auf die Tresore, die die Pipeline braucht. Speichern Sie dann sein Geheimnis in den geschützten Variablen oder Geheimnisdateien Ihres CI-Systems.

{% hint style="warning" %}
Übergeben Sie nie ein Geheimnis als Argument. Optionen wie `--application-secret-env`, `--api-key-env` und `--password-env` nehmen den **Namen** einer Umgebungsvariable, nicht ihren Wert. `devo login` hat keine Option, die das Geheimnis selbst akzeptiert.
{% endhint %}

## Anmelden

{% 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` ist der Name der Variable, die das Anwendungsgeheimnis enthält. Um es stattdessen aus einer Datei zu lesen, verwenden Sie `--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
```

Um den API-Schlüssel stattdessen aus einer Datei zu lesen, verwenden Sie `--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
```

Um das Geheimnis stattdessen aus einer Datei zu lesen, verwenden Sie `--password-file <path>`.
{% endtab %}
{% endtabs %}

Der Kontext, bei dem Sie sich anmelden, wird zum aktuellen, sodass die nächsten Befehle ihn verwenden. Fügen Sie `--json` hinzu, um ein Ergebnis zu erhalten, das ein Skript prüfen kann. Siehe [Ergebnisse als JSON lesen](/cli/de/fur-devops-und-administratoren/automate/json-output.md).

## Das Geheimnis für den ganzen Auftrag verfügbar halten

Devolutions CLI kopiert das Geheimnis nicht in seine Konfiguration. Es speichert, **wo** das Geheimnis liegt, den Variablennamen oder den Dateipfad, und liest es jedes Mal erneut, wenn es sich mit Ihrem Workspace verbindet, auch aus seinem Hintergrundprozess. Also:

* Setzen Sie die Variable oder erstellen Sie die Datei **vor** dem ersten Befehl `devo` des Auftrags.
* Lassen Sie sie gesetzt, oder lassen Sie die Datei an ihrem Platz, bis zum letzten Befehl `devo`.
* Wenn Sie ein in einer Datei gespeichertes Geheimnis rotieren, ersetzen Sie den Inhalt der Datei: Die nächste Verbindung liest den neuen Wert, ohne eine neue Anmeldung.

Wenn die Variable oder die Datei später fehlt, schlagen die Befehle mit `secretReferenceUnavailable` fehl.

## Beispiel: ein allgemeiner CI-Auftrag

Dieser Job meldet sich bei Devolutions Cloud an, führt ein Bereitstellungsskript mit einem Datenbankpasswort aus dem Tresor aus und räumt auf. Passen Sie die Variablennamen an Ihr CI-System an: Die meisten stellen geschützte Variablen als Umgebungsvariablen bereit.

```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"
```

Um die Bereinigung auch auszuführen, wenn ein Schritt fehlschlägt, setzen Sie die letzten drei Befehle in den Schritt „always run“ Ihres CI-Systems oder in ein Shell-`trap`. Mehr zum Konfigurationsordner und zum Hintergrundprozess steht unter [Devolutions CLI auf Build-Agents installieren](/cli/de/fur-devops-und-administratoren/automate/install-on-runners.md).

## Auf einem Computer ohne Browser anmelden

Auf einem Server oder in einer Remotesitzung, in der *Sie* anwesend sind, aber kein Browser sich öffnen kann, verwenden Sie den Gerätecode-Ablauf mit `--oauth --use-device-code`. Devolutions CLI gibt eine Webadresse und einen Code aus; öffnen Sie die Adresse auf einem beliebigen Gerät und melden Sie sich an. Das Setzen der Umgebungsvariable `DEVO_CLI_USE_DEVICE_CODE` auf `1` hat dieselbe Wirkung wie `--use-device-code`. In beiden Fällen gilt das nur für eine Anmeldung mit `--oauth`.

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

Dieser Ablauf braucht eine Person, die ihn abschließt, daher passt er nicht zu einer unbeaufsichtigten Pipeline.

{% hint style="warning" %}
Bei Devolutions Cloud kann eine Anmeldung mit Gerätecode Ihre Daten nicht lesen: Sie erlaubt nur `devo status` und `devo logout`. Für Datenbefehle auf Devolutions Cloud melden Sie sich mit dem Browser an (`--oauth` ohne `--use-device-code`) oder mit einem Anwendungsschlüssel.
{% endhint %}

## Wenn es nicht funktioniert

* Der Fehler sagt, dass die Variable oder die Datei nicht gefunden werden kann: Prüfen Sie den Namen, den Sie übergeben haben (den **Namen** der Variable, ohne `$`), und dass das CI-System ihn diesem Schritt bereitstellt.
* Die Anmeldung schlägt fehl oder die Sitzung läuft ab: siehe [Die Anmeldung schlägt fehl oder die Sitzung ist abgelaufen](/cli/de/hilfe/troubleshooting/sign-in-fails.md).
* Alle Anmeldemethoden und Optionen: [Bei Devolutions Cloud anmelden](/cli/de/anleitungen/connect/devolutions-cloud.md), [Bei Devolutions Server anmelden](/cli/de/anleitungen/connect/devolutions-server.md).

## Weiter

* [Install Devolutions CLI on build agents](/cli/de/fur-devops-und-administratoren/automate/install-on-runners.md)
* [Run without prompts](/cli/de/fur-devops-und-administratoren/automate/non-interactive.md)
* [Run a command with its secrets](/cli/de/anleitungen/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/de/fur-devops-und-administratoren/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.
