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