我目前正在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文档也没有提到这样的功能。
答案 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]
,然后执行管道。
请记住,如果您所做的更改是一系列提交,那么您可能希望检查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;
};
答案 1 :(得分:0)
答案 2 :(得分:0)
我建议您在管道建立之前对其进行手动审核。然后,您可以在准备好构建时批准它。
答案 3 :(得分:0)
不想构建特定提交的有效原因是当您使用CodeBuild为您生成提交时。例如,我在master分支上有一些代码可以通过所有测试。然后,我想更新changelog,package.json版本,并在新提交上创建git标签,然后将其推回CodeCommit存储库。
如果我在Codebuild上执行此操作,则版本提交会触发另一个构建!鉴于提交的内容不会实质改变代码的行为,因此无需构建和测试此提交。
除了所有这些,亚马逊还应该研究市场中的功能,并尝试至少提供 功能奇偶性。向CodeBuild触发器代码添加RegEx检查“ skip-ci”最多将花费几个小时。