我可以跳过AWS CodePipeline构建吗?

时间:2018-03-07 00:43:42

标签: codeship aws-codepipeline

我目前正在setwd("C:/Program Files/R/R-3.4.3/win-library") pkgs <- list.files() install.packages(c(print(as.character(pkgs), collapse="\",\"")), repos = NULL) 开发个人项目。每次推送到s20x时,都会在CodePipeline上触发构建。因为我是这个项目的唯一开发人员,并且在这个阶段不想打扰分支,所以跳过不必要的构建会很不错。我不介意推到另一个分店,但这是一个小烦恼。

CodeShip允许您通过在提交消息中包含master来构建skip。 CodePipeline可以这样吗?

我的Google搜索都没有产生结果。 CodePipeline文档也没有提到这样的功能。

4 个答案:

答案 0 :(得分:3)

默认情况下,代码管道创建一个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],然后执行管道。 请记住,如果您所做的更改是一系列提交,那么您可能希望检查oldCommitIdcommitId之间的所有内容,那么此代码仅检查最后一次提交。

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;
};

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我建议您在管道建立之前对其进行手动审核。然后,您可以在准备好构建时批准它。

答案 3 :(得分:0)

不想构建特定提交的有效原因是当您使用CodeBuild为您生成提交时。例如,我在master分支上有一些代码可以通过所有测试。然后,我想更新changelog,package.json版本,并在新提交上创建git标签,然后将其推回CodeCommit存储库。

如果我在Codebuild上执行此操作,则版本提交会触发另一个构建!鉴于提交的内容不会实质改变代码的行为,因此无需构建和测试此提交。

除了所有这些,亚马逊还应该研究市场中的功能,并尝试至少提供 功能奇偶性。向CodeBuild触发器代码添加RegEx检查“ skip-ci”最多将花费几个小时。