构建和测试¶
项目接入¶
在项目根目录中提供 .badwolf.yml 文件,用于配置 CI 环境等,使用 YAML 语法。
可配置的项有:
选项名 | 类型 | 说明 |
---|---|---|
image | string | 用于构建的 Docker 镜像,提供此选项时可不提供 dockerfile 选项 |
shell | string | 使用的 shell 程序,默认为 bash |
docker | boolean | 挂载外部的 Docker sock 到容器中以便使用 Docker, 默认为 false |
dockerfile | string | 用于构建 Docker 镜像的 dockerfile 文件名称, 默认为 Dockerfile |
branch | string/list | 仅在这些分支上运行构建和测试 |
script | string/list | 构建/测试的命令 |
after_success | string/list | 构建/测试成功后运行的命令 |
after_failure | string/list | 构建/测试失败后运行的命令 |
service | string/list | 构建/测试前启动的服务,需要在 Dockerfile 中配置安装对应的软件包 |
env | string | 环境变量,如: env: X=1 Y=2 Z=3 |
linter | string/list | 启用的代码检查工具 |
notification.email | string/list/object | 邮件通知地址列表 |
notification.slack_webhook | string/list/object | Slack webhook 地址列表 |
privileged | boolean | 使用特权模式启动 Docker 容器 |
artifacts | boolean/object | 保存构建中产生的 artifacts |
artifacts.paths | string/list | artifacts 路径 |
artifacts.excludes | string/list | 应该忽略的 artifacts (glob pattern) |
vault.url | string | Vault URL |
vault.token | string | Vault Token |
vault.env | string/list | 从 Vault 读取的环境变量,格式为:ENV_NAME secret/path:key |
请注意,当 image 和 dockerfile 选项同时提供时, image 选项优先使用。
然后,在 BitBucket 项目设置中配置 webhook,假设部署机器的可访问地址为:http://badwolf.example.com:8000, 则 webhook 地址应配置为:http://badwolf.example.com:8000/webhook/push。
也可以使用 HTTP API 自动配置 webhook,如:
curl -XPOST http://badwolf.example.com:8000/webhook/register/user1/repo1
构建运行时环境变量¶
变量名 | 值 |
---|---|
DEBIAN_FRONTEND | noninteractive |
HOME | /root |
SHELL | 设置的 shell 路径,如 /bin/bash, /bin/sh |
TERM | xterm-256color |
CI | true |
CI_NAME | badwolf |
DOCKER_HOST | unix:///var/run/docker.sock(开启 Docker 功能时存在) |
BADWOLF_COMMIT | 构建仓库的 git commit sha |
BADWOLF_BUILD_DIR | 构建目录路径(仓库克隆路径) |
BADWOLF_REPO_SLUG | 仓库 slug |
BADWOLF_TAG | git tag 名称(如果有) |
BADWOLF_BRANCH | git 分支名称 |
BADWOLF_PULL_REQUEST | Bitbucket Pull Request ID(如果有) |
Tips¶
- 在 commit 的 message 中包含 ci skip 跳过测试
- 在评论中包含 ci retry 重跑测试
- 在评论或 commit message 或 Pull Request 的标题/描述中包含 ci rebuild 重新构建 Docker 镜像,同时包含 no cache 禁用 Docker 构建缓存
- 在 Pull Request 的标题/描述中包含 merge skip 或者 wip 或者 working in progress 禁用自动合并 Pull Request 功能