Jenkins User Conference London – World Tour 2015

I had the opportunity to attend to this conference and I want to share some quick notes about my experience, also to give you some information of what’s coming and share some resources.

2015-06-23 10.26.16

Based on the amount of people/companies attending, you can tell how the enterprise is paying more attention to Continuous Integration (CI) and Continuous Delivery (CD). This has as a consequence that Jenkins needs to start putting some order into what happens in the community and start driving Best Practices to it’s Best.

Now to the information:

Keynote by the Jenkins Master:

  • History of Jenkins
  • Docker integration with Jenkins
  • WorkFlow Plugin
  • Jenkins in Hardware
  • Jenkins and DevOps
  • Community Growth

I won’t go through all the sessions and I will just give a simplified version of what I think is worth mentioning in this post:

“Seven Habits of Highly Effective Jenkins Users”

Great session by Andrew Bayer, the community and some private companies have developed more than 1000 plugins already and is hard to know what to use, also the lack of initial documentation made people use Jenkins the best they could, this is what I take from his session:

  • Have a Production Environment and DON’T break it.
    • Upgrade only if you need to and if you plan to do so, don’t do it directly in Production.
    • Same applies for plugins already in use.
    • Backup your configuration files
  • Have multiple Masters and Slaves!!!
    • You can break this per teams or projects or how ever fits best in your organization.
  • Make sure you only install plugins you need.
    • In all environments, is great if you want to play with some, but do so in a development environment and erase it if it wasn’t useful.
  • Integrate with Other tools
    • Jira, Git, etc.

“How to optimize Automated Testing with Everyone’s Favorite Butler”
by Viktor Clerc

This was another good session, mainly about testing, for some it might seem repetitive as at this stage we all should be aware of best practices around testing, but there are a couple of things that are worth mentioning from this session:

  • “Developers are becoming Testers” / “Testers are Developers”
  • Continuous Delivery = Execution + Analysis = Speed + Quality
  • Cohn’s Pyramid
    • UI, Service, Unit.
  • FAIL FASTER!!!
    • Test Use Cases
      • Functional Coverage not Technical Coverage.
    • Involve users in every stage of the delivery process.

“Evolving the Jenkins UI”
by Tom Fennelly and Gus Reiber

Is there anything else to say? I think is great they are doing this, I’m pretty sure that this will make UX much better and it should improve productivity:

  • CSS Modularization
    • Using Less
  • JavaScript Modularization
  • Change of some components

You can get involved in here:

“Orchestrating Your Pipelines with Jenkins, Python and the Jenkins API”
by Pradeepto K. Bhattacharya

This session was related to a real life experience using Jenkin’s APIs with Python Wrappers. You can tell the APIs are quite limited but useful enough to start using them actively. This is what you can do with Python:

  • Create new jobs
  • Copy existing jobs
  • Delete jobs
  • Update jobs
  • Get a job’s build information
  • Get Jenkins master version information
  • Get Jenkins plugin information
  • Start a build on a job
  • Create nodes
  • Enable/Disable nodes
  • Get information on nodes

There are no official “Java Wrappers” for this API, but you can consume it as:

  1. XML
  2. JSON
  3. Python

You can get more information here: Jenkins

“Scaling Your Jenkins Master with Docker”
by Christophe Muller

I’m not an expert in Docker, well at least not yet, so my opinion might be irrelevant, never the less, I think this was a really good presentation in order to understand the level of integration between Jenkins and Docker.

“Scaling of Jenkins Pipeline Creation and Maintenance”
by Damien Coraboeuf

Another interesting session, where an extension of the Job DSL Plugin was presented which helps to simplify life when you have a “jungle” of jobs: Seed Plugin that it should help to automate the generation and maintenance of pipelines.

Implementation overview

“Jenkins Made Easy”
by Nobuaki Ogawa

I was tempted not to include this one in my post, but there is 1 diagram that is worth mentioning in here and is self explanatory regarding the confusion between Continuous Integration, Continuous Build, Continuous Testing, Continuous Delivery,Continuous Deployment and Continuous Feedback:

Continuous-Integration

If you wan’t more information please click the links provided in the post. I’m pretty sure there was much more than this in other sessions, if you have the slides please share them in the comments otherwise, thanks for reading.

P.S. If you tought I’ll leave Oracle out of this post think twice: Open Source Tools for Java Development

WebCenter Patch 11.1.1.9

I have been out for some time, but wanted to share the new WebCenter Release, I’ll create another post to provide a personal feedback.
JDeveloper 11.1.1.9
 
Download:
 
WebCenter Portal 11.1.1.9
 
Download:
 
What’s New:
 
WebCenter Content 11.1.1.9
 
Download:

http://www.oracle.com/technetwork/middleware/webcenter/content/downloads/index.html

What’s New:

Oracle Mobile Application Framework

After a long wait the evolution of Oracle ADF Mobile has been released, the name: Oracle Mobile Application Framework or MAF.
http://www.oracle.com/technetwork/developer-tools/maf/overview/index.html

Documentation:
http://docs.oracle.com/middleware/mobile200/mobile/docs.htm

2014-07-03_0243

To use it, you just need to download JDeveloper 12c (12.1.3.0) and go to updates to download the extension.

JDeveloper 12c
http://www.oracle.com/technetwork/developer-tools/jdev/downloads/index.html

One of the most important improvements is the Security, and I’m not talking only about the Oracle Mobile Security Suite:
http://www.oracle.com/us/products/middleware/identity-management/mobile-security/overview/index.html

From the start of the application you start to notice important difference between the applications:

Oracle MAF

2014-07-03_0152

Oracle MAF

2014-07-03_0157

 

Oracle ADF Mobile

 

2014-07-03_0233

Oracle MAF

2014-07-03_0202_001

Oracle ADF Mobile

2014-07-03_0202

 

Oracle MAF

2014-07-03_0203

Oracle ADF Mobile

2014-07-03_0205

 

Oracle MAF

2014-07-03_0206I’ll go into details in future posts.

http://www.oracle.com/technetwork/developer-tools/maf/documentation/oraclemaf-datasheet-2220993.pdf
http://www.oracle.com/us/technologies/mobile/oracle-mobile-suite-ds-2085011.pdf

Customize Profile for users in WebCenter Portal (Spaces/Builder)

Have you notice that when using WebCenter Portal (Spaces/Builder) you can only modify specific things from your profile? Or how about preventing the user from changing his password?

2014-05-29_0455

Well this can be customized really easily for all your users, just login as an Admin user:

2014-05-29_04502014-05-29_0451
2014-05-29_04532014-05-29_0454You can also tune your application changing the cache settings for profile sync between Portal and your LDAP:

2014-05-29_0506

 

Oracle Access Manager – Custom Pages

I have been recently working on a project to customize OAM, sounds easy right? it is if you have the correct information, you have to pay attention to the details so you know what to look for and where you to find it:

Considerations:

  1. Custom pages does not mean Login page only
  2. Change password and dependants are also included
  3. Version of OAM 11.1.2.0.0
  4. Custom Pages technology JSP
  5. Cluster environment.

OAM Setup:

  1. Configure WebGate (Not part of this post)
  2. Create a New Authentication Scheme
  3. Update Password Service URL

New Authentication Scheme

  • Login to  oamconsole http:server:port/oamconsole
  • Create a New Authentication Scheme

2014-05-20_0140

The important bit:

  • Challenge Method: Form
  • Challenge URL:  Your login page
  • Context Type: external

2014-05-20_0136

Custom Pages

OAM provides a base project so you don’t have to start everything from scratch or at least it will give you an idea of the proper structure your project should have. You can use any web echnology you prefer, I’ll show the solution with JSP.

Login Page

 Get values from Header and from URL:

<%
 //Request OAM_REQ parameter from Header OAM Version 11.1.2
 String oamReq = request.getHeader("OAM_REQ");
 //Error code sent by OAM in case of failure
 String errCode = request.getHeader("p_error_code"); 

 String requestId = request.getParameter("request_id");
 String resourceUrl = request.getParameter("resource_url");
%>

The Form:

 <form name="ssoFrm" id="login" autocomplete="off"
 action="/oam/server/auth_cred_submit"
 method="POST">

 <label for="username">Username</label>
 <input name="userid" type="text" id="username"
 class="required"></input>

 <label for="password">Password</label>
 <input name="password" type="password" id="password"
 class="required" size="36"></input>

 <input name="request_id" value="<%=requestId%>"
 type="hidden"></input>

 <% if(oamReq != null && !"".equals(oamReq) ) { %>

 <input id="serverctx" name="OAM_REQ" type="hidden"
 value='<%=oamReq%>'/>
 <% }%>

<%
if(!errCode.equals("")){
//You can map this value in a Resource Bundle
 errorMessage=errCode;
 }
 %>
 <%=errorMessage%>

 <button id="sSubmit" name="sSubmit" type="submit">
Login</button>
 </form>

Change Password

Make sure you change the Password Service URL to point to your custom page: 2014-05-21_0331   Change Password  Page must contain:

 
<%
 //Set the Expires and Cache Control Headers
 response.setHeader("Cache-Control", "no-cache, no-store");
 response.setHeader("Pragma", "no-cache");
 response.setHeader("Expires", "0");
 response.setContentType("text/html; charset=UTF-8");
%>

There are 2 considerations we need to take into account for this page:

  1. Get policy rules from OAM
  2. In case of errors being present get password error messages
 
 <%
String reqId = request.getParameter(GenericConstants.REQUEST_ID);
//Password Policies
String rules=request.getParameter("ruleDesc");
//In case of error, gets the error messages
String errorCode=request.getHeader("p_error_code");
String errorMsg=request.getParameter("p_sec_error_msg");
//Type of the request.
String type= request.getParameter("type");
//In case of not following Password Policies, errors thrown back.
String rejectedRules=request.getParameter("rejectedRuleDesc");
%>
 
  <%
 if(type.equals("CHANGE_ACCEPT")){
 String redirectURL = "LandingPage.jsp";
 response.sendRedirect("/"+redirectURL);
 }
%>
 
<%
 String rejectedMsg = "";
 if(rejectedRules != ""){
 if(rejectedRules.indexOf('~') != -1) {
 String[] rejected = rejectedRules.split("~");
 for(String eachResult : rejected) {
 if(eachResult.indexOf(":") != -1) {
 String messageKey = eachResult.substring(0, eachResult.indexOf(":"));
 String placeHolderValue = eachResult.substring(eachResult.indexOf("::") + 2, eachResult.length());
 String msgString = props.getProperties().getProperty(messageKey);
 String message = MessageFormat.format(msgString, placeHolderValue);
 String displayValue = placeHolderValue;
 rejectedMsg +=message + "";
 }
 else {
 String resourceBundleKey = eachResult;
 String msgString = props.getProperties().getProperty(resourceBundleKey);
 if(null != msgString){
 rejectedMsg += msgString +"";
 }
 }
}
}
}
%>

Log the user in when the change is accepted:

<%
if(type.equals("CHANGE_ACCEPT")){
 %>
<script type="text/javascript">
 window.document.forms[0].submit();
 </script>
 <%
 }
 %>
References:
http://docs.oracle.com/cd/E40329_01/dev.1112/e27134/custpages.htm

WebCenter Pagelet Producer – Part 1

In one of my previous posts I wrote about Web Clipping, this time I’ll like to write something about WebCenter Pagelet Producer :

  1. How to create a Resource
  2. How to extract Content
  3. How to Inject Content (In the extracted content)
  4. How to consume a Pagelet

WebCenter Pagelet Producer

Allows you to publish content from back-end applications via pagelets. A pagelet is a reusable UI component that can run on any web page or web application. 

In other words is a Mashup Enabler.

Example: You have a requirement where you need to integrate different pieces of content from an external page/system into your Web Application/ Portal ( HR Intranet wants to display content from Finance Intranet)

Hands On

Requirements

  1. Oracle WebCenter Server
  2. Have WC_Portlet Managed Server Running
  3. Admin user (ex. weblogic)
  4. The URL of the Application where you want to extract information
    I’ll use infoMENTUM’s.

Login to WebCenter Pagelet Producer Admin:
http://server:8889/pagelets/admin

2014-04-05_2042
To create a resource (Pagelet and its resources):
2014-04-05_2042_002

2014-04-05_2043
For the Source URL make sure to keep it generic so in the future you can access all the levels of the Application (ex. http://www.infomentum.com/uk/). It’s recommended to always select DHTML Rewriting.
2014-04-05_2048
Now the important part, the Pagelet.
2014-04-05_2058
Insert the General information for your Pagelet.

In the URL Suffix include the rest of the URL to access the resource you want to access (ex. about-us/media-centre/videos-and-webcasts/generationc).

The final URL will look like this when browsed for Content: http://www.infomentum.com/uk/about-us/media-centre/videos-and-webcasts/generationc

2014-04-05_2139
To extract the content you’re looking for, go to the Clipper section and create a new one:
2014-04-05_2136_001
To extract content you have two different ways of doing it:
Graphical Clipper: It will open a window with the content URL so you select the piece of content you want to clip to your Pagelet.
Advanced Clipper: You need to add the tag and an attribute of that tag so it gets recognized by the Clipper.

 

2014-04-05_2140

 

2014-04-05_2141

 

2014-04-06_0300
Now let’s use a bit of Injection:
2014-04-06_1349
Select where do you want to inject your content, this can be as simple as a string.

2014-04-06_1354
Write the content you want to inject:

 

2014-04-06_1357
Final Result:2014-04-06_1402

If you want to know how to access your Pagelet go to the Documentation section:
2014-04-06_0242_001
You can select your preferred method for integration, REST or Javascript.

That’s it for a basic Pagelet I’ll talk about Advance Features in a following post.

 

Oracle ADF Faces Cookbook as a Technical Reviewer

Oracle ADF

Author: Amr Gawish
Technical Reviewers: Mauro Flores, Matteo Formica, Bejoy thomas, Victor Jabur, Daniel Ribeiro

I recently had the opportunity to review this cookbook. As you might or might not know, cookbooks are meant for people to learn/know about a specific topic following recipes, this makes life easier for the reader but it makes it complex for the author to keep it simple but at the same time useful.

Amr Gawish did a great job with this book, he really tried to kept it focus to what it really matter, that in this case was ADF Faces.

We need to remember that ADF follows an MVC Architecture, for this reason it’s important to distinguish the difference between every layer, so it’s not the same to say ADF than ADF FACES. The latter is the front end or view layer of the ADF Framework.

From my personal point of view I like this book because it covers the most important topics of ADF FACES, it has interesting recipes about complex and basic topics and part of my recommendations was to always follow best practices, which he tries to encourage.

As mentioned before this will only cover one layer of the ADF Framework but it does a good job with it, I’ll recommend you to have a complimentary book to understand or have your recipes to hand regarding the other two layers.

It doesn’t matter if you’re a beginner or an expert in ADF, this book needs to be part of your library.

http://www.packtpub.com/oracle-adf-faces-cookbook/book

Hands On Time! – WebCenter Portal Tools part 1

When it comes to Portal I’m not a big fan of using Portlets, don’t get me wrong they are great but they can get messy if you’re not careful enough, whenever I can I prefer to use ADF TaskFlows….. yes yes I know they are made for different things and Yannick Ongena has a good article about it.  But the portlets that WebCenter bundles are really useful if you know how to use them. Let’s start with “Portal Tools”:

Web Clipping Producer

Is a publishing portlet that enables you to integrate any web application with applications built using Oracle WebCenter.

Requirements:

  1. JDeveloper with WebCenter Extension. I’m using (11.1.1.8)
  2. Demo WebCenter Portal Framework Application

You don’t have to install a full WebCenter environment to work with this, we’ll make use of the one integrated in JDeveloper: 1. Start your integrated WebLogic Server 2014-03-02_2356 2. Deploy PortalTools Portlet Producer 2014-03-02_2153 2014-03-03_0228

3. Create a new Oracle PDK-Java Producer connection:

2014-03-03_0237

2014-03-03_0238 2014-03-03_0241 2014-03-03_0242

2014-03-03_0243

4. Drag and Drop the portlet to your page. In my case I’m using home.jspx.
NOTE: You can use the portlet as many times as you want inside the page.

2014-03-03_0248

5. Run your Portal,  Login and go to your page:

2014-03-03_0250

6. Edit the Portlet:

2014-03-03_0250_001

7. Now the interesting part, select the site where you would like to take your “Mash-ups” from, in this example I’m using Oracle – WebCenter : http://www.oracle.com/technetwork/middleware/webcenter/suite/overview/index.html

2014-03-04_0019

2014-03-04_00182014-03-04_0019_0012014-03-04_0019_0022014-03-04_00212014-03-04_00222014-03-04_0022_001

8. Repeat this procedure for all the portlets:

2014-03-04_0028

NOTE: You can add more WebClipping Portlets in run time with Composer.

SOA explained with London’s Transport

Recently, I had the opportunity to give an internal training to our Non technical team about Middleware, of course the title, “Middleware for Humans” had to be used. And as you know an important part of Middleware is SOA. Our office is based in London. so being inspired by John Bronswick, I looked for an analogy in how to explain SOA in simple words, this is Oracle’s Description for it:

Oracle SOA Suite: a complete set of service infrastructure components for designing, deploying, and managing composite applications. Oracle SOA Suite enables services to be created, managed, and orchestrated into composite applications and business processes. Composites enable you to easily assemble multiple technology components into one SOA composite application.

2014-03-02_0134

Commuting case in London

There are multiple services working in London for commuters:

· Underground

· Train

· Bus

· DLR

It’s common to have to use more than one of them during the day. And they are owned by different private companies.

So, what does all these has to do with SOA? Multiple services own by multiple provider with the need to be consumed by the same client. What would happen if a new provider joins? or if they decide to upgrade a service? Well, with SOA we can solve this with the Service Bus:

A)
“A style of integration architecture that allows communication via a common communication bus that consists of a variety of point-to-point connections between providers and users of services.”

“An infrastructure that a company uses for integrating services in the application landscape.”

“An architecture pattern that enables interoperability between heterogeneous environments, using service orientation.”

How London solves this issue:

 OYSTER CARD

B)
“Oyster card to travel on the Tube, London Overground, DLR, bus, tram and most National Rail stations in London. You can put Travelcards, bus and tram season tickets and pay as you go credit on to the card.“

So, London commuters just have to register for one service only no matter what version or service they are using, if they are registered and they need to change for example their last name, they just need to do it once.

A)  http://www.oracle.com/technetwork/articles/soa/ind-soa-esb-1967705.html
B)  
http://www.tfl.gov.uk/tickets/27298.aspx

Roles and Responsibilities in IT Projects — Part 1

The biggest problem in IT Projects

One of the main problems in an IT Project is the definition of the roles, I’ll extend this with ADF/WebCenter Project roles in the second part of this post. A great video from Chris Muir (Oracle) can be found here.

You don’t need a person per role, one person can take multiple roles, if the size of the project allows it.

It’s really important for everyone in the project to understand their roles so they can make the best of it. If this is not clear, the risk of failure is more than 80%.

Let’s start splitting the roles into different layers:

Business Layer:

Sponsor: The Sponsor is the owner of the project, this role is normally taken by a senior executive.

  • Main Responsibility: Responsible to the business for the success of the project.

Customer: It’s the Business representative that has a detailed understanding of the project, it’s also responsible of the budget.

  • Main Responsibility: To control the definition of the project and to be responsible of the budget. In an AGILE methodology this role is responsible of defining and prioritizing the stories (Backlog).

Management / Design Layer:

Project Manager: Responsible for developing, in conjunction with the Sponsor, a definition of the project. It’s the responsible of planning, organizing, motivating and controlling resources to deliver a successful project.

  • Main Responsibility: Is responsible for communication, including status reporting, risk management, escalation of issues that cannot be resolved in the team, and, in general, making sure the project is delivered in budget, on schedule, and within scope.

Business Analyst: An internal consultancy role that has responsibility for investigating business systems, identifying options for improving business systems and bridging the needs of the business with the use of IT.

  • Main Responsibility: Is responsible for identifying change needs, assessing the impact of the change, capturing and documenting requirements and then ensuring that those requirements are delivered by IT whilst supporting the business through the implementation process.

Enterprise Architect: Enterprise architects work with stakeholders, both leadership and subject matter experts, to build a holistic view of the organization’s strategy, processes, information, and information technology assets. The role of the enterprise architect is to take this knowledge and ensure that the business and IT are in alignment.

  • Main Responsibility: Long-term strategic responsibility for the company’s IT systems, costs and improve information flows, ensure that projects do not duplicate functionality, standards and guidelines that direct the selection, development and implementation, build employee knowledge and skills in specific areas of expertise.

UX Designer: Studies and evaluates how users feel about a system, looking at such things as ease of use, perception of the value of the system, utility, efficiency in performing tasks and so forth.

  • Main Responsibility: Devise a study to compare the effectiveness and quality of experience of different user interfaces, devise a study to compare the effectiveness and quality of experience of different user interfaces, design how users should move through a system is another popular deliverable.

Resource Manager: Allocates human resources among various projects or business units, maximizing the utilization of available personnel resources to achieve business goals, performing the activities that are necessary in the maintenance of that workforce through identification of staffing requirements, planning and oversight of payroll and benefits, education and professional development, and administering their work-life needs.

  • Main Responsibility: Guide and manage the overall provision of Human Resources services, policies, and programs for a company.

Solution Architect: Must have experience on multiple Hardware and Software Environments and be comfortable with complex heterogeneous systems environments, is often a highly seasoned senior technocrat who has led multiple projects through the Software development process or Systems Development Life Cycle (SDLC), and has usually performed in a variety of different roles in that life cycle.

  • Main Responsibility: Organizes the development effort of a systems solution, becomes involved with a project at the time of inception and is involved in the Functional analysis (FA) of developing the initial requirements. They then remain involved throughout the balance of the project, decides which technologies to use. They work very closely with developers to ensure proper implementation. They are the link between the needs of the organization and the developers.

References:

 http://en.wikipedia.org/
http://www.pmi.org/default.aspx
http://www.businessanalystsolutions.com
http://uxdesign.smashingmagazine.com/2010/10/05/what-is-user-experience-design-overview-tools-and-resources/ 

Blog at WordPress.com.

Up ↑

%d bloggers like this: