1

I work for a small startup. We have 3 environments (Production, Development, and Staging) and GitHub is used as VCS.

All env runs on EC2 with docker.

Can someone suggest me a simple CICD solution that can trigger builds automatically after certain branches are merged / manual trigger option?

Like, if anything in merged into dev-merge, build and deploy to development, and the same for staging and pushing the image to ECR and rolling out docker update.

We tried Jenkins but we felt it was over-complicated for our small-scale infra.

GitHub actions are also evaluated (self-hosted runners), but it needs YAMLs to be there in repos.

We are looking for something that can give us the option to modify the pipeline or overall flow without code-hosted CICD config. (Like the way Jenkins gives the option to either use Jenkins file or configure the job manually via GUI)

Any opinions about Team City (Self-Hosted Community Version)?

PS: We are looking for free and self hostable options only!

3
  • 1
    Why do you not prefer configuration-as-code (what you call code-hosted CICD config) this is considered best practice all over the place. There are downside is that you have issues if you update the pipeline without wanting to push code changes to your prod branch, but only hits you if you want to do roll-backs.
    – JoSSte
    Commented Jan 2, 2023 at 7:23
  • after certain branches there is the reason you need a bit of code. Commented Mar 5, 2023 at 7:04
  • That said, Github Actions can do quite a lot. I would start there. Commented Mar 6, 2023 at 7:55

2 Answers 2

1

I would recommend reconsidering configuration-as-code (what you call code-hosted CICD config) this is considered best practice all over the place. The advantage is that you set up your tools to point to your repo and it "just works" - this provides a single point of truth as well as "easy" (read: easier than having to reconfigure all jobs manually) disaster recovery.

The only downside is that you have issues if you update the pipeline without wanting to push code changes to your prod branch, but only hits you if you want to do roll-backs. Besides - you can always pull the file to your production branch with git checkout feature/otherbranch -- Jenkinsfile

Jenkins:

I use Jenkins for some of my own projects and have a setup that almost sounds like what you want (Except I build on all pushes, and deploy based on separate config in a separate repo.) these comments are based on that I even have a demo project on github you might want to gather inspiration from?.

You can always put your pipeline config in a separate repo and write code to manually check out the code, but this means that you have to either have THAT job polling the first branch often (to emulate triggers that work out of the box if you keep to a single repo)

Alternatively you can eliminate the second repo by manually configuring a pipeline in Jenkins, but you have to create one for each branch (you miss out on the goodness of multi-branch pipelines - again I'd advise you to reconsider the configuration-as-code approach)

0

In OneDev the Pipeline can be configured in a GUI. See here.

But I'm not sure if this is the right tool for you, because it is a git Server with CI/CD included.

But maybe it is possible to set up a mirror (which might complicate things).

Or you completely switch to onedev, which might be risky.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.