novaway / deployer-release-check-list
Deployer 的发布检查清单
1.0.0
2020-01-15 13:20 UTC
Requires
- deployer/deployer: ~6.0
This package is auto-updated.
Last update: 2024-08-29 05:12:53 UTC
README
这是一个简单的配方,用于使用 Gitlab 的问题来管理发布检查清单的 Deployer。
这个想法是处理一个发布所需的强制(且非阻塞)任务列表。
这是通过使用 Gitlab 的问题(及其任务系统)实现的,具有特定的标题和标签(可定制)。
安装
composer require novaway/deployer-release-check-list
配置
// deploy.php <?php //... require 'recipe/release_check_list.php'; set('rcl_gitlab_host', 'https://gitlab.example.com'); set('rcl_gitlab_api_key', 'MY_API_TOKEN'); set('rcl_gitlab_project_id', 'MY_PROJECT_ID');
使用方法
首先,创建一个 Gitlab 问题,并使用以下信息:
- 一个名为 "发布检查清单" 的标签(可以自定义,见下文选项)
- 一个遵循以下格式的标题 "[MAJOR.MINOR.x] 我的精彩清单"。
例如:"[1.8.x] 我的精彩清单"。
这个问题将与所有以 git 标签 开头的部署相匹配,标签以 1.8
开头
bin/dep deploy prod --tag=1.8.6
在问题内部,您需要创建一个(单级)任务列表
每个任务可以接受两种类型的可选标志
- 一个针对目标 Deployer 主机:
prod
、staging
、... - 一个针对需要在部署后完成的任务:
post-release
(未标记的任务将为部署强制,如果未标记为完成则将抛出错误)
示例
- [ ] Task 1 [prod,staging]
- [ ] Task 2 [prod,post-release]
- [ ] Task 3
任务 1
将在prod
和staging
主机上的部署之前 强制任务 2
对于prod
主机上的部署 非阻塞,但在部署成功后会被提醒任务 3
将在所有主机上的部署之前 强制
选项
自定义 Gitlab 标签
set('rcl_gitlab_label', 'Foo list');
自定义获取发布版本的方式
默认情况下,rcl_release_version
基于以下内容:`input()->getOption('tag')`。
set('rcl_release_version', get('my_release_version'));
示例
附加功能
为未完成的发布后任务获取 Slack 通知(假设您已经配置了 Slack 菜谱)
// deploy.php use Deployer\Task\Context; use Deployer\Utility\Httpie; task('rcl:post-release-slack-reminder', function() { if (!get('slack_webhook', false)) { return; } $pendingPostReleaseTasks = get('rcl_pending_post_release_tasks', []); if (count($pendingPostReleaseTasks) === 0) { return; } $text = implode(PHP_EOL, array_map(function($item) { return '- '.$item[1]; }, $pendingPostReleaseTasks)); $host = Context::get()->getHost()->getHostname(); $attachment = [ 'title' => sprintf('[%s][%s] Pending post-release tasks:', $host, get('release_version')), 'text' => $text, 'color' => get('slack_color'), 'mrkdwn_in' => ['text'], ]; Httpie::post(get('slack_webhook'))->body(['attachments' => [$attachment]])->send(); }); after('success', 'rcl:post-release-slack-reminder');