zaengle/envoyer-sentry-release-notifier

一个帮助为Sentry打包发布提交的工具。

v0.0.3 2023-03-07 18:38 UTC

This package is auto-updated.

Last update: 2024-09-07 21:53:38 UTC


README

此工具有助于在从Laravel Envoyer部署时收集提交并将其作为新版本发送到Sentry的过程。

Sentry可以通过提供起始哈希和结束哈希将一系列git提交关联到一个发布版本。由于.git仓库并未与站点一同部署,使用Envoyer时可能会有些棘手。通过以下部署钩子的组合,我们能够捕获两个必需的哈希,并利用Sentry中的提交跟踪功能。

安装

composer require zaengle/envoyer-sentry-release-notifier

Sentry配置

在你的config/sentry.php文件中添加此包提供的getCommitHash()辅助函数。

<?php

use Zaengle\EnvoyerSentryReleaseNotifier\EnvoyerSentryReleaseNotifier;

return [
    // capture release as git sha
    'release' => app(EnvoyerSentryReleaseNotifier::class)->getCommitHash(),
    
    // rest of config...
];

Envoyer钩子

一旦你的项目配置了Sentry,请将以下部署钩子添加到Envoyer中。 你需要运行一个只启用Write Git Hash钩子的部署,以便创建初始的.commit_hash文件,供未来的版本使用。

激活新版本 : AFTER

image

Envoyer激活新版本后,我们需要将哈希写入文件,以便为下一个版本提供,它将被用作“commit_hash_previous”

echo "{{ sha }}" > {{release}}/.commit_hash

注意 - 在激活其他钩子之前,需要运行此命令一次,以便为后续步骤创建初始的.commit_hash文件。

克隆新版本 : AFTER

image

yes | cp -f {{project}}/current/.commit_hash {{release}}/.commit_hash_previous
echo "{{ sha }}" > {{release}}/.commit_hash

清除旧版本 : AFTER

image

export GIT_REPO="zaengle/my-sentry-project-name"
export ENVIRONMENT="develop"
export PREVIOUS_SHA=`tail {{release}}/.commit_hash_previous`
export SENTRY_ORG="zaengle"
export SENTRY_BEARER_TOKEN="MyBearerToken"
export SENTRY_PROJECT="my-sentry-project-name"

cd {{ release }}
curl https://sentry.io/api/0/organizations/${SENTRY_ORG}/releases/ \
-H "Authorization: Bearer ${SENTRY_BEARER_TOKEN}" \
-X POST \
-H "Content-Type:application/json" \
-d "{
    \"environment\":\"${ENVIRONMENT}\",
    \"version\":\"{{sha}}\",
    \"refs\":[{
        \"repository\":\"${GIT_REPO}\",
        \"commit\":\"{{sha}}\",
        \"previousCommit\": \"${PREVIOUS_SHA}\"
    }],
    \"projects\": [\"${SENTRY_PROJECT}\"]
}"

curl https://sentry.io/api/0/organizations/${SENTRY_ORG}/releases/{{sha}}/deploys/ \
-X POST \
-H "Authorization: Bearer ${SENTRY_BEARER_TOKEN}" \
-H 'Content-Type: application/json' \
-d "
{
    \"environment\": \"${ENVIRONMENT}\",
    \"name\": \"{{release}}\"
}"

注意:Sentry部署名称限制为64个字符。根据你的项目域名和发布路径的长度,你可能会收到以下错误。

{"name":["Ensure this field has no more than 64 characters."]}

如果是这样,请更新部署脚本来发送{{time}}而不是{{release}}

...
{
    \"environment\": \"${ENVIRONMENT}\",
-    \"name\": \"{{release}}\"
+    \"name\": \"{{time}}\"
}"

许可协议

MIT许可协议(MIT)。请参阅许可文件获取更多信息。

鸣谢