Vor einiger Zeit hatte ich schonmal einen kleinen Beitrag zum Thema FTP-Deploy mit Bitbucket geschrieben. Bitbucket bietet im Zusammenhang mit Deployment viele fertige Möglichkeiten, die nur zum Teil an die eigenen Bedürfnisse angepasst werden müssen. Die Dokumentation dazu ist einfach gehalten und sehr detailliert. Der einzige Knackpunkt – in der freien Version besteht nur die Möglichkeit 50 Deployment Minuten pro Monat zu nutzen. Das kann für sich stark verändernde Projekte zu wenig sein. Gerade dann, wenn mehrere Beteilligte an einem Projekt arbeiten. An dieser Stelle beschreibe ich kurz die Vorraussetzungen für einen SFTP-Deploy. In meinem Fall ist die Konstellation so gewählt, dass es einen DEV Branch und einen MASTER Branch gibt. Wird DEV ind MASTER gemerged, wird automatisch das Deployment auf den Produktivserver gestartet. Ist eine Abnahme dazwischen können je nach Bedarf noch weitere Schritte eingebaut werden.

Im Vorfeld

Damit Bitbucket via SSH den Remote Server ansprechen darf braucht es den Fingerprint und zusätzlich die Aufnahme in die .known-hosts Datei des Remote Servers.

  • SSH Fingerprint deines Servers abrufen
    (bitbucket: Unter Repository Settings –> SSH Keys)
  • Remote Server .known-hosts Datei ergänzen
    (https://bitbucket.org/blog/[…])

Anpassung der bitbucket-pipelines.yml

Die YAML Konfiguration ist recht simpel und weicht nur in dem Punkt „EXTRA_ARGS“ vom Standard ab. In diesem Fall ist das auch nur notwendig, wenn du einen speziellen SSH Port nutzt.

image: atlassian/default-image:2

pipelines:
  default:
    - step:
        name: 'Deploy with SFTP to production'
        script:
          - echo "This step will use atlassian/sftp-deploy pipe"
          - pipe: atlassian/sftp-deploy:0.5.11
            variables:
              USER: 'DeinSSHUser'
              PASSWORD: 'DeinPasswort'
              SERVER: 'ssh.deinServer.de'
              EXTRA_ARGS: '-P 1234'
              REMOTE_PATH: '/var/www/www.DeineDomain.de/'

Damit kannst du beispielsweise innerhalb deines Repositories unterschiedliche Deployment Ziele einrichten. Welches Ziel gewählt wird, richtet sich nach dem Branch (master, dev, etc.), indem du Änderungen vorgenommen hast.