Anleitungen um BitBucket & Drone.io via OAuth 1.0 zu verbinden

Die Anwendung BitBucket Server ist ein Git-Server aus dem Hause Atlassian. Es handelt sich um eine Anwendung die sich auf die reine Verwaltung von Git-Repositories incl. Merge-Request konzentriert. BitBucket wurde in 2012 erstmals veröffentlicht und wird bis heute in unterschiedlichen (LTS) Versionen vom Hersteller gepflegt.
(siehe https://www.atlassian.com/software/bitbucket/download-archives)

An folgenden Beispielen kann man sehen wie man bestimmte BitBucket Server Versionen mit drone.io zusammen nutzen kann. Möchte man diese Stacks im produktiven Umfeld einsetzen, so empfiehlt sich die zusätzliche Nutzung einer Datenbank. Schauen Sie dazu gern in einen etwas älteren Beitrag, der dies bereits einmal aufgegriffen hatte
Continuous Integration / Continuous Delivery für BitBucket

 

BitBucket 6.10 & Drone 0.8

Für die frühe Version Drone 0.8 ist es notwendig ein bestimmtes Webhook Plugin im BitBucket zu aktivieren, da Drone 0.8 lediglich dieses Plugin automatisch bedienen kann.

version: "3.3"

services:
  bitbucket6:
    image: atlassian/bitbucket-server:6.10
    container_name: bitbucket6
    ports:
      - 7990:7990
      - 7999:7999
    environment:
      JVM_MINIMUM_MEMORY: 512m
      JVM_MAXIMUM_MEMORY: 1024m
    volumes:
      - bitbucket6-data:/var/atlassian/application-data/bitbucket
    restart: unless-stopped

  drone0-server:
    image: drone/drone:0.8
    container_name: drone0
    ports:
      - 80:8000
      - 9000:9000
    environment:
      - DRONE_OPEN=true
      - DRONE_STASH=true
      - DRONE_STASH_GIT_USERNAME=drone
      - DRONE_STASH_GIT_PASSWORD=drone
      - DRONE_STASH_URL=http://bitbucket.local:7990
      - DRONE_STASH_CONSUMER_KEY=95cg28eb25ef82
      - DRONE_STASH_CONSUMER_RSA=/path/to/key.pem
      - DRONE_HOST=http://drone.local
      - DRONE_SECRET=bea26a2221fd8090ea38720fc445eca6
      - DRONE_ADMIN=posselt
    volumes:
      - drone0-data:/var/lib/drone/
      - ./bitbucket-key/key.pem:/path/to/key.pem
    restart: unless-stopped

  drone0-agent:
    image: drone/agent:0.8
    container_name: agent0
    command: agent
    environment:
      - DRONE_SERVER=drone.local:9000
      - DRONE_SECRET=bea26a2221fd8090ea38720fc445eca6
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped
    depends_on:
      - drone0-server

volumes:
  bitbucket6-data: {}
  drone0-data: {}

Die Schritte der Einrichtung des Logins via OAuth 1.0 liegen dem Beispiel-Setup als Screenshot mit bei.

setup-bitbucket-6.10_with_drone-0.8

How-To: https://0-8-0.docs.drone.io/install-for-bitbucket-server/

 

BitBucket 6.10 & Drone 1.10

BitBucket erhielt zwar über die Zeit nativen Support für Web-Hooks, aber als Drone 1.x diesen Support nutzen wollte, war drone.io lediglich kompatiblen mit der Web-Hook Ausprägung der damals neueren BitBucket Version 7.x

version: "3.3"

services:
  bitbucket6:
    image: atlassian/bitbucket-server:6.10
    container_name: bitbucket-6-10
    ports:
      - 7990:7990
      - 7999:7999
    environment:
      JVM_MINIMUM_MEMORY: 512m
      JVM_MAXIMUM_MEMORY: 1024m
    volumes:
      - bitbucket6-data:/var/atlassian/application-data/bitbucket
    restart: unless-stopped

  drone1-server:
    image: drone/drone:1.10 #12.2020
    container_name: drone-1-10
    ports:
      - 80:80
    environment:
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_GIT_USERNAME=drone
      - DRONE_GIT_PASSWORD=drone
      - DRONE_STASH_SERVER=http://bitbucket.local:7990
      - DRONE_STASH_CONSUMER_KEY=95cg28eb25ef82
      - DRONE_STASH_PRIVATE_KEY=/path/to/key.pem
      - DRONE_SERVER_HOST=drone.local
      - DRONE_SERVER_PROTO=http
      - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
      - DRONE_TLS_AUTOCERT=false
      - DRONE_USER_CREATE=username:posselt,admin:true
    volumes:
      - drone1-data:/var/lib/drone/
      - ./bitbucket-key/key.pem:/path/to/key.pem
    restart: unless-stopped

  drone1-agent:
    image: drone/drone-runner-docker:1.6 #01.2021
    container_name: agent-1-16
    depends_on:
      - drone1-server
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=drone1-server
      - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
      - DRONE_RUNNER_CAPACITY=3
      - DRONE_RUNNER_NAME=drone1-runner
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped


volumes:
  bitbucket6-data: {}
  drone1-data: {}

Hier der Beispiel-Setup, der auf den oben beschriebenen Fehler laufen wird.

setup-bitbucket-6.10_with_drone-1.10

 

BitBucket 7.17 & Drone 1.10

Drone 1.x richtet ab der BitBucket Version 7.x nun das native Web-Hook Plugin im Hintergrund ein, somit entfiel ab da die Notwendigkeit für das BitBucket Plugin.

version: "3.3"

services:
  bitbucket7:
    image: atlassian/bitbucket-server:7.17
    container_name: bitbucket-7-17
    ports:
      - 7990:7990
      - 7999:7999
    environment:
      JVM_MINIMUM_MEMORY: 512m
      JVM_MAXIMUM_MEMORY: 1024m
    volumes:
      - bitbucket7-data:/var/atlassian/application-data/bitbucket
    restart: unless-stopped

  drone1-server:
    image: drone/drone:1.10 #12.2020
    container_name: drone-1-10
    ports:
      - 80:80
    environment:
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_GIT_USERNAME=drone
      - DRONE_GIT_PASSWORD=drone
      - DRONE_STASH_SERVER=http://bitbucket.local:7990
      - DRONE_STASH_CONSUMER_KEY=95cg28eb25ef82
      - DRONE_STASH_PRIVATE_KEY=/path/to/key.pem
      - DRONE_SERVER_HOST=drone.local
      - DRONE_SERVER_PROTO=http
      - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
      - DRONE_TLS_AUTOCERT=false
      - DRONE_USER_CREATE=username:posselt,admin:true
    volumes:
      - drone1-data:/var/lib/drone/
      - ./bitbucket-key/key.pem:/path/to/key.pem
    restart: unless-stopped

  drone1-agent:
    image: drone/drone-runner-docker:1.6 #01.2021
    container_name: agent-1-16
    depends_on:
      - drone1-server
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=drone1-server
      - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
      - DRONE_RUNNER_CAPACITY=3
      - DRONE_RUNNER_NAME=drone1-runner
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

volumes:
  bitbucket7-data: {}
  drone1-data: {}

Probieren Sie es gern einmal aus, die Schritte für die OAuth 1.0 Einrichtung liegen dem Beispiel mit bei.

setup-bitbucket-7.17_with_drone-1.10

 

BitBucket 5.16 & Drone 2.7

Nach Drone 1.10 folgte die Version 2.x. In dieser ist ein Feature-Flag enthalten, der es ermöglicht auch eine ältere Version von BitBucket wieder ohne Fehlermeldung zu benutzen.

version: "3.3"

services:
  bitbucket5:
    image: atlassian/bitbucket-server:5.16
    container_name: bitbucket-5-16
    ports:
      - 7990:7990
      - 7999:7999
    environment:
      JVM_MINIMUM_MEMORY: 512m
      JVM_MAXIMUM_MEMORY: 1024m
    volumes:
      - bitbucket5-data:/var/atlassian/application-data/bitbucket
    restart: unless-stopped

  drone2-server:
    image: drone/drone:2.7 #v2 #12.2021
    container_name: drone-2-7
    ports:
      - 80:80
    environment:
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_GIT_USERNAME=drone
      - DRONE_GIT_PASSWORD=drone
      - DRONE_STASH_SERVER=http://bitbucket.local:7990
      - DRONE_STASH_CONSUMER_KEY=95cg28eb25ef82
      - DRONE_STASH_PRIVATE_KEY=/path/to/key.pem
      - DRONE_SERVER_HOST=drone.local
      - DRONE_SERVER_PROTO=http
      - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
      - DRONE_TLS_AUTOCERT=false
      - DRONE_USER_CREATE=username:posselt,admin:true
      - DRONE_STASH_VERSION=5.16.11
    volumes:
      - drone2-data:/var/lib/drone/
      - ./bitbucket-key/key.pem:/path/to/key.pem
    restart: unless-stopped

  drone2-agent:
    image: drone/drone-runner-docker:1.7 #11.2021
    container_name: agent2
    depends_on:
      - drone2-server
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=drone2-server
      - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
      - DRONE_RUNNER_CAPACITY=3
      - DRONE_RUNNER_NAME=drone1-runner
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

volumes:
  bitbucket5-data: {}
  drone2-data: {}

Auch dieses Beispiel kann man gern ausprobieren. Die Schritte der Einrichtung von OAuth 1.0 entsprechen den vorangegangen Beispielen.

setup-bitbucket-5.16_with_drone-2.7

 

BitBucket 7.6 & Drone 2.20

Das letzte Beispiel möchte aufzeigen das die LTS Versionen von BitBucket 7.x auch mit der relativ jungen Version von drone.io genutzt werden kann.

version: "3.3"

services:
  bitbucket7:
    image: atlassian/bitbucket-server:7.6
    container_name: bitbucket-7-6
    ports:
      - 7990:7990
      - 7999:7999
    environment:
      JVM_MINIMUM_MEMORY: 512m
      JVM_MAXIMUM_MEMORY: 1024m
    volumes:
      - bitbucket7-data:/var/atlassian/application-data/bitbucket
    restart: unless-stopped

  drone2-server:
    image: drone/drone:2.20 #08.2023
    container_name: drone-2-20
    ports:
      - 80:80
    environment:
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_GIT_USERNAME=drone
      - DRONE_GIT_PASSWORD=drone
      - DRONE_STASH_SERVER=http://bitbucket.local:7990
      - DRONE_STASH_CONSUMER_KEY=95cg28eb25ef82
      - DRONE_STASH_PRIVATE_KEY=/path/to/key.pem
      - DRONE_SERVER_HOST=drone.local
      - DRONE_SERVER_PROTO=http
      - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
      - DRONE_TLS_AUTOCERT=false
      - DRONE_USER_CREATE=username:posselt,admin:true
    volumes:
      - drone2-data:/var/lib/drone/
      - ./bitbucket-key/key.pem:/path/to/key.pem
    restart: unless-stopped

  drone2-agent:
    image: drone/drone-runner-docker:1.8 #01.2023
    container_name: agent2
    depends_on:
      - drone2-server
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=drone2-server
      - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
      - DRONE_RUNNER_CAPACITY=3
      - DRONE_RUNNER_NAME=drone1-runner
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

volumes:
  bitbucket7-data: {}
  drone2-data: {}

Auch dieses Beispiel kann man gern ausprobieren. Die Einrichtung von OAuth 1.0 entspricht den anderen Beispielen.

setup-bitbucket-7.6_with_drone_2.20

 

BitBucket 7.21 & Drone 2.20

Natürlich besteht die Möglichkeit das drone.io auch mit der LTS Version 7.21 verbunden werden kann.

setup-bitbucket-7.21_with_drone_2.20

 

BitBucket 8.9 & Drone 2.20

Auch das zur Zeit akutelle LTS Release 8.9 des BitBucket Servers lässt sich via OAuth1 mit drone.io verbinden.

setup-bitbucket-8.9_with_drone_2.20

 

Ausblick

Zwar erhielt BitBucket mit Version 7.21 den Support für OAuth 2, was definitiv eine Vorschritt in der Entwicklung von BitBucket war.
Aber Atlassian hat zunehmen die Vermarktung der BitBucket Server Varinate um- oder eingestellt, was sicherlich auch Einfluss auf die Verbreitung von BitBucket in Zukunft haben wird.

 

Drone.io wird nach wie vor weiter entwickelt, und zeigt mehr und mehr Ansätze eines CI/CD Tool der 3. Generation, gerade durch seine Optionen im Bezug auf Kubernates.
Mehr zu den unterschiedlichen Generationen von CI/CD Tools finden sie in diesem Beitrag Ein CI/CD System der 2. Generation

Sucht man heute nach dem Repo von Drone.io selbst, so landet man in diesem Future Repo https://github.com/harness/gitness Es wird aktiv dran entwickelt, aber es sieht so aus als möchte hier die nächste All-In-One Lösung auf den Markt https://gitness.com/
Es bleibt also spannend wohin die Reise geht von drone.io und seiner Version 3.x