Joe*_*ins 6 codeship aws-codepipeline
我目前正在开发一个个人项目master。每次我推送到origin master构建时都会在 CodePipeline 上触发。因为我是这个项目中唯一的开发人员,并且不想在这个阶段打扰分支,所以跳过不必要的构建会很好。我不介意推到另一个分支,但这是一个小烦恼。
CodeShip 允许您通过包含在提交消息中来跳过构建--skip-ci。CodePipeline 可以实现类似的功能吗?
我的谷歌搜索都没有产生结果。CodePipeline 文档也没有提到这样的功能。
ugl*_*low 12
不想构建某个提交的一个正当理由是当您使用 CodeBuild 为您生成一个提交时。例如,我在 master 分支上有一些通过所有测试的代码。然后我想更新更改日志、package.json 版本并在新提交上创建一个 git 标记并将其推送回 CodeCommit 存储库。
如果我在 Codebuild 上执行此操作,则版本提交会触发另一个构建!鉴于提交的内容不会实质性地改变代码的行为,因此无需构建和测试此提交。
除此之外,亚马逊还应该关注市场上的功能,并尝试提供至少功能相同的功能。将“skip-ci”的 RegEx 检查添加到 CodeBuild 触发器代码最多需要几个小时才能实现。
默认情况下,codepipeline 创建一个 cloudwatch 事件,它会在特定分支的所有更改上触发您的管道。
您可以做的是设置此 cloudwatch 事件以触发 lambda 函数。该函数可以检查是否有必要构建此提交并启动您的 CodePipeline。
以下是如何实现此目标的示例:https : //aws.amazon.com/blogs/devops/adding-custom-logic-to-aws-codepipeline-with-aws-lambda-and-amazon-cloudwatch-events/
这是 lambda 函数的一个简单示例。它检查最后一次提交是否[skip-CI]在其消息中没有,然后执行管道。请记住,如果您的更改是一系列提交,您可能想要检查oldCommitId和之间的所有内容,则此代码仅检查最后一次提交commitId。
const AWS = require('aws-sdk');
const codecommit = new AWS.CodeCommit();
const codepipeline = new AWS.CodePipeline();
exports.handler = async (event) => {
const { detail: { repositoryName, commitId, oldCommitId } } = event
const { commit } = await codecommit.getCommit({
commitId,
repositoryName
}).promise()
if(commit.message.search(/\[skip-CI\]/) === -1) {
const { pipelineExecutionId } = await codepipeline.startPipelineExecution({
name: 'your-pipeline-name'
}).promise()
console.log(`Pipeline have started. Execution id: ${pipelineExecutionId}!`)
} else {
console.log('Pipeline execution is not required')
}
return;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4247 次 |
| 最近记录: |