novaway / deployer-release-check-list

Deployer 的发布检查清单

1.0.0 2020-01-15 13:20 UTC

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

在问题内部,您需要创建一个(单级)任务列表

Gitlab issue

每个任务可以接受两种类型的可选标志

  • 一个针对目标 Deployer 主机: prodstaging、...
  • 一个针对需要在部署后完成的任务: post-release(未标记的任务将为部署强制,如果未标记为完成则将抛出错误)

示例

- [ ] Task 1 [prod,staging]
- [ ] Task 2 [prod,post-release]
- [ ] Task 3
  • 任务 1 将在 prodstaging 主机上的部署之前 强制
  • 任务 2 对于 prod 主机上的部署 非阻塞,但在部署成功后会被提醒
  • 任务 3 将在所有主机上的部署之前 强制

选项

自定义 Gitlab 标签

set('rcl_gitlab_label', 'Foo list');

自定义获取发布版本的方式

默认情况下,rcl_release_version 基于以下内容:`input()->getOption('tag')`。

set('rcl_release_version', get('my_release_version'));

示例

在未完成的强制任务的情况下
Uncompleted task

post-release 任务进行提醒
Post-release task

附加功能

为未完成的发布后任务获取 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');