Github-Action使用PHP

编写一个发送Slack消息的PHP脚本,然后将这个脚本转换为Github操作。创建一个新文件夹slack-php,用命令code .打开这个新的空文件夹,在vscode中这个文件夹下新建文件script.php。要发送http请求,这里要使用一个Github Action的一个Requests,它使得Github发送http请求更容易,为了使用这个包,将使用composer,它是一个php包管理器,composer就像是php中的npm。

下载安装composer

在win中下载composer.exe文件进行安装时,要先安装微软常用运行库合集下载安装php包,下载(VS17 x64 Non Thread Safe (2024-Nov-20 11:18:14)下面的.Zip版本,然后解压就可以了。在安装composer时,选择php的路径,选中php存放的路径就可以了。

在项目中安装Requests

在打开项目的vscode的终端输入命令composer require rmccue/requests下载安装requests包,如:D:\github-Action\slack-php> composer require rmccue/requests,安装完成后会在项目文件夹下生成2个文件(composer.lock,composer.json)和一个文件夹(vendor),打开composer.json可以看到文件的版本号。

在slack中创建Webhooks

先注册一个slack网站的帐号登录,登录后创建一个工作区,第一步你公司或团队的名称是什么?这里你可以随便给工作区取一个名称;第二步你的姓名是什么?这个随便填;第三步,点击跳过这一步;第四步你的团队现在在做什么?这里填写你想创建的频道名称#,随便填写。完了后点击开始使用免费套餐

创建APP

在工作区主页面中,点击刚建立的Slack工作区下拉菜单,点击工具和设置—>点击管理应用。在应用管理页面点击浏览、管理、构建中的构建创建一个新的应用,接着Create an App,选择**From a manifest
Use a manifest file to add your app’s basic info, scopes, settings & features to your app.**—>接下来是要选择一个工作,如果你只有一个工作区,选中即可。如果你有2个以上,就选择一个你想在其工作区上开发应用的一个。——>Next—>Next,完成创建app。

激活Webhooks

创建一个应用程序后,点击左边菜单栏中的IncomingWebhooks,在右边打开滑块off,使其滑块在on上,点击下面的Add New Webhook to Workspace,选择一个频道以发布应用,选择**#所有-Slack工作区,点击允许,这样webhooks就创建完成了。下面的Webhook URL**等下要用到。

使用Repuests

在项目根目录中,新建一个名为script.php的文件,添加代码:

<?php
require_once 'vendor/autoload.php';
Requests::register_autoloader();

$response = Requests::post( "https://hooks.slack.com/services/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",
array(
'content-type' => 'application/json'),
json_encode(array(
'text' => 'some message'))
);
var_dump($response);

if(!$response->success){
echo 'error';
echo '$response->body';
}
  • 使用require_once vendor/autoload.php方式加载包。
  • 通过Requests::register_autoloader();;来初始化requests包
  • 创建一个新变量$response,然后用pos来调用上面的Webhook URL
  • 第二个参数是标题数组,里面填写发送的Heah头信息。
  • 第三个参数,可以传递数据,它是一个带有“text:”的json
  • var_dump($response);记录响应。

然后运行这个文件。在终端中输入php script.php,在网站slack上的slack工作区的频道下的“所有-slack工作区”下的Demo App应用下就会收到一条some message信息,这条信息是我们上面的代码`’text’ => ‘some message’发送的。

在刚才发送php script.php命令的vscode终端往上查找["success"]=> bool(true),如果这个为真说明代码执行成功,如果为Felse说明失败。

所以我们可以利用success在代码中添加检查,如果执行不成功,则回显error。我们将上面代码中的url后面随便添加几个英文字母,使url不正确,再发送php script.php命令时,就会在执行后的回显中出现error,如果将echo 'error'改成echo $response->body,就可以在这里得到实际的响应。

在GithubAction使用Docker中运行上面的脚本

当使用webhook发送slack信息时,不仅可以发送一些文本,还可以发送一些具有格式,按钮、并且还可以是交互式的等,因此,在slack消息生成器中,可以利用slack工具构建我们的消息模板,然后它会生成一些模板,这是可以在请求中发送的json,信息将按照我们设计的方式进行格式化。

打开网页选择第一个模板Farmhouse Thai Cuisine点击上面的Templates,在新页面中选择第一个点击Use Message Template,然后选择右边的代码复制粘贴到vscode上并修改如下:

<?php
require_once 'vendor/autoload.php';
Requests::register_autoloader();

$response = Requests::post(
"https://hooks.slack.com/services/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",
array(
'content-type' => 'application/json'),
json_encode(array(
"blocks" => array(
array(
"type" => "section",
"text" => array(
"type" => "mrkdwn",
"text" => "You have a new request:\n*<fakeLink.toEmployeeProfile.com|Fred Enriquez - New device request>*",
),
),

array(
"type" => "section",
"fields" => array(
array(
"type" => "mrkdwn",
"text" => "*Type:*\nComputer (laptop)",
),
array(
"type"=> "mrkdwn",
"text"=>"*When:*\nSubmitted Aut 10",
),
array(
"type"=> "mrkdwn",
"text"=> "*Last Update:*\nMar 10, 2015 (3 years, 5 months)",
),
array(
"type"=> "mrkdwn",
"text"=> "*Reason:*\nAll vowel keys aren't working.",
),
array(
"type"=> "mrkdwn",
"text"=> "*Specs:*\n\"Cheetah Pro 15\" - Fast, really fast\"",
),
),
),

array(
"type" => "actions",
"elements"=> array(
array(
"type"=> "button",
"text"=> array(
"type"=> "plain_text",
"emoji"=> true,
"text"=> "Approve",
),
"style"=> "primary",
"value"=> "click_me_123",
),
array(
"type"=> "button",
"text"=> array(
"type"=> "plain_text",
"emoji"=> true,
"text"=> "Deny",
),
"style"=> "danger",
"value"=> "click_me_123",
),
),
),
),
))
);
var_dump($response);

if(!$response->success){
echo 'error';
echo $response->body;
}

发送测试命令php script.phpSlack工作区频道下-所有-slack工作区看demo App的运行结果。