November 1, 2011

Artifactory - Community Talks

We’d rather have our customers and users be the gauge of how well Artifactory met their Continuous Integration needs, rather than have you listen to our opinion.

These are busy days for the froggers getting ready to release 2.4.
The buzz is out there and proudly we can see more and more talks that cover Artifactory as part of their CI case-studies.

Following the DUKE CHOICE AWARDS in which Oracle honored us at JavaOne 2011 with the DUKE for "Innovative Tools for Developers", we would like to share with you these two great video presentations:

Building for the Cloud - Carl Quinn of Neflix talks at JavaZone and covers Netflix pipeline using Jenkins and Artifactory.


Building for the Cloud from JavaZone on Vimeo.

Agile Application Lifecycle Management - Author of Agile ALM, Michael Hüttermann, JavaOne talk. Michael describes how to execute an agile release management process using Jenkins, Artifactory and Maven.



Enjoy Artifactory!

October 17, 2011

The Frog Who Turned into a Prince

JFrog’s Artifactory Wins JavaOne 2011 Duke's Choice Award


3 years from the day it was founded, JFrog was recognized by Oracle and the Java community  for Innovation Java Tools for Developer with Duke’s Choice Award at JavaOne 2011.

This is not a marketing announcement nor a techie or an executive post, this blog is about how we felt the morning after we became Dukers’.

It’s been more than a year since I posted “That's what community for”, I was sure that I felt the power of the open source community, and than came DUKE...

It was Saturday around 2:00am, few weeks before JavaOne that I got the mail from Michelle Kovac of Oracle with the fantastic words “you're in the winners list right now for JFrog”. It took me 3 times to read the mail, and to actually hold the DUKE a few weeks later - to believe it!

On Sunday evening, Oct. 2nd, at the JavaOne Open House, Oracle welcomed and celebrated the 2011 Duke's Choice Award winners, JFrog Artifactory was one of them. Together with 9 other innovative Java projects, we "the froggers” stood there and felt like we got kissed and turned into a prince.



Now, you might say - OK this guy took it a bit too far...
So Imagine that you have been working like crazy for the last years (6 years since Yoav Landman, our CTO, first launched Artifactory and 3 years since we founded JFrog), your team beating any time-zone gap, and writing excellent code. You know that you are a game changer in the way people write code and you actually solve the developers pain, but still hear questions like: “So what is a Binary Repository Manager ?!” And “what do we need it for, if we use a version control ?!”


Imagine that during the last several years, you write open source based plug-ins to integrate with Artifactory’s ecosystem -  just to keep Artifactory “open” and to keep the freedom of choice in the developer’s hands, and you know that you are fighting giants with that approach.


Imagine that you have been travelling all over the world “preaching” how your Continuous Integration process should look like and how you should build, deploy and distribute your software, and little by little you see followers doing as you advised.


...and then, finally you got this huge hug from the community through Oracle.


I know its better to play the cool CEO, but JFrog is all about soul and I tell you it was (and still is) awesome!!!

Fred Simon our Chief Architect tried to expressed that in the live Java Spotlight podcast - in 2 minutes talk, but we know it took much longer to come up to this point of recognition.




A week after JavaOne, we are back to ground and working hard to release Artifactory 2.4 with lots of improvements and new cool features like P2 integration to proxy and host all your Eclipse plugins via Artifactory and YUM repository for distributing RPMs directly from your Artifactory server acting as a fully-featured YUM repository.

We got the DUKE CHOICE AWARD from Oracle and we are very honored and excited, but I keep remembering the words of one of the JUG’s leaders from the other night at the conference “you’ve got a great tool and a great team - you deserve it” - that’s more than a trophy, this is what we are here for, it’s our reward and we are grateful!

We are very pleased to receive this acknowledgement of our technological achievements by Oracle and the community. JFrog strives to provide our users and customers with advanced technology solutions that address their daily CI needs and driven by it.

I once wrote “community isn't a flock” now I know it for sure!

Thank you , Enjoy your build, Enjoy Artifactory.
See you at JavaOne 2012.

About JFrog:
JFrog is the home of Artifactory – world’s first Binaries Repository Management Solution. As the first company to provide the software market with a Repository Management Solution, JFrog has established itself as a technology leader in the industry and aspires to continue setting the standard moving forward.

About Artifactory:
With Artifactory, you can gain full control over all the build artifacts and third-party dependencies your organization uses and even share repositories throughout your interdepartmental and/or multi-team environment no matter where your team members may be located.
Built on top of the Java Content Repository (JCR), Artifactory supports extremely high concurrency and offers unmatched data integrity.
Artifactory is also tool that offers an open source, Pro and SaaS (cloud based) versions.

More about the DUKE adventure at:

http://blogs.oracle.com/java/entry/and_the_winners_are_the
http://www.youtube.com/watch?v=Lrq4UBGgQpg
http://java.about.com/b/2011/10/06/dukes-choice-award-winners-2011.htm


June 2, 2011

Jenkins New Maven and Gradle Release Management and Why You Should Look Into It?

Jenkins now offers a new robust solution for release staging and promotion in the form of the Jenkins Artifactory Plugin. This solution is fast, lightweight and works for for BOTH Maven and Gradle builds


The Need for a Better Release Alternative


If you are using Jenkins (or Hudson, before) then releasing and promoting build artifacts isn’t necessarily a flawless experience or may not be completely solved. To go over the main reasons of why this is so, I would like to look at Maven and Gradle builds separately.

Maven and the M2 Release Plugin
First, Maven. Jenkins already has a solution for releasing Maven artifacts in the form of the m2 release plugin. The plugin is essentially a wrapper on the client-side Maven release plugin. When it executes it runs an out-of-process Maven build with release tasks. This is natural for a plugin that was designed to run by a user on his machine, but running it server-side has a couple of serious issues:

  • The m2 release plugin invokes its own Maven instance that may be of a different version than the one defined for the job. Jenkins, not controlling this build, will not record any information about the release artifacts and will not archive them
  • The plugin also uses different SCM settings and credentials than the ones defined inside Jenkins. This double-configuration is error prone, and makes reproducibility difficult
  • Rollbacks are hard. With no built-in automatic rollback, when failure happens in the release flow, rollbacks become a manual task. Without a CLI, and given that the run is not interactive, this becomes even harder. Moreover, SCM tags are created with credentials that users may not have access to
  • It is unnecessarily SLOW. In fact, a release flow involves 3(!) full clean/compile/test cycles (you can read more about this in this blog post)

Gradle
If you are using Gradle, you are already driving your builds with elegant Groovy model+script. You may want to take advantage of that and enrich your builds with custom release logic via a Gradle plugin, which may be enough for your needs. However, there are some drawbacks to this approach:

  • You will need to duplicate the plugin configuration in each new project and introduce release configuration in your build logic. If you run the release from a developer machine, this is fine. However, for the most part this is not the case and releasing from the CI server with greater control and traceability calls for the configuration to be part of the job
  • With no strong concept of release “action” that Jenkins can understand, there can be no indicators in Jenkins or in the artifacts repository (Artifactory in this case), that a build was in fact released and that artifacts are part of a release
  • As with Maven, rollbacks may require manual intervention and running a release build on the server will not reuse Jenkins job’s setting like SCM details, resulting in dual configuration


Meet the Jenkins Artifactory Plugin

Given all that, we at JFrog, decided to pick up the glove and develop a new release and promotion alternative. The Jenkins Artifactory plugin provides a release management plugin that is:

  • Lightweight and fast - only 1 compile/test cycle is required 
  • Has close integration with your Jenkins exiting configuration, so it reuses the SCM and build settings. The plugin directly integrates with the execution of the Jenkins Maven plugin and the Jenkins Gradle plugin
  • Offers very robust and reliable rollback - the plugin is primarily focused on working correctly with GIT and Subversion, respecting the differences between the tools and how tagging and branching is handled in VCS compared to a DVCS, so we don’t have to compromise on a common denominator
  • Provides finer control over which properties (in Gradle) or POM versions (for Maven) should change upon release and which ones should also change for the next development cycle
  • All commit comments are adjustable and can use Jenkins parameters

When used in conjunction with Artifactory for managing your build artifacts the plugin also -

  • Offers advanced control over staging & promotion flow - build artifacts can be staged to a certain repository, and staged artifacts can be either released or rolled-back directly from Jenkins UI with changing of the release status in Artifactory without requiring a rebuild
  • Audits all release and promotion actions 
  • Makes release builds fully traceable by deploying a build-info json object along with the binary artifacts, with information about: environment vars; all artifacts produced; all effective dependencies used; and even all licenses used by those dependencies
  • Allows users to attach custom searchable properties to release artifacts upon deployment

Judging by user feedback, the Jenkins Artifactory Plugin really manages to make a difference by providing Maven users with a better alternative and Gradle users with an integrated Jenkins-side solution, for easy staging and promotion experience which is fast and reliable.
Give it a try now and see for yourself :)

The Jenkins Artifactory plugin can be found on the Jenkins Plugin Center, with the release management specific page here. All sources are on Github under the Apache 2 license.
Expect similar release management support from JFrog in the next versions of the TeamCity Artifactory plugin and the Bamboo Artifactory plugin

May 29, 2011

The Future of CI at JAX Conf

The Future of CI at JAX Conf - San Jose June, 2011
 by Fred Simon

These are exciting days for Continuous Integration users and for us - JFrog Artifactory team.

Following the successful CI Summit held in LinkedIn HQ last month, we are now heading to the San Jose JAX Conf!
This year, for the first time, the great European JAX conference is going to the Bay Area as JAXConf.
It will be an amazing gathering for our (JFrog) ecosystem.Many players that keep pushing the limit of Continuous Development, Build, Integration and Deployment, with their tools, knowledge and case study will be there:
The current growth of CI and DevOps is really impressive! The demand is so big that a full afternoon will be dedicated to CI, “The CI Circus” as a free community event.
And there Carl Quinn from Netflix, will present the amazing platform they setup “Netflix in the Cloud”, using Jenkins and Artifactory!

A lot of amazing talks about Continuous Integration, DevOps tools, and automated ALM will be presented:
And of course, I’m looking forward to present “You Killed My Build! Prepare To Die!”, were I will demo a state-of-the-art integration between Jenkins, Gradle and Artifactory. The setup support build isolation, release staging and promotion, and simplified developers on-boarding.

Hope to see you all there!

May 23, 2011

Thinking in Gradle!

Since my first encounter with Gradle and Hans Dockter (TSSJS 2009 in Las Vegas), I slowly (but surely) started to use this new build tool in many environment and projects.
Today, I’m hooked and I don’t think there is a better way to build!
But, the main issue I encountered is how to convince other that Gradle is the good way to go? It took me time to get the hang of it, it took even more time to understand what Hans meant when he says: “What’s important is the model!”.

Here is how I describe my “Thinking in Gradle!”

After many years of Ant, and Maven brain washing, the main paradigm shift that I needed to understand the power of Gradle is: Gradle let you write code that create a dynamic model of your build.
I needed to stop thinking in terms of declaring properties (Ant), or POM static model, but an aggregation of executable blocks (Groovy closures), that will create the exact model of what are my projects, task, dependencies and products.
I don’t need to “extends”, I don’t need to “exclude”, I don’t need to “override”.
When playing with static declaration of your build model, the way to avoid repeating yourself is by declaring what’s good for 80% of your modules in a super POM, and then adding skip or repeating detailed plugin configuration for the other 20%.
In any case, you are repeating yourself a lot, and you always try to change your code or module layout to fit the less resistance of your build tool.

Your “static” build model is freezing your ability to re-organize your modules as they should be.

With Gradle, the build model is created from executable Groovy code. So, nothing, I really mean nothing is static.
It’s extremely disturbing for newcomers. I want my properties, my XML, my declarations :)
No! It’s only code, dynamic Groovy code!
The model will emerge from Groovy collection closures (apply this to any model element that matches), some “if”s when needed, and a lot of beautiful GStrings for expressing dynamic values. You cannot keep your thinking of static XML, when you write your Gradle build!

OK, you may think that the dynamic part is just your mental representation of a POM hierarchy and dependencies.
Well, in Gradle the execution task graph (every little plugin execution of your Maven lifecycle, which is extremely static and a nightmare to modify) is also dynamic.
It means that the way you chain the tasks that will be executed are also defined in code, not in XML :)

And of course, the part that everyone expects: The execution block of a task is also in Groovy (or Java) code.

Conclusion
Until I let go of my old concepts of static task dependencies (Ant), and static project model (Maven), I missed most of the beauty and power of Gradle!
Hope this will help others.

April 20, 2011

The First Continuous Integration Summit - Video Available!


On April 7th, we held the First Continuous Integration Summit at LinkedIn HQ in the Silicon Valley.

We were overbooked a week from opening the event registration page! This enthusiastic response, in addition to the feedback we received (and still getting) from the community, illustrates the great appetite for gaining and learning more about CI technologies and methodologies.

Together with our partners from Gradleware and CloudBees, we have managed to stir up and arrange this event for all of you who use and explore Continuous Integration tools and technologies.

We couldn’t be more excited to be part of the very first Continuous Integration Summit, an opportunity made possible largely thanks to LinkedIn, who hosted the event and now provides us with this video recording of the sessions:

  •  LinkedIn Case Study – present and future of LinkedIn's codebase build
  • "Who Moved My Module?!" – Yoav Landman, JFrog CTO and Artifactory Creator
  • "Enter the Gradle" – Hans Dockter, Gradleware CEO and founder
  • "Status of the Jenkins Project" – Kohsuke Kawaguchi, CloudBees architect and Jenkins Project lead


We already started planning the next CI Summit – stay tuned ….

Enjoy ;)
JFrog Team 

February 24, 2011

Artifactory Vs. Nexus The Integration Matrix


Are you stuck with your vendor stack ?!

The evolution of Continuous Integration, build tools and build servers in the past years has been very impressive. The amount of projects (open source, or not) and tools that were launched and
later adopted by the community (Maven, Gradle, Jenkins/Hudson, TeamCity, Bamboo, and more...) shows that this is the future of software development and this is how people will build and package their applications.

One of the greatest advantages, especially in the Java world, is that development teams have the freedom to choose and build modular environments by integrating the tools that they like, need and that were adopted by their organization.

This is why our users build their projects using Maven, TeamCity, Ivy, Hudson, Gradle, Bamboo and recently Jenkins ;). Bottom line is, you should not be concerned about the ability of the tools  to integrate while designing your CI stack!

BUT, things are changing. Now even more with the fork of Hudson CI (currently owned by Oracle), Artifactory has come to be the only Binary Repository Manager that gives you the real freedom to choose!

We are not presenting ourselves as a community “rescuer” under the open source hood, or try to take ownership over successful projects that were developed by the community (such as Maven or Hudson); we are developing Artifactory in a way that gives our users the ability to work with their tools and technologies of choice within the build ecosystem.

During the past year, JFrog’s team has been developing for the Artifactory users a number of open source plug-ins that are tightly integrated with the worlds leading tools and vendors.

The following comparison tables are more than just a list of features - it is what we envision when we think about the software development tooling, and how we ensure that our users keep their freedom of choice:

Build tools integration

Build servers integration
Some features are part of the pro versions of Artifactory and Nexus.

Now, it’s easy to say “We will provide you with one full stack”, but isn’t that like saying “We know better what’s good for you”? Is it preferable over giving you the freedom to choose?!