> 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/da/til-devops-og-administratorer/automate/ci-sign-in.md).

# Log på fra en CI-pipeline

Log på Devolutions Cloud eller Devolutions Server fra en CI-pipeline med Devolutions CLI, ved hjælp af en nøgle der læses fra en miljøvariabel eller en fil.

En pipeline kan ikke åbne en browser eller skrive en adgangskode. Devolutions CLI logger i stedet på med en nøgle og læser den hemmelige del af nøglen fra en miljøvariabel eller en fil som CI-systemet beskytter. Hemmeligheden skrives aldrig på kommandolinjen.

## Vælg den rigtige logonmetode

<table><thead><tr><th width="230">ARBEJDSOMRÅDE</th><th>METODE</th><th>INDSTILLINGER</th></tr></thead><tbody><tr><td><strong>Devolutions Cloud</strong></td><td>Programnøgle og programhemmelighed</td><td><code>--application-key</code> med <code>--application-secret-env</code> eller <code>--application-secret-file</code></td></tr><tr><td><strong>Devolutions Server</strong></td><td>API-nøgle</td><td><code>--api-key-env</code> or <code>--api-key-file</code></td></tr><tr><td><strong>Devolutions Server</strong></td><td>Programbruger</td><td><code>--as-application</code> med <code>--username</code> og <code>--password-env</code> eller <code>--password-file</code></td></tr></tbody></table>

Opret først programnøglen, API-nøglen eller programbrugeren i arbejdsområdet, og giv den kun adgang til de bokse pipelinen har brug for. Gem derefter dens hemmelighed i CI-systemets beskyttede variabler eller hemmelighedsfiler.

{% hint style="warning" %}
Angiv aldrig en hemmelighed som argument. Indstillinger såsom `--application-secret-env`, `--api-key-env` og `--password-env` tager **navnet** på en miljøvariabel, ikke dens værdi. `devo login` har ingen indstilling der accepterer selve hemmeligheden.
{% endhint %}

## Log på

{% 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` er navnet på den variabel der indeholder programhemmeligheden. For at læse den fra en fil i stedet skal De bruge `--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
```

For i stedet at læse API-nøglen fra en fil skal De bruge `--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
```

For i stedet at læse hemmeligheden fra en fil skal De bruge `--password-file <path>`.
{% endtab %}
{% endtabs %}

Den kontekst De logger på, bliver den aktuelle, så de næste kommandoer bruger den. Tilføj `--json` for at få et resultat et script kan kontrollere. Se [Læs resultater som JSON](/cli/da/til-devops-og-administratorer/automate/json-output.md).

## Hold hemmeligheden tilgængelig under hele jobbet

Devolutions CLI kopierer ikke hemmeligheden ind i sin konfiguration. Den gemmer **hvor** hemmeligheden er, variabelnavnet eller filstien, og læser den igen hver gang den opretter forbindelse til arbejdsområdet, også fra baggrundsprocessen. Så:

* Angiv variablen, eller opret filen, **før** den første `devo`-kommando i jobbet.
* Lad den være angivet, eller lad filen blive, indtil den sidste `devo`-kommando.
* Hvis De roterer en hemmelighed der opbevares i en fil, skal De erstatte filens indhold. Den næste forbindelse læser den nye værdi, uden et nyt logon.

Hvis variablen eller filen mangler senere, mislykkes kommandoerne med `secretReferenceUnavailable`.

## Eksempel. Et generisk CI-job

Dette job logger på Devolutions Cloud, kører et udrulningsscript med en databaseadgangskode fra boksen og rydder op. Tilpas variabelnavnene til CI-systemet. De fleste viser beskyttede variabler som miljøvariabler.

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

For at køre oprydningen selv når et trin fejler, skal De lægge de tre sidste kommandoer i CI-systemets trin «always run» eller i en shell-`trap`. Mere om konfigurationsmappen og baggrundsprocessen står i [Installer Devolutions CLI på buildagenter](/cli/da/til-devops-og-administratorer/automate/install-on-runners.md).

## Log på på en computer uden browser

På en server eller i en fjernsession hvor *De* er til stede, men ingen browser kan åbne, brug enhedskodeforløbet med `--oauth --use-device-code`. Devolutions CLI udskriver en webadresse og en kode. Åbn adressen på en vilkårlig enhed, og log på. At sætte miljøvariablen `DEVO_CLI_USE_DEVICE_CODE` til `1` har samme virkning som `--use-device-code`. I begge tilfælde gælder det kun et logon med `--oauth`.

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

Dette forløb kræver at en person fuldfører det, så det passer ikke til en uovervåget pipeline.

{% hint style="warning" %}
På Devolutions Cloud kan et logon med enhedskode ikke læse dataene. Det tillader kun `devo status` og `devo logout`. Til datakommandoer på Devolutions Cloud skal De logge på med browseren (`--oauth` uden `--use-device-code`) eller med en applikationsnøgle.
{% endhint %}

## Hvis det ikke virker

* Fejlen siger at variablen eller filen ikke kan findes. Kontrollér det navn De angav (variabel**navnet**, uden `$`), og at CI-systemet viser den for dette trin.
* Logon mislykkes, eller sessionen udløber. Se [Logon mislykkes, eller sessionen er udløbet](/cli/da/hjaelp/troubleshooting/sign-in-fails.md).
* Alle logonmetoder og indstillinger. [Log på Devolutions Cloud](/cli/da/vejledninger/connect/devolutions-cloud.md), [Log på Devolutions Server](/cli/da/vejledninger/connect/devolutions-server.md).

## Næste

* [Install Devolutions CLI on build agents](/cli/da/til-devops-og-administratorer/automate/install-on-runners.md)
* [Run without prompts](/cli/da/til-devops-og-administratorer/automate/non-interactive.md)
* [Run a command with its secrets](/cli/da/vejledninger/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/da/til-devops-og-administratorer/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.
