Closed matwerber1 closed 9 months ago
Thanks for the feature request @matwerber1 . This is a big feature, and I'm not sure I completely agree with the use cases you've outlined (for example, If a README was the the only file changed, do not trigger the normal pipeline.
- that seems very dangerous to me).
However, if you want to work on it, I'm happy to offer guidance in getting this in 🙂.
I'm not 100% sure I agree with it either, but I have talked to some where it might make sense, and of course, the blog post suggests others may want to use the approach, too.
I can't promise I can find the time to work on it, but I'm not opposed to it. It would be fun to contribute to the CDK :) Is there a good starting point? My Typescript is not strong but may be a good learning opportunity.
The Contributing.md
file is a good start. You can also check out my blog post on the subject (shameless plug): https://www.endoflineblog.com/cdk-tips-02-how-to-contribute-to-the-cdk
I just ran into this issue when trying to use a single source for hosting both CDK source and application source, while using CDK Pipelines for the continuous CDK deployment and AWS CodePipeline for Application deployment.
Everytime I update the CDK code it will fire both a build for CDK and app and vice versa. Unless this is a anti-pattern. I would imagine more people to have a issues as they adopt CDK Pipelines.
This is still relevant. Would be great to have if you want to create a scheduled build after a commit.
With CDK Pipelines this would be a hugely helpful feature.
@matwerber1 I think, I might have a solution for that:
Once you create the Pipeline, you can add (apparently not remove) events
const pipeline = new Pipeline(this, 'Pipeline');
const customLambdaTrigger = new Function(this, 'customLambdaTrigger', {
/* your configs */
initialPolicy: [
new PolicyStatement({
actions: ['codecommit:GetDifferences'],
resources: [repository.repositoryArn],
}),
new PolicyStatement({
actions: ['codepipeline:StartPipelineExecution'],
resources: [pipeline.pipelineArn],
}),
],
});
const eventPattern
= {
'detail-type': ['CodeCommit Repository State Change'],
'resources': [repository.repositoryArn],
'source': ['aws.codecommit'],
'detail': {
referenceType: ['branch'],
event: ['referenceCreated', 'referenceUpdated'],
referenceName: ['main'],
},
};
pipeline.onEvent('EventTrigger', {
eventPattern,
description: 'Trigger the pipeline when a commit is pushed to the master branch',
target: new LambdaFunction(customLambdaTrigger),
});
You need to disable the default rules of CodeCommitSourceAction
(manually).
CC: @skinny85
Comments on closed issues are hard for our team to see. If you need more assistance, please either tag a team member or open a new issue that references this one. If you wish to keep having a conversation with other community members under this issue feel free to do so.
This feature request is to allow customization of the CloudWatch Event created by a CodeCommit source action in the aws-codepipeline-actions module.
Use Case
Per the blog post below, one may want to add custom logic to the CloudWatch Event that triggers a pipeline, so that they can selectively determine when to trigger a pipeline rather than triggering it on every commit to the branch being watched. This customization may be done by having the CloudWatch Event invoke a Lambda rather than directly triggering the pipeline. The Lambda can apply logic to determine whether this (or a different) pipeline is triggered.
Today, the aws-codepipeline-actions CodeCommit source action does not allow you to specify / modify the rules of the CloudWatch Event created by the construct.
Inspiration for this request is from the blog below:
https://aws.amazon.com/blogs/devops/adding-custom-logic-to-aws-codepipeline-with-aws-lambda-and-amazon-cloudwatch-events/
I want to use trunk-based development (single master branch) but have the ability to selectively trigger a pipeline based on facts about the commit.
For example:
If a README was the the only file changed, do not trigger the normal pipeline.
If (e.g. in the event of an emergency), I need to push a hotfix straight to prod while skipping my test and staging environment, I want to invoke a different pipeline that is source -> build -> prod, instead of my normal pipeline of source-> test -> staging -> prod.
Proposed Solution
Proposed idea #1 is to able to specify your own, previously-created CloudWatch Event, e.g.:
Idea 2 is to be able to customize the target parameters of the event created by the source action:
Other
This is a :rocket: Feature Request