GSoC Project Intro: Improving Job Creation/Configuration
My name is Samat Davletshin and I am from HSE University from Moscow, Russia. I interned at Intel and Yandex, and cofounded a startup project where I personally developed front-end and back-end of the website.
I am excited to participate in GSoC with Jenkins this summer as a chanсe to make a positive change for thousands of users as well as to learn from great mentors.
Although powerful, Jenkins new job creation and configuration process may be non obvious and time consuming. This can be improved by making UI more intuitive, concise, and functional. I plan to achieve this by creating a simpler new job creation, configuration process focused on essential elements, and embedding new functionality.
My mentors are Kirill Merkushev and Michael Neale
New job creation
New job name validation
Initially, job validation was unresponsive, job creation was still allowed with an invalid name, and some allowed characters even crashed Jenkins. Happily, two of this problems were fixed in recent improvements and I plan add only a real time name check for invalid characters.
Jenkins has a lot of windows reloads that may time consuming. The creation of new job is a simple process requiring only job name and job type. This way UI may be improved by reducing page reloads and putting new job creation interface in a dialog window. Such popup would likely consist of three steps of implementation: rendering a dialog window, receiving JSON with job types, sending a POST request to create the job.
Changing help information
As reported by some users, it would be useful to have the functionality to change help information. Installation administrators would be able to change the help info and choose editing rights for other users. That would likely require a creation of extension points and a plugin using them. I also would like to include the ability to style the help information using markdown as shown above.
[Optional] The functionality is extended to creation of crowd sourced "wiki like" documentation
As in localization plugin the changes are gathered and applied beyond installation of a particular user.
More intuitive configuration page.
Pursuing to solve this issue
Although there are a lot improvements in new configuration page, there is always a room for improvements. An advanced job still has a very complicated and hard to read configuration page. It is still open to discussion, but I may approach it by better division of configuration parts such as an accordion based navigation.
[Optional] Removing "My Views" page
"My Views" page may unnecessary complicate essential sidepanel navigation. Since it contains very small functionality, the functions may be moved to the home page and the whole page may be removed. That may be implemented by adding icons to "My Views" tabs. Additionally, the standard view creation page can create either of the types
[Optional] Reducing number of UI elements
The home page may contain some UI elements that are not essential and rarely used. This way elements "enable auto refresh", “edit description”, “icon sizes”, ”legend”, “RSS” may be removed from home page and placed under "Manage Jenkins" or an upper menu. It is also possible to create new extension points to support new UI elements through plugins.
By May 25th I learned about the structure and tools of Jenkins and started working on the first project:
I started with New Job Name validation first. Luckily, in last updates the changes of recena there were implemented all of the changes I proposed except real time check on name validity. Here I proposed the change which fixes it by sending GET request on keyup event in addition to blur.
I also made a New Job Popup with using existing interface.
I used Remodal library for popup and put there existing New Job container. Surprisingly, it was fully functional right away. On the GIF you can see that popup receives all job types and then successfully submits the post form creating a new job. I think that could be a good first step. Further I can start changing the window itself.