Continuous Integration tools - continuous-integration

Im doing research regarding continuous integration tools and there benefits. For my research im looking at the following tools:
GitLab CI
Jenkins
Bamboo
GoCD
TeamCity
Now I wont bother you with all the requirements and benefits. But so far im not finding so many differences between the tools except for these:
Fan-in fan-out support GoCD
Community size, Jenkins and GitLab seem to have most contributors
Costs
Open source or not
Amount of plugins available
I was wondering if some people who have had to choose a continuous integration tool aswell could share there experience and why they chose that tool and if there are certain differences that are worth thinking about before choosing which I didn't cover.
Now im leaning towards GoCD because of fan-in fan-out support and the visualisation of the continuous delivery pipeline does anybody have experience with the support on issues for this tool?
Thanks in regard,

Disclaimer: I was an active contributor to GoCD before previous Fall.
I haven't used GitLab CI so won't talk about that :) Also, I haven't used any of these tools in the past one year.
I think TeamCity is a good CI tool. It integrates very well with IDE if you want to debug some failures. The test reports are brilliant. But I don't think they are that advanced in CD space and in my opinion you need both. But if you are interested only in CI, you might want to give it a look. However, you will miss on some of the good features of GoCD I've mentioned below.
Jenkins has a huge community but Jenkins has its own disadvantages. Many a times one plugin doesn't work due to another plugin for some compatibility issues for instance.
GoCD has Fan-in/Fan-out support which avoids many unnecessary builds saving a lot of build time and resources. The value stream map is intuitive and helps to get a better picture of the build stage from a developer's, QA's or even Deliver Manager's point of view. The pipeline modeling in GoCD is also very good. If you read Jez Humble and David Farley's book on Continuous Delivery, you will see the power behind such a build design.
Now, to your second question:
Now im leaning towards GoCD because of fan-in fan-out support and the
visualisation of the continuous delivery pipeline does anybody have
experience with the support on issues for this tool?
Good to hear that :P I love GoCD. The support is good. If you choose to go the Open Source way, the mailing list is pretty active. You can expect a reply from the GoCD team within a day or two. Of course, your questions have to be genuine and specific. Looking through the forums before posting a question helps :)
You can also choose to buy support for GoCD from ThoughtWorks. They used to offer multiple support tiers, not sure of the current support model. You might face issues only when your DB grows too huge (~5-7 GB) when you might want to go for the proprietary Postgres DB support from ThoughtWorks. I've seen very few users of GoCD with that DB size.

I have a lot of experience with Teamcity and some with Gocd. If you are interested in fan-in/fan-out it's also possible to do the same in Teamcity -- it's called Build Chains.
Also there is a good post about this topic on official blog.
If I could choose I would prefer Teamcity. It's more mature and more feature rich product suitable for use in corporate environment.

Related

Agile requirement fo continuous integration?

Taking a indepth look at CI and a question rose up. Is a agile development process a pre-requisite to be able to work with Continuous Integration?
Would it be possible to implement a CI process in a traditional, team based
development process?
Gut feeling says me that agility is more or less a pre-requisite, but "gut feeling" is not an argument when talking to management... :-)
And is there any documentation out there about this? All I found take it for granted
that you already work agile.
I would argue that continuous integration is good practice in almost all development teams, whether you are following an agile process or not (along with source control and free coffee). I've used it in agile teams, traditional teams and when I am coding alone - it has always added value.
For any development process, CI gives you:
Immediate feedback on any build errors (e.g. when a developer has forgotten to add or check in a file)
Immediate feedback on unit test failures (if you have written unit tests, which again are a good idea whether you are following an agile process or not)
Your QA team having up to date binaries to test with
Automating the build process (which greatly reduces the chances of error when you release your software)
Have a look at Jenkins - it's free and pretty easy to set up.
CI is not really related to agile or not-agile methodology (although some state to require it, while others just indirectly imply it or not mention at all)
CI is the only tool (yeah suppose it like a keyboard) which helps you during development to eliminate some bugs ASAP
actually the only thing you need to do CI is configure version control system with some build tool (like post-commit hook), and ask all developers to commit/fetch code as soon they pretty sure that it will compile - this will be enough to start continuous integration, then of course you can add unit test etc
so, the answer - agile is not requirement and you can implement CI in any process, without implementing XP, Scrum, Whatever methodology

CI: Automated Build Studio vs. Hudson vs. Atlassian Bamboo

What would be the best tool to use that can support cross platforms, remote builds and deployment for windows, linux and macosx and cost effective?
Right now were using Groovy(grails), Java, and .NET
Thanks
Your requirements are pretty vague, so expect vague answers. Hudson sounds like it would be a reasonable fit (cross platform, remote builds, etc), but your best bet is to actually try it! Hudson has a good community and plenty of activity. Read the wiki, search the mailing lists and ask questions when you get stuck.
The "cost effective" requirement is nearly impossible for an outsider to measure because we have no idea what tradeoffs you're willing to make with build vs buy, nor do we know how valuable your time is compared to your money.
Wikipedia's Comparison of Continuous Integration software may be helpful if you want an overview of what else is out there.
My company uses Bamboo. I can recommend it as a decent product. I have not used Hudson extensively enough to say that it's better, although my limited experience with it says that it is at least as good.
The fact Hudson is free has to be one plus for it.
Try them both out, and see which you like better. Bamboo has a 30 day free trial. link
One thing about Bamboo that has been a negative is that we have a huge number of plans, and plan maintenance and creation is all Web GUI driven. There is very little room to automate plan creation, from my experience. I believe Hudson "plans" can be created almost on the fly via command line arguments.

Why should my development team have a build server?

We know this is good to have, but I find myself justifying it to my employer. Please pitch in on why a development team needs a build server.
There are multiple reasons to use build servers. In no particular order and off the top of my head:
You simplify the developers' workflow and reduce the chance of mistakes. Your build server can take care of multiple steps such as checking out latest code, having required software installed, etc. There's no chance of a developer having some stray DLLs on their machine that can cause the build to pass or fail seemingly at random.
Your build server can replicate your target environment (operating system, etc.) and there's less of a chance of something working on developers' desktops and breaking in production.
While it's a good practice for developers to test everything they check in, sometimes they just don't. Then it's good to have the build server there to catch test errors and let the team know the product is broken.
Centralized builds provide easy access to code metrics -- which tests passed, which failed, how often, how well is your code covered by your tests, etc. Having a solid understanding of the quality state of the codebase reduces maintenance and testing costs by providing timely feedback that allows errors to be fixed quickly and easily.
Product deployment is simplified -- the developer or QA doesn't have to remember multiple manual steps. It can be easily automated.
The link between developers and QA is simplified. QA personnel can go to a known location to grab latest, propertly versioned builds.
It's easy to set up builds for release branches, providing an extra safety net for products in their release stage, when making code changes must be done with extra care.
To avoid the "but it works on my box" issue.
Have a consistent, known environment where the software is built to avoid dependencies on local dev boxes.
You can use a virtual server to avoid (much) extra cost if you need to.
ASAP knowledge on what unit tests are currently working and which do not; furthermore, you'll also know if a once passing unit tests starts to fail.
This should sum up why it is critical to have a build server:
http://www.codinghorror.com/blog/2006/10/the-build-server-your-projects-heart-monitor.html
It's a continuous quality test dashboard; it shows you statistics about how the quality of your software is doing, and it shows them to you now. (JUnit, Cobertura)
It makes sure developers aren't hamstrung by other developers breaking the build, and encourages developers to write better code. (FindBugs, PMD)
It saves you time and money throughout the year by getting better code from developers the first time - less money on testing and retesting - and by getting more code from the same developers, because they're less likely to trip each other up.
Two main reasons that non technical people can relate to:
It improves the productivity of the dev team because problems are identified earlier.
It makes the state of the project very obvious. I've shown my management the build status dashboard an now they look at it all the time.
One more thing. Something like Hudson is very simple to set up - you might want to simply run it somewhere in a corner for a while and then show it later.
This is my principal argument:
all official releases must be build in a controlled environment. No exception.
simply because you never know how the developers create their personal releases.
You also don't need to talk about build server as in "blade that costs an arm a a leg". The first build server I set up was a desktop machine that sat unplugged in a corner. It served us very well for more than 3 years.
One you have your build machine, you can start adding some features (Hudson is great) and implement everything that the other posters mentioned.
Once your build machine becomes indispensable to your organization (and everyone sees its benefits), you will be able to ask for a shiny new blade if you wish :-)
The simplest thing you can do to convince your your employer to have a build server is to tell them that they will be able to release faster and with better quality.
Faster releases come from the immediate feedback about quality of the build. If someone breaks the build, he or she can fix the broken build immediately thus avoiding a delay in the build and release schedule. Without a build server the team will have to spend time trying to find what and when happened and how to fix it.
Better quality is achieved by the build server running bug detection tools automatically every time someone check is changes into a version control system. You don't mention what is the main development language in your organization, but such tools, advanced but commercial and simple but free, exist practically for all languages. Lint, FxCop, FindBugs and PMD come to mind.
You may also check this presentation on benefits of continuous integration for a more extensive discussion.

Use bug tracker to get things done and manage personal tasks? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 9 years ago.
Improve this question
This is slightly off-topic, but can only be answered by programmers and is useful to many programmers:
Do you think it is useful to use a bug tracking system to keep track of personal todo items and to Get Things Done? I have not tried that; in fact, I don't have much experience with bug tracking systems. For my todo lists, I have played around with Google Tasks and Remember The Milk, but both of them have shortcomings:
Google Tasks: I like that you can create todo lists easily, can reorder items in the list and easily create hierarchies. But it is way too simplistic and does not allow to tag tasks or move tasks from one list to another.
Remember The Milk: It is nice and sleek, but you cannot create hierarchies of tasks, cannot arbitrarily reorder tasks and cannot set dependencies of tasks.
That's where a bug tracking system should come in:
Since I think (maybe too much?) like a programmer, my tasks have a natural hierarchy and a tree of dependencies, like in a Makefile. Here are two examples:
The task of writing my thesis is done when several milestones are done. Some of these milestones can run in parallel (writing background chapter, running experiments A, running experiments B), others depend on each other (writing main chapter depends on first getting results from experiments A).
The same is true for more personal goals: I want to host a dinner party, which requires finding a good date, finishing the guest list, making invitations, finding nice recipes, cooking, ...
For me, all these tasks involve hierarchical dependencies and milestones that bug tracking systems should be able to handle?
Here is an article that explains how to do advanced GTD with Remember The Milk, but he has to use several workarounds: (1) add a general tag 'wait' to tasks that are waiting for others to be completed but you cannot enter the IDs of the tasks that they are waiting for, (2) starting some special tasks with "." so that they are at the top of the alphabetically sorted list and signal that others are 'below' it as subgoals. Bug tracking systems should be able to handle these things much more naturally?
Does anyone have experience and can recommend a lightweight bug tracking system that might be good for this? Other requirements: Should run as web app, should allow me to tag a task with several tags (like 'work', 'fun', 'short-task', 'errands', ...).
I have used quite a few bug/issue tracking systems and also task management and project management systems so far for professional purposes. Personally I am big fan of Getting Things Done, time and task management. For Getting Things Done, I also had my time with Google Tasks and Remember The Milk. Although they simply do the work, they have several shortcomings, as you mentioned before.
I have tried several things and within the scope of this question I will try to breakdown my experience with this tools based on your requirement.
Bugzilla
Bugzilla is a mature product which has several features, it is a great bug tracking software. You can easily create a demo instance if you want to give it a try. But based on your requirements, I don't think it is the best fit.
Redmine
I have played with Redmine, it is OK as an issue tracking system but I was not very satisfied with its usage. You can have a look at the demo page.
MantisBT
I also happen to play with MantisBT and in my opinion MantisBT is a barely OK bug tracking system and I don't think it will be the best fit.
Team Foundation Server
I use TFS on a daily basis, but mostly for version control and it is many things besides version control. Work items can be used as bug tracking and it a great tool for team management but it is not lightweight and I also don't think it is the best fit.
Wunderlist
Wunderlist is a great tool for GTD. It is very simple and list based. You can create several lists, you can create reminders etc. For personal use, this is my favorite choice for GTD, up to now. Although pro version has a few more features, it won't solve your problems based on your requirements.
Basecamp
I have used Basecamp, mainly for project management, task and issue management. You can create projects, and create tasks for each project. It is very easy to use and if you want to collaborate it is very easy. But it has its shortcomings.
In my humble opinion conventional issue tracking systems are no good for Getting Things Done. From what I understand, you need a simple yet powerful project management tool. Which brings us to our winner.
Trello
Trello is a web-based project management application developed by Fog Creek Software
Some of the features are:
You can create projects. Projects are shown as lists.
Create tasks. Tasks are shown as cards. You can also assign tasks to
other individuals.
You can move cards easily from one project to another, i.e. from
Doing to Done.
You can use tags, attach files and create checklists and etc.
It is very well explained in this short video : http://www.youtube.com/watch?v=xWiunIolf4s
Also #JoelSpolsky explains it in detail here : http://www.youtube.com/watch?v=aaDf1RqeLfo
In my opinion Trello would cover exactly what you need, most probably even more.
FogBugz is a nice for GTD
I keep my (mostly work-related) GTD tasks in my FogBugz database and am quite happy with it. You can try the hosted version for free:
http://www.fogcreek.com/FogBUGZ/IntrotoOnDemand.html
I'm very happy using https://www.pivotaltracker.com for this purpose. Pivotal tracker is an agile project management tool. It lets you estimate and track the effort (on a scale of 1-5, not real time estimates.) It then lets you track your velocity on each specific project.
Within a project stories can be in different panes such as 'active', 'backlog', 'icebox', etc. It's easy to see at a glance what is in progress and what is coming up. Simply drag and drop to rearrange your queue of stories.
I have a number of projects such as my boat, homestead, etc. Stories can have tags and also subitems.
Pivotal Tracker doesn't have any scheduling or reminders. The idea is that you'll be looking at it daily and reorganizing stories as you go.
It also has an open API and quite a few supporting apps have been built for it. I personally use PivotalBooster on my mac, especially during my internet blackout from 7-9PM daily.
One thing I wish I could do easily is print out the stories for a project. It shouldn't be hard to do with their API, I just haven't taken the initiative.
Before this I tried Trello and found it to be bit more work than Pivotal Tracker. I also spent a fair amount of time with org-mode in emacs, and while it is pretty amazing I found it cumbersome.
I've had alot of success using the Agile Software Project Management Software JIRA. It has user stories, estimation, customizable formats, export to excel, and many other great features. There is a free version, and the commercial version for up to 10 developers is $10 a month. It has many plug ins available including ones that connect to github and svn repositories. You can easily attach images and files to each issue/bug. You can easily use it for new projects as well as bug tracking.
Redmine, pretty awesome, free, opensauce etc.
http://www.redmine.org/
Edit:
There is a fork of Redmine that looks promising, ChiliProject, https://www.chiliproject.org/
Demo is here.
Not sure why they forked Redmine, but i believe they wanted faster release cycles and more open to community changes.
I suggest http://www.abstractspoon.com/tdl_resources.html I have used it for many years and find it quite sufficient for my needs. I believe it also fits what you are looking for.
Look at the comparison of existing issue trackers.
http://en.wikipedia.org/wiki/Comparison_of_issue-tracking_systems
I think you can easy make your choice.
Regards.
I've used dozens of application lifecycle management tools, from basecamp to jira to wunderlist, assemblr and many more, but the one I keep coming back to is the simple issue / milestone managment tool set built into github.
I like github mostly because it's got all the source code version control stuff a project needs, (Git is really nice to use) plus zillions of hooks for notifying other systems upon commits. It's got simple collaboration setup and management, allows you to publish pages to promote and describe your project, allows multiple projects, accounts range from free to cheap to corporate depending on your needs (I've found the cheap option works very well for me as a freelance developer), and the task / issue / milestone management system is simple but excellent. It also throws in a very good wiki system for collaborative documentation, and allows hooks for a range of continuous integration / build and test on commit tools, meaning you can control all aspects of a project lifecycle easily from one dashboard. It's also much more lightweight than many others such as trello which rely on a lot of client-side fancy stuff and often feel sluggish when all you want to do is quickly pop in and tick off a task. There are also good apps for iPhone and Android that interface well with GitHub, meaning you can use it as a mobile task manager with ease.
So, based on the requirements you specified in your question I'd suggest GitHub would satisfy you completely.
Note I am not affiliated with GitHub in any way, this is a recommendation based on my years of actual experience with many such systems.

Microsoft Project [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 11 years ago.
Improve this question
Is Microsoft Project the best tool for managing software development or IT projects or is there an alternative that is better?
Project is not good for managing development at all. I find it marginally useful for scheduling / work breakdown.
If you're on a Microsoft stack, Team Foundation Server is a good project management solution. It integrates with Project for scheduling and also provides the essentials of source control, work item (task / defect) tracking, and document management (via sharepoint.) The 2008 version has matured nicely, and the 2010 version looks very promising, especially in the area of requirements specification and traceability.
You can replicate the TFS features with a stack of open source and/or less expensive off-the-shelf software, but it is more work to integrate. It's debatable which is more flexible and easier to maintain once set up.
The following are required, regardless of platform:
Bug tracking
Work item / story / progress tracking of some kind (may be managed by above)
Collective team discussion (may be managed by above - discussion on work items, like FogBugz for example)
Source control (anything but SourceSafe)
Continuous build integration that runs unit tests
Instant messaging (OpenFire works great if your network blocks external services)
Document library
Farm of virtualized test machines (especially useful for install/upgrade testing)
I tend to use MSProject for capacity planning - a nice big broad brush of who could do what over a period, at a level of abstraction that makes it easy to rejig plans. For day to day tracking of the real work, I use Fogbugz. I think of it as MSProject/Gantty stuff for the strategic planning, and Fogbugz for the tactical management and planning.
Depends on the process you're using - if it's a waterfall like process, or there's a lot of non-software parts of the project (infrasstructure, manufacturing, marketing etc) then Project's OK for the overall task management - it's certainly competitive with other similar tools.
I don't think any of the "project management" tools (tasks, WBS, gannt charts etc) are much good at the management of the detailed tasks that happen when you're into the main software development phase - I usually end up in Excel for the projects I'm involved in.
And of course, there is much more to the successful management of a non-trivial software project than the bit that can be managed with a tool like Project. It doesn't help much with managing the requirements, issues, defects, meetings, test development etc - but then it's not supposed to.
Because of these limitations, I find I usually get most value out of Project in the planning phase - working out the task breakdown, what needs to be done, and roughly what needs to happen in what order.
As Eisenhower put it: "In preparing for battle I have always found that plans are useless, but planning is indispensable." MS Project is a useful tool for planning.
If also need a free and open alternative to Project, you have OpenProj: http://openproj.org/openproj
We use Target Process here. It has a few "-isms", but overall is a good agile project management tool
We've been successfully using MS Project for planning but were missing the ability to share MS Project plans with customers and colleagues who don't have it installed. This led us to the idea of online Microsoft Project viewer - a service that would allow to view and share MS Project files (.mpp) online, apart from MS Project:
Hope this helps.
We use Acunote at my work place, but we follow a Agile/Scrum methodology.
What constitutes the "best tool" depends on many things. How you run your projects, who will be using them, etc.
There are many better alternatives, at least for software development. One such is embedded in Microsoft Visual Studio Team System. You may also want to check out tools from Rally Software and Version One. The latter are well suited to agile methods, while the former supports both agile and traditional CMM methods.
Well, given the fact that not even the Project team uses Project for Project (Source: Joel Spolsky), I would not want to use it for development.
I track my development tasks in our Bug Tracker, and the Project File just has something like "Planning 1 Week, Development 5 Weeks, QA 3 Weeks, Deployment 1 Week", aka. a VERY broad overview.
As for the BugTracker, FogBugz has this nice Estimate-Tracking that I find quite useful for making schedules, which is for me just another reason to not use Project.
But then again, I am not a Project Manager, so to me, Project is just an unnecessary complex, not really multi-user friendly and somewhat dated-feeling Tool to be used when building Houses, Highways or Space Stations, but not for Software.
We use Primavera on my project. Its supposed to be great although its the only tool I haven't really used for project management so far so I can't really compare it to anything else. Its not that easy to pick up but it can do everything I need (and apparently much more).
My favourite feature is the built in timesheets functionality which means my developers can book their hours to their tasks at the end of the week meaning that I don't need to constantly bug them about how they are progressing against their plans.
personally i dont believe ms project is good for software dev (i have used it, im not bashing it to be a purist)
its great if you are building a house or something which doesnt have such uncontrollable variables (e.g. how many bugs will you have? how long will bugs take to fix? how much feature-creep will there be?)
i like to keep my schedules very simple so more people can understand them, hence why i just use a google spreadsheet
the structure i use is described further here: Project Schedules with Google Spreadsheets
hope this helps
--LM

Resources