在推送到 Codecommit 时需要特定的提交消息 AWS Lambda
Posted
技术标签:
【中文标题】在推送到 Codecommit 时需要特定的提交消息 AWS Lambda【英文标题】:Require Specific Commit Message AWS Lambda on Push to Codecommit 【发布时间】:2020-03-28 08:59:27 【问题描述】:我正在尝试强制执行以“BPSD-XXXXX”开头的提交,并且无法弄清楚如何在推送后强制执行此 lambda 函数,但在代码实际推送到 AWS Codecommit 之前。
下面的 lambda 函数强制执行提交字符串,但直到实际推送代码之后。推送代码时,我为 Codecommit 设置了触发器。
我意识到触发器是问题所在,但是是否有一个触发器可以在完全推送实际发生之前以某种方式检查提交消息?还是在推送发生时?
var aws = require('aws-sdk');
//aws.config.update(region:'us-east-2');
var codecommit = new aws.CodeCommit( apiVersion: '2015-04-13' );
exports.handler = function (event, context)
//console.log(JSON.stringify(event));
for (var reference of event.Records[0].codecommit.references)
let commitId = reference.commit;
let repo = event.Records[0].eventSourceARN.split(':').pop();
console.log('commitId', commitId);
console.log('repo', repo);
codecommit.getCommit( repositoryName: repo, commitId: commitId , function (error, data)
if (error)
throw error;
console.log('message:', data.commit.message);
if (!/^(BPSD-[0-9]+|Merge)/.test(data.commit.message))
throw new Error("Your commit message is missing either a JIRA Issue ('BPSD-XXXX') or 'Merge'");
);
;
如果提交消息不包含“BPSD-XXXXX”,我希望不推送代码
【问题讨论】:
this 对您有用吗?听起来有类似的需求。 @RomainValeri 这更像是一个客户端解决方案,无法对我团队中的所有开发人员强制执行,仅适用于我的本地计算机。 第二个答案here解决了远端部分。 【参考方案1】:在您的 lambda 点上,它已经上传。您需要做的是在提交时强制执行提交挂钩,以检查提交消息。这将可能在 .git/hooks/commit-msg
中进行控制这些可以在每个 repo 中进行控制,也可以设置为服务器端提交挂钩。
一些应该有帮助的链接:
https://git-scm.com/book/uz/v2/Customizing-Git-An-Example-Git-Enforced-Policy
https://gist.github.com/pgilad/5d7e4db725a906bd7aa7
我发现的一个快速脚本可以放在 .git/hooks/commit-msg
#!/usr/bin/env bash
INPUT_FILE=$1
START_LINE=`head -n1 $INPUT_FILE`
PATTERN="^(MYPROJ)-[[:digit:]]+: "
if ! [[ "$START_LINE" =~ $PATTERN ]]; then
echo "Bad commit message, see example: MYPROJ-123: commit message"
exit 1
fi
【讨论】:
您发送的其中一个链接说您应该包含一个更新挂钩。这个文件是否也放在 .git/hooks/update 中?你如何使它成为服务器端的钩子?以上是关于在推送到 Codecommit 时需要特定的提交消息 AWS Lambda的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb atlas + node.js 在本地工作,但在推送到 Heroku 时停止
无法将更改从 AWS CodeBuild 推送到 AWS CodeCommit