This document summarizes the PVS-Studio development team's experience moving from CruiseControl.NET (CCNet) to Jenkins as their continuous integration server. Some key issues with CCNet included that it was no longer being developed and had unstable source code management. Jenkins provided more flexibility through plugins and allowed separating build steps and logs through the Multijob plugin. This helped replicate CCNet's task visualization. Overall, Jenkins met their needs and provided ongoing support through active development.
BP204 It's Not Infernal: Dante's Nine Circles of XPages HeavenMichael McGarel
Do not abandon all hope, ye who enter here! Your very own Dante and Virgil will take you through a divine comedy of nine circles that show that XPages is more paradise than perdition. We'll show how XPages and related concepts like OSGi plugins make XPages a modern and vibrant development technology for web, mobile and rich client. On the way we'll guide you past some pitfalls to avoid becoming one of the lost souls. When we re-emerge, you'll see the sky's the limit with star-studded opportunities. (Presented at IBM Connect 2014)
BP204 It's Not Infernal: Dante's Nine Circles of XPages HeavenMichael McGarel
Do not abandon all hope, ye who enter here! Your very own Dante and Virgil will take you through a divine comedy of nine circles that show that XPages is more paradise than perdition. We'll show how XPages and related concepts like OSGi plugins make XPages a modern and vibrant development technology for web, mobile and rich client. On the way we'll guide you past some pitfalls to avoid becoming one of the lost souls. When we re-emerge, you'll see the sky's the limit with star-studded opportunities. (Presented at IBM Connect 2014)
"DevOps" denotes a close collaboration and cross-pollination between previous cases i.e, purely the development roles, operations roles and QA roles. As it is necessary for the software to release at an ever-increasing rate, we can see that the old "waterfall" develop-test-release cycle is broken. Devops provides us with consistent software delivery, Faster resolution of complex problems and neatier and crisp feature delivery.
Pipeline as code - new feature in Jenkins 2Michal Ziarnik
What is pipeline as code in continuous delivery/continuous deployment environment.
How to set up Multibranch pipeline to fully benefit from pipeline features.
Jenkins master-node concept in Kubernetes cluster.
Jenkins is a Continuous Integration (CI) server or tool which is written in Java. It provides Continuous Integration services for software development, which can be started via command line or web application server. Jenkins Pipeline is a suite of plugins which supports implementing and integrating continuous delivery pipelines into Jenkins.
Implementing CI CD UiPath Using Jenkins PluginSatish Prasad
Implementing CI-CD UiPath Using Jenkins Plugin.
Whats is Covered
Basic of Jenkins to get started
2. Key Jenkins concepts to remember
3. Install and configure UiPath Jenkins Plugin
4. Building pipeline using Jenkins for Build, Test and Deploy
5. Working example (Jenkins files)
I made a simple SVN (Subversion) tutorial for my co-workers and just wanted to share it with you. It is based on other lectures and practical experience I had in the past.
Some ideas also come from the GIT world, which is still too far and new for everyone, but which I already love and embrace fully :)
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...Paul Withers
BP106 From XPages Hero To OSGi Guru: Taking The Scary Out Of Building Extension Libraries. From IBM ConnectED 2015, delivered jointly with Christian Guedemann
>>Automation of build and release
>>Continuous Integration using ANT and Cruise Control
>>Features of Cruise Control
Using Cruise Control to achieve automation of build and release
>>Metrics, reports and data analysis using Cruise Control
Automated test case execution using EMMA
>>Automated code reviews using PMD
File Can be downloaded from:
http://community.scmgalaxy.com/
Maven is the most popular Java Dependency Management Tool.
In this hands-on course, you will understand how Maven makes the life of a Java developer easy. We will use a step by step approach with 20 steps.
During the course, you will automate these using Maven.
Compiling Java Code
Running Unit Tests
Building Jar's and Wars
Running web applications in Tomcat
Setting up new projects
You will learn following features of Maven with 5 Example Projects on Github.
Dependency Management - including Transitive Dependencies
Maven Project Object Model
Maven Build Life Cycle
Maven Plugins
Maven Archetypes - Generate Projects
Maven Best Practices
Multi Module Maven Projects
I don't like it when people use artificial code examples to evaluate the diagnostic capabilities of static code analyzers. There is one particular example I'm going to discuss to explain my negative attitude to synthetic tests.
"DevOps" denotes a close collaboration and cross-pollination between previous cases i.e, purely the development roles, operations roles and QA roles. As it is necessary for the software to release at an ever-increasing rate, we can see that the old "waterfall" develop-test-release cycle is broken. Devops provides us with consistent software delivery, Faster resolution of complex problems and neatier and crisp feature delivery.
Pipeline as code - new feature in Jenkins 2Michal Ziarnik
What is pipeline as code in continuous delivery/continuous deployment environment.
How to set up Multibranch pipeline to fully benefit from pipeline features.
Jenkins master-node concept in Kubernetes cluster.
Jenkins is a Continuous Integration (CI) server or tool which is written in Java. It provides Continuous Integration services for software development, which can be started via command line or web application server. Jenkins Pipeline is a suite of plugins which supports implementing and integrating continuous delivery pipelines into Jenkins.
Implementing CI CD UiPath Using Jenkins PluginSatish Prasad
Implementing CI-CD UiPath Using Jenkins Plugin.
Whats is Covered
Basic of Jenkins to get started
2. Key Jenkins concepts to remember
3. Install and configure UiPath Jenkins Plugin
4. Building pipeline using Jenkins for Build, Test and Deploy
5. Working example (Jenkins files)
I made a simple SVN (Subversion) tutorial for my co-workers and just wanted to share it with you. It is based on other lectures and practical experience I had in the past.
Some ideas also come from the GIT world, which is still too far and new for everyone, but which I already love and embrace fully :)
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...Paul Withers
BP106 From XPages Hero To OSGi Guru: Taking The Scary Out Of Building Extension Libraries. From IBM ConnectED 2015, delivered jointly with Christian Guedemann
>>Automation of build and release
>>Continuous Integration using ANT and Cruise Control
>>Features of Cruise Control
Using Cruise Control to achieve automation of build and release
>>Metrics, reports and data analysis using Cruise Control
Automated test case execution using EMMA
>>Automated code reviews using PMD
File Can be downloaded from:
http://community.scmgalaxy.com/
Maven is the most popular Java Dependency Management Tool.
In this hands-on course, you will understand how Maven makes the life of a Java developer easy. We will use a step by step approach with 20 steps.
During the course, you will automate these using Maven.
Compiling Java Code
Running Unit Tests
Building Jar's and Wars
Running web applications in Tomcat
Setting up new projects
You will learn following features of Maven with 5 Example Projects on Github.
Dependency Management - including Transitive Dependencies
Maven Project Object Model
Maven Build Life Cycle
Maven Plugins
Maven Archetypes - Generate Projects
Maven Best Practices
Multi Module Maven Projects
I don't like it when people use artificial code examples to evaluate the diagnostic capabilities of static code analyzers. There is one particular example I'm going to discuss to explain my negative attitude to synthetic tests.
We are an #Influencer Marketing & #Event Consultancy firm. We conduct offline activities such as #ThinkTanks Workshops & Meet-ups with curated influencer clusters for our clients.
www.hopkins.co.in
instagram.com/hopkins_coin
twitter.com/hopkins_coin
This is a presentation outlining the marketing plan for an android app. In this, I propose a new business model to help farmers get out of their crisis. Also provide a game for young adults. This could drastically change the way people conduct business.
Introduction To Jenkins - SpringPeopleSpringPeople
Jenkins CI is the leading open-source continuous integration server. Built with Java, it provides 1057 plugins to support building and testing virtually any project.
Nos dias de hoje, onde trabalhamos em "internet time", com o paragdima da cloud e onde a economia nos obriga a fazer mais com menos, o "Time to Market" torna-se um fator diferenciador entre o sucesso e o falhanço de um projeto de software.
Esta sessão aborda alguns métodos e ferramentas que nos ajudam a automatizar processos de build e deployment, que podem tornar-se dolorosos e até impeditivos no avanço para a meta final de um projeto de software, de modo a que nos possamos focar nas atividades que acrescem valor ao nosso produto.
Nomeadamente, serão apresentados exemplos práticos da aplicação das tecnologias Microsoft como o MSBuild, Web Deploy, web.config transformations, web.config parametrizations e ainda, a utilização do servidor de builds Jenkins para implementar a automação de builds e deployments.
Comunidade NetPonto, a comunidade .NET em Portugal!
http://netponto.org
Exploring the Exciting Features of Spring Boot 3.1.pdfInexture Solutions
Spring Boot 3.1 is taking the software world by storm with new features that promise to revolutionize your coding experience. From simpler APIs to better security measures, you won't want to miss out on this release.
Tom Leach and Travis Thieman of GameChanger talk about their experiences migrating their build and deploy pipeline from being heavily based on Chef to one based around Docker.
This presentation is split in to two main sections. The first section covers the motivations for why GameChanger, as a fast-growing startup, identified a need to replace it's existing Chef-based deploy model with a model which reduces deploy-time risk and allows its engineering team to scale.
The second section is a high-level walkthrough of the new GameChanger deploy pipeline based around Docker.
Polyline download and visualization over terrain modelsgraphitech
The project implements a number of optimizations to allow
better performance in the visualization of the height model. A client-server architecture allows different themes to be stored within a server, and downloaded using the terrain viewer. Realized using JOGL library.
Angular 1.x reloaded: improve your app now! and get ready for 2.0Carlo Bonamico
The buzz about the upcoming major reincarnation of AngularJS, with its hot mix of excitement and critics, has somehow shadowed the immediate gains enabled by the recent 1.3 and 1.4 releases.
This code-based talk will introduce concepts such as the "Controller As" syntax, component-based directives, the new router and bind once, to demonstrate how mixing these currently available Angular features with good design patterns (and a bit of ES6) provides concrete improvements in performance, modularity, testability and developer productivity to our apps now.
Furthermore, it will show how the main ideas at the basis of Angular 2.0 (API simplification, consistency, even more componentization and interoperability with ES6 and Web Components) can be applied to the design and implementation of 1.x applications, helping us both being more productive now & simplifying the upgrade to the "new" Angular.
We continue checking Microsoft projects: analysis of PowerShellPVS-Studio
It has become a "good tradition" for Microsoft to make their products open-source: CoreFX, .Net Compiler Platform (Roslyn), Code Contracts, MSBuild, and other projects. For us, the developers of PVS-Studio analyzer, it's an opportunity to check well-known projects, tell people (including the project authors themselves) about the bugs we find, and additionally test our analyzer. Today we are going to talk about the errors found in another project by Microsoft, PowerShell.
A talk to beginner web developers about Webpack with a focus on performance optimization mindset and techniques. Given at an event organized by https://mintbean.io/
Discussion on angular offering, approaches to integrate web worker in angular (5 and 6) application, their pros and cons. A sample example implementation using custom web worker approach and integrating the same with CLI(1 and 6) and the application.
Usually we check various projects by PVS-Studio. This time, it's been vice versa: We have checked PVS-Studio by LibreOffice :-). And then managed to do the opposite check as well.
Similar to Moving from CruiseControl.NET to Jenkins in the PVS-Studio development team (20)
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
Utilocate offers a comprehensive solution for locate ticket management by automating and streamlining the entire process. By integrating with Geospatial Information Systems (GIS), it provides accurate mapping and visualization of utility locations, enhancing decision-making and reducing the risk of errors. The system's advanced data analytics tools help identify trends, predict potential issues, and optimize resource allocation, making the locate ticket management process smarter and more efficient. Additionally, automated ticket management ensures consistency and reduces human error, while real-time notifications keep all relevant personnel informed and ready to respond promptly.
The system's ability to streamline workflows and automate ticket routing significantly reduces the time taken to process each ticket, making the process faster and more efficient. Mobile access allows field technicians to update ticket information on the go, ensuring that the latest information is always available and accelerating the locate process. Overall, Utilocate not only enhances the efficiency and accuracy of locate ticket management but also improves safety by minimizing the risk of utility damage through precise and timely locates.
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...kalichargn70th171
A dynamic process unfolds in the intricate realm of software development, dedicated to crafting and sustaining products that effortlessly address user needs. Amidst vital stages like market analysis and requirement assessments, the heart of software development lies in the meticulous creation and upkeep of source code. Code alterations are inherent, challenging code quality, particularly under stringent deadlines.
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
What is Augmented Reality Image Trackingpavan998932
Augmented Reality (AR) Image Tracking is a technology that enables AR applications to recognize and track images in the real world, overlaying digital content onto them. This enhances the user's interaction with their environment by providing additional information and interactive elements directly tied to physical images.
E-commerce Application Development Company.pdfHornet Dynamics
Your business can reach new heights with our assistance as we design solutions that are specifically appropriate for your goals and vision. Our eCommerce application solutions can digitally coordinate all retail operations processes to meet the demands of the marketplace while maintaining business continuity.
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppGoogle
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-fusion-buddy-review
AI Fusion Buddy Review: Key Features
✅Create Stunning AI App Suite Fully Powered By Google's Latest AI technology, Gemini
✅Use Gemini to Build high-converting Converting Sales Video Scripts, ad copies, Trending Articles, blogs, etc.100% unique!
✅Create Ultra-HD graphics with a single keyword or phrase that commands 10x eyeballs!
✅Fully automated AI articles bulk generation!
✅Auto-post or schedule stunning AI content across all your accounts at once—WordPress, Facebook, LinkedIn, Blogger, and more.
✅With one keyword or URL, generate complete websites, landing pages, and more…
✅Automatically create & sell AI content, graphics, websites, landing pages, & all that gets you paid non-stop 24*7.
✅Pre-built High-Converting 100+ website Templates and 2000+ graphic templates logos, banners, and thumbnail images in Trending Niches.
✅Say goodbye to wasting time logging into multiple Chat GPT & AI Apps once & for all!
✅Save over $5000 per year and kick out dependency on third parties completely!
✅Brand New App: Not available anywhere else!
✅ Beginner-friendly!
✅ZERO upfront cost or any extra expenses
✅Risk-Free: 30-Day Money-Back Guarantee!
✅Commercial License included!
See My Other Reviews Article:
(1) AI Genie Review: https://sumonreview.com/ai-genie-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
#AIFusionBuddyReview,
#AIFusionBuddyFeatures,
#AIFusionBuddyPricing,
#AIFusionBuddyProsandCons,
#AIFusionBuddyTutorial,
#AIFusionBuddyUserExperience
#AIFusionBuddyforBeginners,
#AIFusionBuddyBenefits,
#AIFusionBuddyComparison,
#AIFusionBuddyInstallation,
#AIFusionBuddyRefundPolicy,
#AIFusionBuddyDemo,
#AIFusionBuddyMaintenanceFees,
#AIFusionBuddyNewbieFriendly,
#WhatIsAIFusionBuddy?,
#HowDoesAIFusionBuddyWorks
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Moving from CruiseControl.NET to Jenkins in the PVS-Studio development team
1. Moving from CruiseControl.NET to Jenkins
in the PVS-Studio development team
Author: Svyatoslav Razmyslov
Date: 07.02.2017
Now it's hard to imagine software development without automated project builds and testing. There are
various ready-made solutions to minimize the time expenses for the integration of the modifications
into the project. In this article I am going to speak about the way PVS-Studio team changed the
continuous integration server from CruiseControl.NET to Jenkins I will also be talking about the motives
behind this decision, the goals we tried to pursue and the issues we had to deal with during that
process.
Introduction
Continuous integration - is an automated process of building, deploying and testing software. This
practice is popular both among large development teams and individual developers. There is quite a
number of solutions for this practice. In this article we are going to talk about free open source projects
CruiseControl.NET and Jenkins.
CruiseControl.NET(CCNet) - a tool for continuous integration of software implemented on the .NET
Framework. There are also variants of the tool in Java (CruiseControl) and a version for the Ruby-
environments (CruiseControl.rb). You can view and manage the information about the builds through
web-interface or a desktop utility. It integrates with different version control systems. Is an open source
project but, unfortunately, is not developing since 2013.
Jenkins- a tool for continuous integration with open source, written in Java. It was forked from the
Hudson project after an argument with Oracle. Providing functions of continuous integration, it allows
automating a part of the development process, which does not require the involvement of human
developers. The abilities of Jenkins can be extended through plugins. At the moment the project is
actively developed and supported by the developers and the community.
Although this article may look like a review in the "CCNet vs. Jenkins" style, the choice is already made
for a server with Jenkins. The main reason why we changed the tool for continuous integration is that
2. the CruiseControl.NET project is no longer developing. There were also other issues when working with
CCNet that we are going to cover later.
Our project has quite a long history - recently we had a 10-year anniversary, you may read the story in
the article "PVS-Studio project - 10 years of failures and successes". We were using CCNet for more than
5 years. We got so used to its interface, settings and functions, that Jenkins seemed to be really
uncomfortable. First, we started using it with the release of PVS-Studio for Linux. The switch to the
Jenkins platform was preceded by a long study of the tool. Some time was spent on looking for the
similar functions from CCNet. Further on, I will describe the most interesting moments from our work.
Our claims for CCNet
1. CCNet is no longer developing. It can be used, but in case you want to expand the functionality
or fix existing/potential errors, you will have to do that by yourself.
2. The Source Code Management mode is working unstably, namely, for the automatic launch
when there are changes in the version control system. In case of problems with the network, in
this mode a project gets the status "Failed", even if it wasn't run. In practice, the problem occurs
so often (sadly, our office doesn't have the most stable Internet access), that this mode
becomes impossible to use.
3. When querying SCM on the edits, in case of an error in the version control system (for example,
if some directory was removed from a repository, specified in the settings, causing a tree
conflict), the execution of the project will be immediately interrupted; still, the status will be
kept "Success" - a project will cease working, but its status will remain "green " in the web
interface and desktop utility. In such a mode the launch of tests can be not done for weeks and
there is a risk that no one will pay attention to it, thinking that tests are working correctly.
4. The general server performance log is too verbose and unstructured: it's hard to understand
which step of the build failed and find a log specifically for this step. When running multiple
projects in parallel, the build log gets "mixed". The XML log of the build of a separate project is
available in the web interface, but quite often is not really detailed and doesn't contain all the
commands that were run.
5. Inefficient paralleling of subtasks inside a project. The subtasks are run in parallel by groups by
the number of the processor cores. If long and quick commands get to the group, then the new
tasks won't be run, until all the tasks from the previous run aren't completed.
Comparison of usage scenarios
Server settings
The settings of the CCNet projects (configuration of the server) were stored in one xml file, and various
passwords in a different one. Although the settings file reached the size of ~4500 lines, it was still quite
convenient to use it. By pressing Alt+2 in Notepad++, the whole list of projects can be minimized and
you can edit the one you need (figure 1).
Figure 1 - Editing the CCNet settings in Notepad++
3. Although the file had some duplicate code, there were no difficulties with the server support.
Here is how the SCM block was configured:
<svn>
<username>&SVN_USERNAME;</username>
<password>&SVN_PASSWORD;</password>
<trunkUrl>&SVN_ROOT;...</trunkUrl>
<workingDirectory>&PROJECT_ROOT;...</workingDirectory>
<executable>&SVN_FOLDER;</executable>
<deleteObstructions>true</deleteObstructions>
<cleanUp>true</cleanUp>
<revert>true</revert>
<timeout units="minutes">30</timeout>
</svn>
Here is how the MSBuild block was configured:
<msbuild>
<description>PVS-Studio 2015</description>
<workingDirectory>&PROJECT_ROOT;...</workingDirectory>
<projectFile>...PVS-Studio-vs2015.sln</projectFile>
<buildArgs>/p:Configuration=Release</buildArgs>
<targets>Build</targets>
<timeout>600</timeout>
<executable>&MSBUILD14_PATH;</executable>
</msbuild>
Here is how the block for common tasks was configured
<exec>
<description>PVS-Studio 2015 sign</description>
<executable>&PROJECT_ROOT;...SignToolWrapper.exe</executable>
<baseDirectory>&PROJECT_ROOT;...</baseDirectory>
<buildArgs>"&SIGNTOOL;" ... PVS-Studio-vs2015.dll"</buildArgs>
<buildTimeoutSeconds>600</buildTimeoutSeconds>
</exec>
On the basis of such a project file, CCNet displays very conveniently all the executable steps (albeit only
in the desktop tray utility, for some reason the web-interface didn't support this). In Jenkins we had
some troubles with the "high-level" display of stages of completing an integration project, but we will
speak about that later.
In Jenkins you have to store quite a number of settings files: a server configuration, settings files for
some plugins, each project has its own configuration file. Although all of these files exist in the xml
format, they aren't very convenient to view (at least in comparison with CCNet), because all the
commands in the tags are written as plain text. The truth is, this is largely connected with the ideology
of the use of the instrument. In CCNet the config is written manually, so it can be "nicely" formatted.
Jenkins suggests editing project settings using its web interface and automatically generates configs.
Here is an example of how the commands look like in the Jenkins configs:
<hudson.tasks.BatchFile>
<command>CD "%BUILD_FOLDERS%Builder"
PVS-Studio_setup.exe /VERYSILENT /SUPPRESSMSGBOXES ...
4. Publisher_setup.exe /VERYSILENT /SUPPRESSMSGBOXES</command>
</hudson.tasks.BatchFile>
And this is quite a small example.
View the task statuses
As I have written before, in CCNet the projects are configured with Task blocks. Here is how a
successfully completed task looks with all the steps (figure 2).
Figure 2 - viewing the status of tasks in the CCTray (a desktop client for CCNet)
An error in any of the blocks can be clearly seen in the hierarchy of subtasks. It is very convenient and
illustrative visualization of the integration process. We almost never had to search for logs, it was clear
looking at the description what requires checking on the local computer. We could not find such a
feature in Jenkins, that's why we had to study this question really thoroughly before moving to Jenkins.
We can draw such analogy between CCNet and Jenkins: there is a project in CCNet (Project), the 'step' in
this project is called a Task (as you can see on the figure above). In Jenkins there is also a project (Job),
but its 'steps' are called the same - Steps (figure 3).
Figure 3 - Corresponding names in CCNet and Jenkins
5. Unfortunately, the web interface of Jenkins cannot visualize individual steps - the Job has only a full
console log of all steps together. A big disadvantage is that you cannot see in Jenkins which of the steps
failed - you need to watch the full log of the Job build. And as people get used to good things very
quickly, we didn't want to abandon the old usage scenario. At that time we discovered Multijob Plugin
This plugin allowed us making the following improvements:
1. Using Jobs as Steps in other Jobs. Thus we got universal Jobs that allowed separating the log of certain
subtasks and the main thing to view statuses of separate subtasks. The Jenkins web interface can
visualize quite well the completion of individual Jobs within a Multijob - it's exactly what we were
looking for. Figure 4 shows an example of a completed Multijob.
Figure 4 - viewing a completed Multijob.
6. 2. We managed to get rid of duplicate code using universal Jobs. For example, there is a compilation of
some utility: for the distribution, for tests, for the code analysis. In CCNet these were same Task blocks
in 3 different projects. To compile this utility in Jenkins there is a Job that is used by several Multijobs.
3. During the creation of projects in Jenkins, we have the following workflow. We divide all the Jobs into
Multijob "projects" and universal "steps". The names of the universal Jobs have a prefix "job_" and do
not suggest using as a separate (stand-alone) project. They also don't have loading the source code from
the repository. The names of Multijobs have the "proj_" prefix and include loading of the source code
and running only other Jobs. (We try to avoid Steps, because they are not visualized).
The universal Jobs are run with the following parameter:
WORKSPACE=$WORKSPACE
It means that the Job will be run in the working directory of the Multijob.
Thus we can get a log of the source files updates and logs of all the steps of the build separately. It
would be hard and meaningless to follow this ideology for all the projects. It is done only for several
biggest and most important projects that should be studied in detail in case of problems.
4. You can configure conditional and parallel launch of the Jobs in Multijob. Multijobs can run Multijobs
using the same ways. Thus you can combine launches of different projects: to start the build of all
installers or all the tests.
Viewing the build logs
It was extremely inconvenient to view the build logs of the projects, because they were mixed with the
server output and had a special markup. There is no such a problem in Jenkins and there is a possibility
to separate the logs for subtasks in some projects.
Getting the revision of the source code
In Jenkins a separate revision of the version is defined for every added link to the SVN repository. I.e. if
we add several directories, the numbers can vary greatly, but we need only one maximum number.
According to the documentation, we should work with this as follows:
If you have multiple modules checked out, use the svnversion command. If you have multiple modules
checked out, you can use the svnversion command to get the revision information, or you can use the
SVN_REVISION_<n> environment variables, where <n> is a 1-based index matching the locations
configured.
It was done in this very way: of all the obtained values SVN_REVISION_<n> , the maximum value was
chosen and added to the built programs.
Useful plugins for Jenkins
The enhancement of the tool with the help of the plugins allows flexible configuration of the server. The
plugins to run the tests in Visual Studio are perhaps the only ones that we refused to use. They had
additional mandatory launch parameters, that we didn't use that's why it was easier to create a
universal Job that would just start the tests from a command line. Unfortunately, Jenkins, being "out of
the box" couldn't do much of what we got so used to in CCNet. However, we manage "to get back" all
the necessary functionality.
Here is a list of those plugins that we found useful, with a small description:
1. Multijob plugin- allows using other Jobs as stages of the build with the possibility of sequential
and parallel execution.
7. 2. Environment Injector Plugin - a plugin that is used to specify global passwords. They are used as
environment variables, and the plugin hides the variable value in the log.
3. Pre SCM BuildStep Plugin - adding extra steps before executing the commands of the version
control system.
4. MSBuild Plugin - a handy plugin to build projects using MSBuild. In the settings you specify the
paths to different versions of MSBuild only once, later in the project you can easily add build
steps.
5. Parameterized Trigger plugin - add parameters of a project launch. For example, you can make a
choice of a trunk/stable branch to build a distribution.
6. Post Build Script Plug-in - performing additional steps after the build.
7. Throttle Concurrent Builds Plug-in - this plugin allows adjusting the number of concurrently
running project builds either globally or within a specific category. It lets you get the
functionality in Jenkins similar to the queues in CCNet - an ability to execute in parallel several
projects from different categories (queues), while providing consistent execution of the projects
within a single queue. For example, we have Installers queues (distributions) and Tests. We
want to have an ability to build some distribution in parallel with running the tests, but at the
same time, tests shouldn't work in parallel - there won't be enough "cores" on the server.
8. Build Name Setter Plugin - allows specifying the name in a necessary format:
Major.Minor.Revision.Build.
9. Dashboard View - allows adding a custom Jobs display in the browser. As we have universal
Jobs, that are of no use to run manually, we created a list without them with the help of this
plugin.
10. ZenTimestamp Plugin - a handy plugin that adds timestamps in the build logs.
Overview of desktop clients
To receive notifications from the CCNet we used a client for Windows - CCTray.
Here are variants that are now available to work with Jenkins:
1. CCTray - this program can be used for a Jenkins server as well. The projects will look approximately
the same as they were before (figure 5).
Figure 5 - CCTray screenshot
The description of CCTray as a Jenkins client:
It is not developing, the same as CCNet;
Can't show subtasks (works only for CCNet);
Cannot run the projects;
You can go to the project page by clicking on the title;
Configurable display of projects (Icons, List, Details);
Open source.
8. 2. CatLight (figure 6)
Figure 6 - a screenshot of CatLight
Client description:
At this moment it is a beta version, the final version will be paid;
There are crashes during the setup and work, glitches in the interface;
When the PC "wakes up" after the hibernation, the status on the dashboard doesn't get
automatically updated.
Can't show subtasks for Multijobs;
Cannot run the projects;
The project display is not customizable (the only possible display - figure 6);
You can go to the project page by clicking on the title;
Ability to view the status of last 5 launches and jump-click to them;
Ability to view the progress of the running project;
If several servers are added, they are conveniently separated by a line;
Versions for Windows, Linux and Mac.
3. Kato (figure 7)
Figure 7 - screenshot of Kato
Client description:
Can't show subtasks for Multijobs;
Can run the projects; Unfortunately, does not support projects with a parameterized launch -
the utility crashes when trying to run such a project;
Projects from different servers are displayed in one list and are not separated in any way (not
always convenient);
Configurable project display (List, Grid);
You can go to the project page by clicking on the title;
9. You can view the latest log directly in the client, but due to lack of monospace text it is not very
convenient;
Open source.
Only for Windows.
4. CCMenu - a client only for Mac, open source. It is not relevant for us, but perhaps, some may need it.
Conclusion
Using CI is useful in any project. There is a great free tool Jenkins that was reviewed in the article, and
also there are a lot of other free and paid Cl. It is rather pleasant to use a developing the project: a large
number of upgrades are released for Jenkins and plugins. New solutions get created, as for example,
Blue Ocean project that is still in Beta. You may find it on the main page of the Jenkins site.
Although, the clients for monitoring Jenkins projects weren't much impressive to me. A lot of obvious
features are missing. Perhaps desktop clients are particularly in demand and it is more correct to use
only some web interface.
When moving to a new server, we couldn't use Jenkins as a Windows service, because in this mode the
UI tests do not run. We found a way out by setting up a server as a console application with a hidden
window.
If you have any comments to this material of some interesting solutions of the problems we've
mentioned here, we'll be glad to get them in the comment section of via a feedback form.