Services
Drone supports launching detached service containers as part of your pipeline. The typical use case for services is when your unit tests require a running redis server, for example:
1 kind: pipeline
2 type: kubernetes
3 name: default
4
5 services:
6 - name: cache
7 image: redis
Service containers share the same network as your pipeline steps and can be access at the localhost address. In our previous example, the redis container can be accessed from the pipeline at tcp://127.0.0.1:6379
1 kind: pipeline
2 type: kubernetes
3 name: default
4
5 steps:
6 - name: ping
7 image: redis
8 commands:
9 - redis-cli -h 127.0.0.1 ping
10
11 services:
12 - name: cache
13 image: redis
It is important to note the service container exit code is ignored, and a non-zero exit code does not fail the overall pipeline. Drone expects service containers to exit with a non-zero exit code, since they often need to be killed after the pipeline completes.
Detached Steps
Services can also be defined directly in the pipeline, as detached pipeline steps. This can be useful when you need direct control over when the service is started, relative to other steps in your pipeline.
1 kind: pipeline
2 type: kubernetes
3 name: default
4
5 steps:
6 - name: cache
7 image: redis
8 detach: true
9
10 - name: ping
11 image: redis
12 commands:
13 - redis-cli ping
Common Problems
This section highlights some common problems that users encounter when configuring services. If you continue to experience issues please also check the faq. You might also want to compare your yaml to our example service configurations.
Initialization
It is important to remember that after a container is started, the software running inside the container (e.g. redis) takes time to initialize and begin accepting connections.
Be sure to give the service adequate time to initialize before attempting to connect. A naive solution is to use the sleep command.
kind: pipeline
type: kubernetes
name: default
steps:
- name: ping
image: redis
commands:
+ - sleep 5
- redis-cli -h cache ping
services:
- name: cache
image: redis