我可以跳过 AWS CodePipeline 构建吗?

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 中不存在这样一个常识性、明显且有用的功能感到恼火和沮丧。这怎么可能不是优先事项呢?让我猜想,CodePipeline 团队从头开始重建它已经超过 10 次了,因为他们无法进行内部通信或不想查看现有代码。 (2认同)

Alp*_*azy 5

默认情况下,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)


Aar*_*ron 0

  • CodePipeline 目前不提供此功能。
  • 我很想知道为什么您认为某些构建是不必要的。您是否推送一系列提交并且只想针对最后一次提交进行构建?这可能更适用于团队环境,但我倾向于希望每次提交都有一个构建,因此我不会发现自己处于这样的情况:我在我的团队中第一次推送代码并拾取并构建其他人的损坏代码。建造。