What is OS Hardening and How Can Developers Implement it
As cyber threats become increasingly advanced and complex, organizations are forced to adopt a military attitude of ‘war footing’ to secure their systems and servers. Although
Code fast and break things may be a healthy approach when you’re rushing to present investors with a POC. However, when it comes to developing real-world software products, such an attitude is bound to create more problems than value.
As more people and teams take part in the product journey from concept to an end user’s hands, the more critical orchestration and collaboration of the development lifecycle become.
Most organizations today understand that there is a clear need for DevOps pros and tools to bring order to the chaos of software development and deployment. This order is often defined under the concepts of CI/CD, leveraging automation alongside reliability and collaboration in the development process and its result.
One of the most commonly used CI/CD tools by DevOps today is Jenkins. However, being free and open sourced Jenkins was bound to attract competitors aiming to bridge the FOSS quality gap with a proprietary product. Among such solutions are CircleCI and JetBrains’ TeamCity.
Can TeamCity win over the hearts of Jenkins fans? Before we can compare the two, it’s worth remembering what the concept behind TeamCity and Jenkins actually is, and why you need it.
Continuous Integration is a DevOps practice that involves frequent merging of code changes into the main repository, as code is being changed incrementally.
Continuous Delivery on the other hand is a newer concept. Generally speaking, code in your repository isn’t benefiting the product in any way until it is production. So how do we get it there as frequently as we get the code into our repository without compromising on stability? Pipelines.
Pipelines are a series of commands or stations that new code needs to go through into order to reach production, and they can be automated. By now there are many tools to create, manage and run those pipelines.
For many out there Jenkins is a synonym for CI pipeline, the standard by which all other CI tools should be measured against. Jenkins is a fork from Hudson, the original CI tool developed by Kohsuke Kawaguchi (who worked at Sun at the time) to manage continuous integration of Java code.
Jenkins is as close to the original CI vision as you can get, binding together everything your CI tool needs to do to get the software compiled, tested, packaged and pushed.
Whether you’re a part of a small team or very big one, whether your pipeline is unique or commonplace, Jenkins has the answers for you. Jenkins is open-source, plugin-rich and cross platform. There is virtually nothing Jenkins won’t be able to handle with the use of the right plugin.
That said, it is not without its flaws. Some of them, such as lack of professional support services, are typical to FOSS products. Others are a more indirect result of the same issue – the lack of a corporate “back” to the development of the tool.
TeamCity is a proprietary CI solution by Jetbrains, the developer tool powerhouse behind Intellij IDEA solutions. TeamCity aims to streamline the process of setting up your CI Pipelines using state of the art UI and of course customer support.
The product tagline promises “Powerful Continuous Integration out of the box”. This speaks to what JetBrains aims to do – give you power over your pipeline without having to invest many hours learning how to do it.
TeamCity has the slick and modern UI Jetbrains are known for, and a workflow that will be easy for anyone to pick up. Being a paid service means you might be limited by your budget, but the value you get from your licenses is substantial.
Jenkins is made by developers for developers as is the nature of most open source code. Very few open source contributors are UI/UX experts. This leads to bulkier setup procedures and user flows. Jenkins requires extensive knowledge of the system in order to get the most out of it. Even simply knowing when to look for a plugin is something that might not be immediately obvious to someone without experience.
When using Jenkins, you are relying on team members that are proficient in using it in order to maintain it. That could potentially mean certain team members might be harder to replace.
TeamCity, in contrast, provides the clean and quick installation process you can expect from a proprietary software that aims to provide exactly that – ease of use. Whether you’re experienced with CI/CD or setting up your very first pipeline, TeamCity promises a pain free experience. You’re not likely to need to go to Googling to figure out the installation process.
Jetbrains’ robust support means that whenever there is an issue, there is someone who can help you fix it. The ease of use of the product remains an advantage not only through initial setup and learning process, but also after many cycles.
TeamCity is designed to meet your needs with as little fiddling as possible. In addition, security is the main department in which TeamCity has the clear out-of-the-box advantage. Technology Awareness is part of the product philosophy, with support of .NET, Python, Java, Ruby and XCode without any need for plugins.
Jenkins, on the other hand, aims to be as extensible as possible. This may result in you having to spend more time picking and choosing your feature-set through the use of plugins, but it will also likely fit better once you do.
Both TeamCity and Jenkins boast a verdant plugin ecosystem and both allow development of your own. So what makes them different from each other?
At the time of writing, TeamCity has 400 plugins, of which 340 were developed in-house. With this highly curated list of plugins, you can rest assured that the plugins themselves will be maintained to a high standard and kept functional with future TeamCity versions. Not only that, the support for the software extends to the plugins, as most are part of the proprietary software.
Jenkins has over 1500 plugins that do just about everything, but the quality of those plugins cannot be assured. While someone out there has likely developed the plugin that you need for a fringe case, there is no guarantee of the quality or the long term sustainability of the plugin. That said, being open source does allow you to take over the development and maintain it yourself.
TeamCity’s Restful API page itself claims that it is not a complete guide, and only offers the base knowledge. Aside from Jetbrains’ own guide, there aren’t a lot of resources out there on how to approach it. If you’re looking for a tutorial on a specific topic, you’re not likely to find one.
Jenkins API is better documented and with the increased popularity, it means many more resources on how to to get things done. There is no shortage of tutorials and articles written by avid users of the platform.
Jenkins, with its plethora of plugins, will allow integration with many third-party and cloud services. Whether it’s Amazon, Google, Microsoft or Atlassian – Jenkins has you covered.
TeamCity is no slouch in this department, and offers many of the exact same integrations. Figuring out if your needs are covered would be a simple matter of searching this list.
Jenkins being open source and community developed means that the UI isn’t as fluid and easy to use as that of the more modern TeamCity UI. That being said, Jenkins isn’t terribly difficult to set up and maintain as long as you spend a bit of time learning the ropes. A lot of work has been put into making Jenkins as user-friendly as it can be, but it is no match to what a dedicated UI/UX team can bring to the table.
Jetbrains pride themselves for having a robust UI/UX experience and ease of use is one of their selling points. You could do a lot in TeamCity without ever writing any scripts.
Jenkins has similar solutions, and one of the leading solutions is Blue Ocean for Jenkins, which makes many UI/UX improvements, and therefore makes it much easier to use. In fact, you’d do well to have a look at Blue Ocean for Jenkins right from the get go, if user-friendly and comfortable UI are a priority for you.
Both Jenkins and TeamCity offer On-Premise hosting. Jenkins has a long history of cloud based hosting and you can be confident that it does all it promises to do.
TeamCity on the other hand have only recently opened a beta version of their cloud hosting service – TeamCity Cloud. Being Proprietary, you can expect a robust feature-set from the upcoming TeamCity cloud service, and if you intend to pay for an enterprise version, JetBrains’ support is likely to be a boon if you run into any issues.
If you visit TeamCity’s community page, you will notice a lot of open questions without answers, so it seems like the community is a bit lacking. While Jetbrains offers technical support on all issues, sometimes it’s easier to ask a question on a public forum, if that question gets answered promptly enough. You’re still fairly likely to find an old answer to your question if it’s a common one, but when asking new ones, it can be a little hit or miss.
Jenkins, although it does not have a discussion forum mentioned on their community page, has a robust community with meetups and chats. This community is very important to the longevity of the product, as it is open source and relies on the developer community to grow. Jenkins has a huge following, and as such you will find many resources online on any subject.
The release cycle for TeamCity seems to follow roughly a once a month pattern, and you can view the entire changelog here. Many previous versions remain available for download, even as fast back as version 3.1 from 2008.
Jenkins likewise have frequent releases, but unlike TeamCity, follow the Long-term support cycle principle. This means your team can decide to remain on an older version for longer, forgoing the risk of upgrades while still getting critical fixes for the version you have installed.
Jenkins is open source and free to use under MIT license. As such, it always seems like a more appealing option when compared to paid alternatives. However, if budgeting is an issue but you still want to go with a JetBrains product, TeamCity offers a free professional version that allows up to 100 build configurations and up to 3 build agents. This may very well be all you need to run your CI/CD pipeline.
Consider the number of projects you’re going to be managing, and the number of people interacting with the setup. You may just come to the conclusion both options are essentially free.
If you do need more power, the enterprise version of TeamCity starts at $1999 and offers a substantial 50% off for startups. A single build agent license will cost $299. It is important to note that along with the unlimited build configurations, you’re also getting enterprise level customer service. That can save you many work hours and headaches.
When it comes to picking between Jenkins and Jetbrains’ TeamCity, the choice comes down to personal preference. If you’re a fan of open source solutions and prefer to home-brew your plugins and extensions, there is no doubt that Jenkins will be your best choice. However, if what you’re looking for is ease-of-use and a polished proprietary software experience, TeamCity is the right CI/CD tool for you.
As cyber threats become increasingly advanced and complex, organizations are forced to adopt a military attitude of ‘war footing’ to secure their systems and servers. Although
DevOps teams are one of the most essential links in the software development chain. It seems like they have a hand in everything that takes place
In 2022, the adoption of infrastructure as code (IaC) soared, with IaC domain specific languages like HCL, Shell and GoLang gaining popularity and momentum across the