跳到主要内容

服务

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