服务
Woodpecker 在 YAML 文件中提供了一个服务部分,用于定义服务容器。 下面的配置组合了数据库和缓存容器。
服务使用自定义主机名访问。
在下面的示例中,MySQL 服务被分配主机名 database,并在 database:3306 可用。
steps:
- name: build
image: golang
commands:
- go build
- go test
services:
- name: database
image: mysql
- name: cache
image: redis
您可以显式定义端口和协议:
services:
- name: database
image: mysql
ports:
- 3306
- name: wireguard
image: wg
ports:
- 51820/udp
配置
服务容器通常暴露环境变量来自定义服务启动,如默认用户名、密码和端口。请查看官方镜像文档以了解更多信息。
services:
- name: database
image: mysql
+ environment:
+ - MYSQL_DATABASE=test
+ - MYSQL_ALLOW_EMPTY_PASSWORD=yes
- name: cache
image: redis
分离
服务和长时间运行的容器也可以使用 detach 参数包含在配置的管道部分中,而不会阻塞其他步骤。当需要对启动顺序进行显式控制时应该使用这个功能。
steps:
- name: build
image: golang
commands:
- go build
- go test
- name: database
image: redis
+ detach: true
- name: test
image: golang
commands:
- go test
来自分离步骤的容器将在管道结束时终止。
初始化
服务容器需要时间来初始化并开始接受连接。如果您无法连接到服务,您可能需要等待几秒钟或实现退避。
steps:
- name: test
image: golang
commands:
+ - sleep 15
- go get
- go test
services:
- name: database
image: mysql
完整管道示例
services:
- name: database
image: mysql
environment:
- MYSQL_DATABASE=test
- MYSQL_ROOT_PASSWORD=example
steps:
- name: get-version
image: ubuntu
commands:
- ( apt update && apt dist-upgrade -y && apt install -y mysql-client 2>&1 )> /dev/null
- sleep 30s # need to wait for mysql-server init
- echo 'SHOW VARIABLES LIKE "version"' | mysql -u root -h database test -p example