Hey :),
I’ve implemented a k8s plugin for drone prototype and would like to see if it’s working. I’m a 100% drone rookie so far.
I have a Github repo and a docker hub account. I would like to have a DevOps environment on my laptop using drone. Can I use drone in this scenario? What are the requirements for an ‘OAuth homepage’ if I need one?
Here what I've done and how it failed:
1. docker pull drone/drone:0.8
stefan@c25s:~/Test$ docker image ls drone/drone
REPOSITORY TAG IMAGE ID CREATED SIZE
drone/drone 0.8 957c832aa44a 4 weeks ago 30.4MB
2. docker-compose
stefan@c25s:~/Test$ docker-compose version
docker-compose version 1.18.0, build 8dd22a9
docker-py version: 2.6.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
3. docker-compose.yaml
stefan@c25s:~/Test$ cat docker-compose.yaml
version: '2'
services:
drone-server:
image: drone/drone:0.8
ports:
- 80:8000
- 9000
volumes:
- /var/lib/drone:/var/lib/drone/
restart: always
environment:
- DRONE_OPEN=true
- DRONE_HOST=${DRONE_HOST}
- DRONE_GITHUB=true
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
- DRONE_SECRET=${DRONE_SECRET}
drone-agent:
image: drone/agent:0.8
command: agent
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_SERVER=drone-server:9000
- DRONE_SECRET=${DRONE_SECRET}
4. Github OAuth Apps
Homepage URL: http://localhost
Authorization callback URL: http://localhost:8000/authorize
=> Client ID and Client Secret were stored in DRONE_GITHUB_CLIENT and DRONE_GITHUB_SECRET
5. sqlite
+ volumes:
+ - ./drone:/var/lib/drone/
stefan@c25s:~/Test$ find /var/lib/drone
/var/lib/drone
/var/lib/drone/drone.sqlite
6. DRONE_HOST
export DRONE_HOST=http://localhost
7. Socket
stefan@c25s:~/Test$ ll /var/run/docker.sock
srw-rw---- 1 root docker 0 Feb 23 08:21 /var/run/docker.sock=
8. Add Admin
9. Final review
stefan@c25s:~/Test$ cat drone.env
# Drone secret key, used for private communication between agents and web UI
export DRONE_HOST=http://localhost
export DRONE_SECRET=...
export DRONE_GITHUB_CLIENT=...
export DRONE_GITHUB_SECRET=...
export DRONE_ADMIN=stefanhans
stefan@c25s:~/Test$ cat docker-compose.yaml
version: '2'
services:
drone-server:
image: drone/drone:0.8
ports:
- 80:8000
- 9000
volumes:
- /var/lib/drone:/var/lib/drone/
restart: always
environment:
- DRONE_OPEN=true
- DRONE_HOST=${DRONE_HOST}
- DRONE_ADMIN=${DRONE_ADMIN}
- DRONE_GITHUB=true
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
- DRONE_SECRET=${DRONE_SECRET}
drone-agent:
image: drone/agent:0.8
command: agent
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_SERVER=drone-server:9000
- DRONE_SECRET=${DRONE_SECRET}
10. Prepare and start
stefan@c25s:~/Test$ . drone.env
stefan@c25s:~/Test$
stefan@c25s:~/Test$ echo $DRONE_SECRET
...
stefan@c25s:~/Test$ docker-compose up
Recreating test_drone-server_1 ... done
Recreating test_drone-agent_1 ... done
Attaching to test_drone-server_1, test_drone-agent_1
drone-server_1 | [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
drone-server_1 | - using env: export GIN_MODE=release
drone-server_1 | - using code: gin.SetMode(gin.ReleaseMode)
drone-server_1 |
drone-server_1 | [GIN-debug] GET /logout --> github.com/drone/drone/server.GetLogout (12 handlers)
drone-server_1 | [GIN-debug] GET /login --> github.com/drone/drone/server.HandleLogin (12 handlers)
drone-server_1 | [GIN-debug] GET /api/user --> github.com/drone/drone/server.GetSelf (13 handlers)
drone-server_1 | [GIN-debug] GET /api/user/feed --> github.com/drone/drone/server.GetFeed (13 handlers)
drone-server_1 | [GIN-debug] GET /api/user/repos --> github.com/drone/drone/server.GetRepos (13 handlers)
drone-server_1 | [GIN-debug] POST /api/user/token --> github.com/drone/drone/server.PostToken (13 handlers)
drone-server_1 | [GIN-debug] DELETE /api/user/token --> github.com/drone/drone/server.DeleteToken (13 handlers)
drone-server_1 | [GIN-debug] GET /api/users --> github.com/drone/drone/server.GetUsers (13 handlers)
drone-server_1 | [GIN-debug] POST /api/users --> github.com/drone/drone/server.PostUser (13 handlers)
drone-server_1 | [GIN-debug] GET /api/users/:login --> github.com/drone/drone/server.GetUser (13 handlers)
drone-server_1 | [GIN-debug] PATCH /api/users/:login --> github.com/drone/drone/server.PatchUser (13 handlers)
drone-server_1 | [GIN-debug] DELETE /api/users/:login --> github.com/drone/drone/server.DeleteUser (13 handlers)
drone-server_1 | [GIN-debug] POST /api/repos/:owner/:name --> github.com/drone/drone/server.PostRepo (16 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name --> github.com/drone/drone/server.GetRepo (15 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/builds --> github.com/drone/drone/server.GetBuilds (15 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/builds/:number --> github.com/drone/drone/server.GetBuild (15 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/logs/:number/:pid --> github.com/drone/drone/server.GetProcLogs (15 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/logs/:number/:pid/:proc --> github.com/drone/drone/server.GetBuildLogs (15 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/files/:number --> github.com/drone/drone/server.FileList (15 handlers)
drone-agent_1 | {"time":"2018-02-23T11:23:42Z","level":"debug","message":"request next execution"}
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/files/:number/:proc/*file --> github.com/drone/drone/server.FileGet (15 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/secrets --> github.com/drone/drone/server.GetSecretList (16 handlers)
drone-server_1 | [GIN-debug] POST /api/repos/:owner/:name/secrets --> github.com/drone/drone/server.PostSecret (16 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/secrets/:secret --> github.com/drone/drone/server.GetSecret (16 handlers)
drone-server_1 | [GIN-debug] PATCH /api/repos/:owner/:name/secrets/:secret --> github.com/drone/drone/server.PatchSecret (16 handlers)
drone-server_1 | [GIN-debug] DELETE /api/repos/:owner/:name/secrets/:secret --> github.com/drone/drone/server.DeleteSecret (16 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/registry --> github.com/drone/drone/server.GetRegistryList (16 handlers)
drone-server_1 | [GIN-debug] POST /api/repos/:owner/:name/registry --> github.com/drone/drone/server.PostRegistry (16 handlers)
drone-server_1 | [GIN-debug] GET /api/repos/:owner/:name/registry/:registry --> github.com/drone/drone/server.GetRegistry (16 handlers)
drone-server_1 | [GIN-debug] PATCH /api/repos/:owner/:name/registry/:registry --> github.com/drone/drone/server.PatchRegistry (16 handlers)
drone-server_1 | [GIN-debug] DELETE /api/repos/:owner/:name/registry/:registry --> github.com/drone/drone/server.DeleteRegistry (16 handlers)
drone-server_1 | [GIN-debug] PATCH /api/repos/:owner/:name --> github.com/drone/drone/server.PatchRepo (16 handlers)
drone-server_1 | [GIN-debug] DELETE /api/repos/:owner/:name --> github.com/drone/drone/server.DeleteRepo (16 handlers)
drone-server_1 | [GIN-debug] POST /api/repos/:owner/:name/chown --> github.com/drone/drone/server.ChownRepo (16 handlers)
drone-server_1 | [GIN-debug] POST /api/repos/:owner/:name/repair --> github.com/drone/drone/server.RepairRepo (16 handlers)
drone-server_1 | [GIN-debug] POST /api/repos/:owner/:name/move --> github.com/drone/drone/server.MoveRepo (16 handlers)
drone-server_1 | [GIN-debug] POST /api/repos/:owner/:name/builds/:number --> github.com/drone/drone/server.PostBuild (16 handlers)
drone-server_1 | [GIN-debug] DELETE /api/repos/:owner/:name/builds/:number --> github.com/drone/drone/server.ZombieKill (16 handlers)
drone-server_1 | [GIN-debug] POST /api/repos/:owner/:name/builds/:number/approve --> github.com/drone/drone/server.PostApproval (16 handlers)
drone-server_1 | [GIN-debug] POST /api/repos/:owner/:name/builds/:number/decline --> github.com/drone/drone/server.PostDecline (16 handlers)
drone-server_1 | [GIN-debug] DELETE /api/repos/:owner/:name/builds/:number/:job --> github.com/drone/drone/server.DeleteBuild (16 handlers)
drone-server_1 | [GIN-debug] DELETE /api/repos/:owner/:name/logs/:number --> github.com/drone/drone/server.DeleteBuildLogs (16 handlers)
drone-server_1 | [GIN-debug] GET /api/badges/:owner/:name/status.svg --> github.com/drone/drone/server.GetBadge (12 handlers)
drone-server_1 | [GIN-debug] GET /api/badges/:owner/:name/cc.xml --> github.com/drone/drone/server.GetCC (12 handlers)
drone-server_1 | [GIN-debug] POST /hook --> github.com/drone/drone/server.PostHook (12 handlers)
drone-server_1 | [GIN-debug] POST /api/hook --> github.com/drone/drone/server.PostHook (12 handlers)
drone-server_1 | [GIN-debug] GET /stream/events --> github.com/drone/drone/server.EventStreamSSE (12 handlers)
drone-server_1 | [GIN-debug] GET /stream/logs/:owner/:name/:build/:number --> github.com/drone/drone/server.LogStreamSSE (15 handlers)
drone-server_1 | [GIN-debug] GET /api/info/queue --> github.com/drone/drone/server.GetQueueInfo (13 handlers)
drone-server_1 | [GIN-debug] GET /authorize --> github.com/drone/drone/server.HandleAuth (12 handlers)
drone-server_1 | [GIN-debug] POST /authorize --> github.com/drone/drone/server.HandleAuth (12 handlers)
drone-server_1 | [GIN-debug] POST /authorize/token --> github.com/drone/drone/server.GetLoginToken (12 handlers)
drone-server_1 | [GIN-debug] GET /api/builds --> github.com/drone/drone/server.GetBuildQueue (13 handlers)
drone-server_1 | [GIN-debug] GET /api/debug/pprof/ --> github.com/drone/drone/server/debug.IndexHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /api/debug/pprof/heap --> github.com/drone/drone/server/debug.HeapHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /api/debug/pprof/goroutine --> github.com/drone/drone/server/debug.GoroutineHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /api/debug/pprof/block --> github.com/drone/drone/server/debug.BlockHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /api/debug/pprof/threadcreate --> github.com/drone/drone/server/debug.ThreadCreateHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /api/debug/pprof/cmdline --> github.com/drone/drone/server/debug.CmdlineHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /api/debug/pprof/profile --> github.com/drone/drone/server/debug.ProfileHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /api/debug/pprof/symbol --> github.com/drone/drone/server/debug.SymbolHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] POST /api/debug/pprof/symbol --> github.com/drone/drone/server/debug.SymbolHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /api/debug/pprof/trace --> github.com/drone/drone/server/debug.TraceHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /metrics --> github.com/drone/drone/server/metrics.PromHandler.func1 (13 handlers)
drone-server_1 | [GIN-debug] GET /version --> github.com/drone/drone/server.Version (12 handlers)
drone-server_1 | [GIN-debug] GET /healthz --> github.com/drone/drone/server.Health (12 handlers)
11. Call localhost:80 in browser
http://localhost:8000/authorize?error=redirect_uri_mismatch
&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.
&error_uri=https%3A%2F%2Fdeveloper.github.com%2Fapps%2Fmanaging-oauth-apps%2Ftroubleshooting-authorization-request-errors%2F%23redirect-uri-mismatch&
state=drone
Cheers, Stefan