> For the complete documentation index, see [llms.txt](https://thorstenkramm.gitbook.io/saltstack/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://thorstenkramm.gitbook.io/saltstack/git/alternative-cd.md).

# Alternative CD

Beispiel für eine Bitbucket Pipeline, welche bei jedem Push die States auf dem Master aktualisiert.

{% code title="bitbucket-pipelines.yml" %}

```yaml
image: alpine:3.10
pipelines:
  branches:
    master:
      - step:
          name: Deploy to Salt Master
          script:
            - apk --no-cache add openssh-client rsync
            - ls -la
            - find . -type d -exec chmod 0770 {} \;
            - find . -type f -exec chmod 0660 {} \;
            - >-
              rsync -av --delete -e "ssh -p <PORT>" . <HOST>:/srv/salt/
              --exclude=.git
              --exclude=.gitignore
              --exclude=bitbucket-pipelines.yml
              --delete-excluded
```

{% endcode %}

Sollte Ihr Salt-Master nicht per SSH aus dem öffentlichen Internet erreichbar sein, können Sie einen kostenlosen Account von [Ngrok](https://ngrok.com) nutzen, um den SSH Port schnell und einfach freizugeben.

```
cd /tmp
wget "https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.tgz"
tar xzf ngrok-stable-linux-amd64.tgz
mv ngrok /usr/local/bin/
chmod +x /usr/local/bin/ngrok
rm ngrok-stable-linux-amd64.tgz
ngrok authtoken <YOU-TOKEN>
ngrok tcp 22 -log=stdout -log-format=json 2>&1 >/tmp/ssh-exposal.json &
jq < /tmp/ssh-exposal.json
```

Legen Sie einen User an, welcher die Dateien synchronisiert. Nutzen Sie dazu nicht den Root-User.

Bierspielweise: `useradd -m -r -s /bin/sh -d /var/lib/bitbucket bitbucket`

![SSH Schlüssel und Known-Hosts des Repositorys](/files/TB7CaoL8G3jlxDRUEoTm)

Rufen Sie die Settings des Repositorys auf und generieren Sie im Bereich `Pipelines > SSH Keys` einen privaten Schlüssel. Kopieren Sie den öffentlichen Schlüssel in die Datei `/var/lib/bitbucket/.ssh/authoriezd_keys`. Achten Sie darauf, dass diese Datei dem Benutzer `bitbucket` und nicht Root gehört.

Rufen Sie den Fingerprint vom Salt-Master ab (Fetch), und fügen Sie diesen zum Repository hinzu. Die Pipeline ist nun einsatzbereit.
