Compare commits

...

60 Commits

Author SHA1 Message Date
R. Tyler Croy c0953d956e
Twiddle the installation sections to be a bit more cohesive 2017-04-04 21:51:18 -07:00
R. Tyler Croy 1b9d2081a2
Add a nice install screenshot for Blue Ocean's plugin 2017-04-04 21:47:20 -07:00
R. Tyler Croy f904000adb
Use a higher resolution version of this image 2017-04-04 21:47:20 -07:00
R. Tyler Croy a43fca69fd
Change the title of the Getting Started document so it will fit in the nav 2017-04-04 21:47:20 -07:00
R. Tyler Croy 70c10152b8
Remove the FAQ document and incorporate that into the chapter index page for now
This doesn't make sense to me to live as a stand-alone page

Closes #793
2017-04-04 21:47:20 -07:00
Liam Newman d379c3840c
Image clean up 2017-04-04 21:47:20 -07:00
Liam Newman a6b9377982
Remove pages not need for release 2017-04-04 21:47:20 -07:00
Liam Newman 94abc3386a
Added images for pipeline creation 2017-04-04 21:47:20 -07:00
Liam Newman 9f5de7ceec
Pipeline Getting Started Docs 2017-04-04 21:47:19 -07:00
Oleg Nenashev 55711e18bb
Changelog: noting #2826, #2445, #2816 towards 2.53 2017-04-04 21:47:19 -07:00
Julien Pivotto ff19dea1be
Fix 2.46.1 release date
Signed-off-by: Julien Pivotto <roidelapluie@inuits.eu>
2017-04-04 21:47:19 -07:00
Daniel Beck f0de89e172
Add upgrade guide (what little of relevance there is) 2017-04-04 21:47:19 -07:00
Daniel Beck d8f7733559
Add more notable changes, fix release date 2017-04-04 21:47:19 -07:00
Daniel Beck be7043cbd7
These changes were already backported to 2.32.x 2017-04-04 21:47:19 -07:00
Oliver Gondža 12f2d88f53
Reflect review comments 2017-04-04 21:47:19 -07:00
Oliver Gondža 4411d6a3c4
Add notable changes 2017-04-04 21:47:19 -07:00
Oliver Gondža 8bbd564f81
Update lts.yml 2017-04-04 21:47:19 -07:00
Oliver Gondža 6b9f0c3e38
Changelog and upgrade guide for 2.46.1 2017-04-04 21:47:19 -07:00
R. Tyler Croy 02003bcd8d Merge pull request #794 from rtyler/footer-grid
Tidy up the footer to use the bootstrap grid system a bit better
2017-04-04 20:06:52 -07:00
R. Tyler Croy adf628876b
Tidy up the footer to use the bootstrap grid system a bit better 2017-04-04 19:53:35 -07:00
R. Tyler Croy 4a69711d52 Merge pull request #790 from rtyler/tightened-home-page
Tightened home page
2017-04-04 13:55:52 -07:00
R. Tyler Croy 5a1fe45bcc Merge pull request #791 from i386/topic/bo-one-oh-blog
A Blue Ocean blog
2017-04-04 13:55:46 -07:00
James Dumay c44c124f9b A Blue Ocean blog 2017-04-04 07:38:02 +10:00
James Dumay 881f9577f2 A Blue Ocean blog 2017-04-04 07:36:17 +10:00
R. Tyler Croy e8a0124887 Merge pull request #789 from i386/topic/blueocean-press-page
press page for blueocean
2017-04-03 11:17:10 -07:00
R. Tyler Croy 2cf3e3d7d3
Tighten up the events horizontal spread on the home page 2017-04-03 11:14:13 -07:00
R. Tyler Croy 5410cbb170
Remove redundant downloadbanner partial and tighten the logo centering 2017-04-03 11:10:01 -07:00
James Dumay 5070587a3e press page for blueocean 2017-04-03 16:37:25 +10:00
Liam Newman 86fd572093 Merge pull request #786 from rtyler/blue-ocean-landing-page
Correct minor CSS issues
2017-03-31 16:40:03 -07:00
R. Tyler Croy ca6b8e416d
Refactor the /events page layout to use the bootstrap grid system
This makes things flow a bit cleaner than previously
2017-03-31 09:26:02 -07:00
R. Tyler Croy 5a16986a6e
Import ionicons on all pages so the navbar becomes a hamburger on smaller resolutions 2017-03-31 09:20:26 -07:00
R. Tyler Croy 66884be9f9
Separate out the footer CSS so it can be re-used properly on the Blue Ocean page
This makes the footer fairly consistent between the two sets of styles
2017-03-31 08:57:58 -07:00
Liam Newman 17144746bc Merge pull request #785 from rtyler/blue-ocean-landing-page
Revamped Blue Ocean landing page and updated site styles
2017-03-30 17:44:03 -07:00
R. Tyler Croy a69667e293
Use the logo partial in the blueocean landing page
this commit also fixes some unnecessary absolute URLs
2017-03-30 17:14:20 -07:00
R. Tyler Croy 6067a0c227
Update some minor links on the blueocean page to point to the handbook for now 2017-03-30 14:43:28 -07:00
R. Tyler Croy c223ecc52b
Generate some relative links for projects and sponsor images on github pages 2017-03-30 14:39:16 -07:00
R. Tyler Croy b79c103548
Relative image to make github pages happy 2017-03-30 14:35:50 -07:00
R. Tyler Croy b8a8c19025
Flesh out the /download page with the list to the packages 2017-03-30 14:29:22 -07:00
R. Tyler Croy c3bf8c5e9a
Fix rendering issues with the /participate page
This was more or less invalid bootstrap before, columns must be in containers
2017-03-30 13:55:00 -07:00
R. Tyler Croy 2c975d71a9
Fix some minor rendering issues with the Blue Ocean jumbotron 2017-03-30 13:53:24 -07:00
R. Tyler Croy 2a2523c6a7
Rework many of the styles after the bootstrap version upgrade 2017-03-30 13:53:24 -07:00
R. Tyler Croy 9007af618b
Add an SVG-based logo in a partial for later re-use 2017-03-30 13:53:24 -07:00
R. Tyler Croy ec81183688
:Revert "Remove blogs partial which is only referenced once"
This reverts commit 48e4886bdbe2086282b28435b0a460d79ffb4159.
2017-03-30 13:53:24 -07:00
R. Tyler Croy 525c2f464f
Reintroduce the footer thing JavaScriptz 2017-03-30 13:53:24 -07:00
R. Tyler Croy f09021fa0b
Remove the sponsors partial which was only referenced once 2017-03-30 13:53:24 -07:00
R. Tyler Croy 80a4b326ff
Remove sidebar which was only referenced once 2017-03-30 13:53:24 -07:00
R. Tyler Croy c086ad7342
Remove the downloadlist partial which is noly referenced once 2017-03-30 13:53:24 -07:00
R. Tyler Croy 0d9da2885b
Remove blogs partial which is only referenced once 2017-03-30 13:53:24 -07:00
R. Tyler Croy d3c8f4b8bf
Remove a number of partials which are never referenced anywhere 2017-03-30 13:53:24 -07:00
R. Tyler Croy 5cdeb21415
Remove featurelist partial which is only ever referenced once 2017-03-30 13:53:24 -07:00
R. Tyler Croy 5506f46718
Remove the tweetbutton partial since it's only referenced once 2017-03-30 13:53:24 -07:00
R. Tyler Croy 53cbabcef4
Incorporate blueocean landing page framing up into the main frame layout
Thanks to @brody's work we have some nice looking upgrades here
2017-03-30 13:53:23 -07:00
R. Tyler Croy c33bd391f5
Import ionicons and add the necessary gradle chicanery to move them around
The ionicons css has relative references to the fonts bundled with the bower
package so the prepareFonts task makes sure they files get moved around properly
2017-03-30 13:53:23 -07:00
R. Tyler Croy 4c497356c6
Remove unnecessary scriptlinks partial
I only found it referenced in once spot
2017-03-30 13:53:23 -07:00
R. Tyler Croy e808bee73e
Starting to import @brody's Blue Ocean landing page work 2017-03-30 13:53:13 -07:00
R. Tyler Croy 9e673b82d1 Merge pull request #783 from rtyler/blueocean-jumbotron
Blueocean jumbotron
2017-03-30 13:28:48 -07:00
James Dumay bf6bfb8799
return of the BO jumbo 2017-03-29 10:51:02 -07:00
R. Tyler Croy 321db5055a
Merge remote-tracking branch 'upstream/master' into feature/blue-ocean-launch 2017-03-29 10:50:55 -07:00
Liam Newman 2006413be1 Merge pull request #768 from bitwiseman/feature/blue-ocean/doc-placeholder
Create Blue Ocean chapter and move some existing content in
2017-03-23 17:29:13 -07:00
Liam Newman 2c65ba8fef Create Blue Ocean chapter and move some existing content in 2017-03-23 17:20:08 -07:00
86 changed files with 6265 additions and 1547 deletions

View File

@ -100,22 +100,12 @@ dependencies {
* versions of the site
*/
bower {
/* weird syntax is weird */
/* jQuery and jQuery UI are both used by the "legacy" download picker and
* can likely go away once the legacy site is sunsetted
*/
'jquery' ('1.11.3') {
'jquery' ('3.1.1') {
source 'dist/**'
}
'jquery-ui' ('1.11.4') {
source '**/*.js'
source 'themes/base/**' >> 'themes/base/'
}
/* needed for jenkins.io */
'bootstrap' ('4.0.0-alpha.2') {
'bootstrap' ('4.0.0-alpha.6') {
source 'dist/**'
}
@ -123,13 +113,18 @@ bower {
source 'dist/**'
}
'tether' ('1.1.1') {
'tether' ('1.4.0') {
source 'dist/**'
}
'anchor-js' ('3.2.2') {
source '**/*.js'
}
/* Introduced by the Blue Ocean landing page */
'ionicons' ('2.0.1') {
source '*'
}
}
task fetchExamples(type: Exec) {
@ -195,6 +190,29 @@ task prepareJavaScripts {
}
}
}
task prepareFonts {
group 'Site'
description 'Shuffle fonts around as necessary for CSS dependencies'
dependsOn prepareJavaScripts
doLast {
def fontsDir = file("${contentDir}/assets/bower/fonts")
fontsDir.mkdirs()
copy {
from "${projectDir}/src/assets"
include '**/*.eot', '**/*.woff', '**/*.svg', '**/*.ttf'
eachFile { FileCopyDetails copyDetails ->
/* Prune the relative path off so the files are just dumped at
* the top-level of fontsDir
*/
copyDetails.relativePath = new RelativePath(true, copyDetails.name)
}
into fontsDir
}
}
}
task prepareUserHandbook(type: JRubyExec) {
group 'Handbook'
description 'Generate the raw .adoc file for PDF generation'
@ -237,6 +255,7 @@ task assemble {
fetchExamples,
fetchReleaseHistory,
prepareJavaScripts,
prepareFonts,
compileContent,
printBooks
}

View File

@ -140,6 +140,110 @@
message: Do not fail to write a log file just because something deleted the parent directory.
issue: 16634
pull: 2738
- version: "2.46.1"
date: 2017-03-29
lts_predecessor: "2.32.3"
lts_baseline: "2.46"
lts_changes:
- type: rfe
message: >
Update the <a href="https://github.com/jenkinsci/sshd-module">SSHD module</a> from <code>1.7</code> to <code>1.8</code>.
The change disables obsolete Ciphers: AES128CBC, TripleDESCBC, and BlowfishCBC.
- type: rfe
message: Enable the JNLP4 agent protocol by default.
references:
- issue: 40886
- url: https://github.com/jenkinsci/remoting/blob/master/docs/protocols.md#jnlp4-connect
title: upgrade notes
- type: rfe
message: >
Allow defining agent ping interval and ping timeout in seconds. It can be done via the
<code>hudson.slaves.ChannelPinger.pingIntervalSeconds</code> and
<code>hudson.slaves.ChannelPinger.pingTimeoutSeconds</code>
system properties.
issue: 28245
- type: rfe
message: Print stack traces in logical order, with the most important part on top.
pull: 1485
- type: rfe
message: Reduce size of Jenkins WAR file by not storing identical copies of <code>remoting.jar</code>/<code>slave.jar</code> there.
pull: 2633
- type: rfe
message: Do not print warnings about undefined parameters when <code>hudson.model.ParametersAction.keepUndefinedParameters</code> property is set to <code>false</code>.
pull: 2687
- type: rfe
message: Increase the <code>JENKINS_HOME</code> disk space threshold from <code>1Gb</code> to <code>10Gb</code> left. The warning will be shown only if more than <code>90%</code> of the disk is utilized.
issue: 40749
- type: bug
message: Delete obsolete pinning UI.
issue: 34065
- type: bug
message: Use project-specific validation URL for SCM Trigger, so <code>H</code> is handled correctly in preview.
issue: 26977
- type: bug
message: Failure to serialize a single <code>Action</code> could cause an entire REST export response to fail. Upgraded to Stapler <code>1.250</code> with a fix.
issue: 40088
- type: bug
message: Add Usage Statistics section to the global configuration to make it easier to find.
issue: 32938
- type: bug
message: Allow <tt>groovy</tt> CLI command via SSH CLI.
issue: 41765
changes:
- type: bug
message: >
Prevent file descriptor leaks when Windows Service installer fails to read data from the service startup log.
issue: 42670
pull: 2793
- type: bug
message: >
Update Remoting from <code>3.5</code> to <code>3.7</code>
in order to prevent file descriptor leaks on agents in the case of multiple connection attempts.
references:
- url: https://github.com/jenkinsci/remoting/blob/master/CHANGELOG.md#37
title: full changelog
issue: 42371
pull: 2773
- type: bug
message: Exceptions during Jenkins cleanup step should not block restart.
issue: 42164
- type: bug
message: Cryptic error message when loading JnlpSlaveAgentProtocol4.
issue: 41987
- type: bug
message: >
Developer: Snapshot builds of plugins that had dependencies on other snapshot builds were not having their version numbers compared correctly.
issue: 41899
- type: bug
message: Do not attempt to find the next occurrence of an impossible date such as June 31st in validation of trigger schedules.
issue: 41864
pull: 2759
- type: bug
message: >
Remoting 3.5: Stability improvements.
references:
- issue: 41513
- issue: 41852
- type: bug
message: Remove invalid translations in Slovene
issue: 41756
pull: 2767
- type: rfe
message: >
Remoting 3.5: Add option to specify the remoting protocol to use on the client.
issue: 41730
- type: bug
message: Use of the remote API to create items in views (<tt>/view/…/createItem</tt>) didn't actually add items to views since Jenkins 2.22.
issue: 41128
pull: 2760
- type: bug
message: >
Remoting 3.5: Remoting clients now accept lowercase (HTTP 2) headers sent by reverse proxies.
issue: 40710
- type: bug
message: Windows service restart did not retain build queue.
issue: 32820
# DO NOT EDIT THIS FILE DIRECTLY
# ALL CHANGES MUST GO THROUGH PULL REQUESTS

View File

@ -264,7 +264,33 @@
message: >
Removed localizations with very low coverage: Albanian, Basque, Belarusian, Bengali, Esperanto, Galician, Georgian, Gujarati, Hindi, Icelandic, Indonesian, Irish, Kannada, Macedonian, Marathi, Mongolian, Occitan, Punjabi, Sinhala, Tamil, Telugu, Thai.
pull: 2813
- version: "2.53"
date: 2017-04-02
changes:
- type: major bug
issue: 42744
pull: 2826
message: >
Update to Windows Service Wrapper <tt>2.0.3</tt> and Windows Agent Installer <tt>1.8</tt> to prevent conversion of environment variables to lowercase in the agent executable, regression in Jenkins <tt>2.50</tt>.
references:
- url: https://github.com/kohsuke/winsw/blob/master/CHANGELOG.md#203
title: WinSW Changelog
- url: https://github.com/jenkinsci/windows-slave-installer-module/blob/master/CHANGELOG.md#18
title: Windows Agent Installer changelog
- type: rfe
message: >
GC Performance: Avoid using <code>FileInputStream</code> and <code>FileOutputStream</code> in the core codebase.
references:
- url: https://bugs.openjdk.java.net/browse/JDK-8080225
title: JDK-8080225
issue: 42934
pull: 2816
- type: rfe
issue: 34670
pull: 2445
message: >
Internal API:
Add support of a new full screen mode in <tt>layout.jelly</tt>.
# DO NOT EDIT THIS FILE DIRECTLY
# ALL CHANGES MUST GO THROUGH PULL REQUESTS

View File

@ -25,27 +25,28 @@ notitle: true
.container
.row.body
.section_nav.pagination-links
- if previous_chapter
%a.prev.page-link{:href => File.join('..', previous_chapter.key)}
⇐ #{previous_chapter.title}
%a.index.page-link{:href => '..'}
Index
.row
.col-md-4
.row
- if previous_chapter
%a.prev.doc-page-link{:href => File.join('..', previous_chapter.key)}
⇐ #{previous_chapter.title}
.col-md-4
.row
%a.index.doc-page-link{:href => '../'}
Index
.col-md-4
.row
- if next_chapter
- if next_is_section
%a.next.page-link{:href => next_chapter.key}
%a.next.doc-page-link{:href => next_chapter.key}
#{next_chapter.title} ⇒
- else
%a.next.page-link{:href => File.join('..', next_chapter.key)}
%a.next.doc-page-link{:href => File.join('..', next_chapter.key)}
#{next_chapter.title} ⇒
.container
.row.body
.section
%h1
= page.title
@ -64,18 +65,25 @@ notitle: true
= content
%hr/
.section_nav.pagination-links
- if previous_chapter
%a.prev.page-link{:href => File.join('..', previous_chapter.key)}
⇐ #{previous_chapter.title}
%a.index.page-link{:href => '..'}
Index
- if next_is_section
%a.next.page-link{:href => next_chapter.key}
#{next_chapter.title} ⇒
- elsif next_chapter
%a.next.page-link{:href => File.join('..', next_chapter.key)}
#{next_chapter.title} ⇒
.container
.row
.col-md-4
.row
- if previous_chapter
%a.prev.doc-page-link{:href => File.join('..', previous_chapter.key)}
⇐ #{previous_chapter.title}
.col-md-4
.row
%a.index.doc-page-link{:href => '../'}
Index
.col-md-4
.row
- if next_chapter
- if next_is_section
%a.next.doc-page-link{:href => next_chapter.key}
#{next_chapter.title} ⇒
- else
%a.next.doc-page-link{:href => File.join('..', next_chapter.key)}
#{next_chapter.title} ⇒

View File

@ -22,7 +22,7 @@ section: doc
})
.container
.row
.row.body
.col-lg-3
.sidebar-nav.tour
%h4

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
!!!
%html
%head
%title
@ -7,81 +7,75 @@
%meta{:'name' => 'description', :content => 'Jenkins is an open source automation server'}/
%link{:rel => 'shortcut icon', :href => '/sites/default/files/jenkins_favicon.ico', :type => 'image/x-icon'}/
= partial('scriptlinks.html.haml')
%meta{:charset => "utf-8"}/
%meta{:content => "width=device-width, initial-scale=1", :name => "viewport"}/
%meta{:content => "ie=edge", "http-equiv" => "x-ua-compatible"}/
%link{:href => "img/favicon.ico", :rel => "icon", :sizes => "32x32", :type => "img/png"}/
%link{:href => "img/favicon-32x32.png", :rel => "icon", :sizes => "32x32", :type => "image/png"}/
%link{:href => "img/favicon-16x16.png", :rel => "icon", :sizes => "16x16", :type => "image/png"}/
%link{:href => "img/apple-touch-icon-76x76.png", :rel => "apple-touch-icon", :sizes => "76x76"}/
%link{:href => "img/apple-touch-icon-120x120.png", :rel => "apple-touch-icon", :sizes => "120x120"}/
%link{:href => "img/apple-touch-icon-152x152.png", :rel => "apple-touch-icon", :sizes => "152x152"}/
%meta{:content => page.title, :name => "apple-mobile-web-app-title"}/
/ Twitter Card data
%meta{:content => "summary_large_image", :name => "twitter:card"}/
%meta{:content => "@JenkinsCI", :name => "twitter:site"}/
%meta{:content => page.title, :name => "twitter:title"}/
%meta{:content => "Jenkins Continuous Delivery for every team", :name => "twitter:description"}/
%meta{:content => "@JenkinsCI", :name => "twitter:creator"}/
/ Twitter Summary card images must be at least 120x120px
%meta{:content => "img/blueocean.gif", :name => "twitter:image"}/
%meta{:content => "img/blueocean.gif", :name => "twitter:image:src"}/
/ Open Graph data
%meta{:content => page.title, :property => "og:title"}/
%meta{:content => "article", :property => "og:type"}/
%meta{:content => page.output_path, :property => "og:url"}/
%meta{:content => "Jenkins Continuous Delivery for every team", :property => "og:description"}/
%meta{:content => page.title, :property => "og:site_name"}/
- unless page.opengraph.nil?
%meta{:content => page.opengraph[:image], :property => "og:image"}/
- if page.css
- for style in page.css
%link{:href => "#{site.base_url}#{style}", :rel => 'stylesheet', :media => 'screen'}/
- else
%link{:href => "#{site.base_url}/assets/bower/bootstrap/css/bootstrap.min.css",
:rel => 'stylesheet',
:media => 'screen'}/
%link{:href => "#{site.base_url}/assets/bower/tether/css/tether.min.css",
:rel => 'stylesheet',
:media => 'screen'}/
%link{:href => "#{site.base_url}/css/font-icons.css",
:rel => 'stylesheet',
:media => 'screen'}/
%link{:href => "#{site.base_url}/css/jenkins.css",
:rel => 'stylesheet',
:media => 'screen'}/
/ Non-obtrusive CSS styles
%link{:href => "#{site.base_url}/assets/bower/ionicons/ionicons.css",
:rel => 'stylesheet',
:media => 'screen'}/
%link{:href => "#{site.base_url}/css/footer.css",
:rel => 'stylesheet',
:media => 'screen'}/
%link{:href => "#{site.base_url}/css/font-awesome.min.css",
:rel => 'stylesheet',
:media => 'screen'}/
%body
= content
%script{:src => "#{site.base_url}/assets/bower/jquery/jquery.min.js"}
%script{:src => "#{site.base_url}/assets/bower/tether/js/tether.min.js"}
%script{:src => "#{site.base_url}/assets/bower/bootstrap/js/bootstrap.min.js"}
%footer#footer
.container
.row
.links.col-lg-8.col-md-12.col-sm-12
%ul.major-areas
%li.area.solo.col-md-3.col-sm-6.col-xs-6
.div-mar
%h5 Resources
%ul.resources
%li
%a{:href => '/events'}
Events
%li
%a{:href => '/doc'}
Documentation
%li
%a{:href => '/node'}
Blog
%li.area.multi.col-md-3.col-sm-6.col-xs-6
.div-mar
%h5 Solutions
%ul
- site.solutions.keys.sort.each do |key|
- link = "/solutions/#{key}"
%li
%a{:href => link}
= site.solutions[key].usecase
%li.area.multi.col-md-3.col-sm-6.col-xs-6
.div-mar
%h5 Project
%ul.project
%li
%a{:href => 'https://issues.jenkins-ci.org'}
Issue tracker
%li
%a{:href => 'https://wiki.jenkins-ci.org'}
Wiki
%li
%a{:href => 'https://github.com/jenkinsci'}
GitHub
%li
%a{:href => 'https://ci.jenkins.io'}
Jenkins on Jenkins
%li.area.multi.col-md-3.col-sm-6.col-xs-6
.div-mar
%h5 Community
%ul.community
%li
%a{:href => 'https://groups.google.com/forum/#!forum/jenkinsci-users'}
Users mailing list
%li
%a{:href => 'https://groups.google.com/forum/#!forum/jenkinsci-dev'}
Developers mailing list
%li
%a{:href => 'https://twitter.com/jenkinsci'}
Twitter
%li
%a{:href => 'https://reddit.com/r/jenkinsci'}
Reddit
.col-lg-4.col-md-12.col-sm-12.col-xs-12.footer-left
.col-md-4
- unless page.uneditable
%p.box
%a{:href => "https://github.com/jenkins-infra/jenkins.io/edit/master/content/#{page.relative_source_path}",
@ -99,6 +93,83 @@
%img{:src => 'https://licensebuttons.net/l/by-sa/4.0/88x31.png'}/
%p
The content driving this site is licensed under the Creative Commons Attribution-ShareAlike 4.0 license.
The content driving this site is licensed under the Creative
Commons Attribution-ShareAlike 4.0 license.
= partial('footer.html.haml')
.links.col-md-8
.container
.row
.area.col-md-3
.div-mar
%h5 Resources
%ul.resources
%li
%a{:href => '/events'}
Events
%li
%a{:href => '/doc'}
Documentation
%li
%a{:href => '/node'}
Blog
.area.col-md-3
.div-mar
%h5 Solutions
%ul
- site.solutions.keys.sort.each do |key|
- link = "/solutions/#{key}"
%li
%a{:href => link}
= site.solutions[key].usecase
.area.col-md-3
.div-mar
%h5 Project
%ul.project
%li
%a{:href => 'https://issues.jenkins-ci.org'}
Issue tracker
%li
%a{:href => 'https://wiki.jenkins-ci.org'}
Wiki
%li
%a{:href => 'https://github.com/jenkinsci'}
GitHub
%li
%a{:href => 'https://ci.jenkins.io'}
Jenkins on Jenkins
.area.col-md-3
.div-mar
%h5 Community
%ul.community
%li
%a{:href => 'https://groups.google.com/forum/#!forum/jenkinsci-users'}
Users mailing list
%li
%a{:href => 'https://groups.google.com/forum/#!forum/jenkinsci-dev'}
Developers mailing list
%li
%a{:href => 'https://twitter.com/jenkinsci'}
Twitter
%li
%a{:href => 'https://reddit.com/r/jenkinsci'}
Reddit
= google_analytics_universal
:javascript
!function(d,s,id) {
var js, fjs=d.getElementsByTagName(s)[0];
if (!d.getElementById(id)) {
js = d.createElement(s);
js.id=id;
js.src="//platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js,fjs);
}
}(document,"script","twitter-wjs");

View File

@ -19,7 +19,9 @@ layout: default
%a{:href => page.url, :title => page.title}
= page.title
= partial('tweetbutton.html.haml')
%div{:style => 'float: right; clear: all;'}
%a.twitter-share-button{:href => 'https://twitter.com/share', :'data-lang' => 'en'}
Tweet
- if page.date
%span.submitted

View File

@ -24,7 +24,7 @@ layout: default
})
.container
.row
.row.body
.col-lg-9
%h1
= page.title

View File

@ -32,56 +32,59 @@ notitle: true
next_section = site.handbook.chapters[index + 1]
end
.container
.row
.col-md-4
.row
- unless prev_section.nil?
%a.prev.doc-page-link{:href => File.join('..', prev_section.key)}
⇐ #{prev_section.title}
.col-md-4
.row
%a.up.doc-page-link{:href => '../'}
⇑ #{chapter.title}
.row
%a.index.doc-page-link{:href => '../../'}
Index
.col-md-4
.row
- unless next_section.nil?
- if next_is_chapter
%a.next.doc-page-link{:href => File.join('../../', next_section.key)}
#{next_section.title} ⇒
- else
%a.next.doc-page-link{:href => File.join('..', next_section.key)}
#{next_section.title} ⇒
.container
.row.body
.section_nav.pagination-links
- unless prev_section.nil?
%a.prev.page-link{:href => File.join('..', prev_section.key)}
⇐ #{prev_section.title}
%a.up.page-link{:href => '../'}
⇑ #{chapter.title}
- unless next_section.nil?
- if next_is_chapter
%a.next.page-link{:href => File.join('../../', next_section.key)}
#{next_section.title} ⇒
- else
%a.next.page-link{:href => File.join('..', next_section.key)}
#{next_section.title} ⇒
%br/
%a.index.page-link{:href => '../../'}
Index
.section
%h1
= page.title
= content
%hr/
.section_nav.pagination-links
- unless prev_section.nil?
%a.prev.page-link{:href => File.join('..', prev_section.key)}
⇐ #{prev_section.title}
%a.up.page-link{:href => '../'}
⇑ #{chapter.title}
- unless next_section.nil?
- if next_is_chapter
%a.next.page-link{:href => File.join('../../', next_section.key)}
#{next_section.title} ⇒
- else
%a.next.page-link{:href => File.join('..', next_section.key)}
#{next_section.title} ⇒
%br/
%a.index.page-link{:href => '../../'}
Index
.container
.row
.col-md-4
.row
- unless prev_section.nil?
%a.prev.doc-page-link{:href => File.join('..', prev_section.key)}
⇐ #{prev_section.title}
.col-md-4
.row
%a.up.doc-page-link{:href => '../'}
⇑ #{chapter.title}
.row
%a.index.doc-page-link{:href => '../../'}
Index
.col-md-4
.row
- unless next_section.nil?
- if next_is_chapter
%a.next.doc-page-link{:href => File.join('../../', next_section.key)}
#{next_section.title} ⇒
- else
%a.next.doc-page-link{:href => File.join('..', next_section.key)}
#{next_section.title} ⇒

View File

@ -1,29 +0,0 @@
.bloggers
%h4
Recent authors
%ul.authors
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head
%li.auth
%a.icon-jenkins-head

View File

@ -1,58 +0,0 @@
:javascript
$(function () {
function doPopovers(){
var $popovers = $('[data-toggle="popover"]');
var $popLayer = $('#popover-layer');
if ($popovers.length > 0){
if($popLayer.length < 1)
$popLayer = $('<div/>').appendTo('body').addClass('popover-layer').attr('id','popover-layer');
$('[data-toggle="popover"]').popover({
container: '#popover-layer',
template:'<div class="popover download-options" role="tooltip"><div class="popover-arrow"></div><div class="popover-content"></div></div>',
placement:'top',
content:function(){
return $(this).next().html();
},
html:true
});
}
}
doPopovers();
})
%div#ji-home-carousel.carousel.slide{'data-ride' => 'carousel',:class => page.topic}
#ji-download
.btn-group
%button.btn-lg.btn.btn-primary{'data-toggle'=>"popover", 'aria-haspopup'=>"true", 'aria-expanded'=>"false"}
Download Jenkins
= partial('downloadlist.html.haml')
.br
.carousel-caption.secondary
Get #{site.jenkins.stable} LTS .war or the latest #{site.jenkins.latest} weekly
%ol.carousel-indicators.hidden
%li.active{'data-target' => '#ji-home-carousel', 'data-slide-to' => 0}
%li{'data-target' => '#ji-home-carousel', 'data-slide-to' => 1}
%li{'data-target' => '#ji-home-carousel', 'data-slide-to' => 2}
%li{'data-target' => '#ji-home-carousel', 'data-slide-to' => 3}
%li{'data-target' => '#ji-home-carousel', 'data-slide-to' => 4}
%div.carousel-inner{:role=>"listbox"}
%div.carousel-item.active
%video{:autoplay => ""}
\//EDIT: loop="true" and autoplay="autoplay" are deprecated
%source{:src => "/images/grow-city-sketch.mp4", :type => "video/mp4"}
Your browser does not support the video tag.
.mask
%div.carousel-caption.primary
%img.jenkins{:src=>"/images/226px-Jenkins_logo.svg.png"}
%h1.page-title
Jenkins
%span.in-tag CD|CI
%h5.sub-heading Build great things at any scale
%p The leading open source automation server, Jenkins, provides hundreds of plugins to support building, testing, deploying and automating any project.
%a.left.carousel-control{:href=>"#ji-home-carousel",:role=>"button",'data-slide'=>"prev"}
%span.icon-prev{"aria-hidden"=>"true"}
%span.sr-only Previous
%a.right.carousel-control{:href=>"#ji-home-carousel",:role=>"button",'data-slide'=>"next"}
%span.icon-next{"aria-hidden"=>"true"}
%span.sr-only Next

View File

@ -1,35 +0,0 @@
%div#ji-home-carousel.carousel.slide{'data-ride' => 'carousel',:class => page.topic}
#ji-download
%button#download-banner-btn.btn-lg.btn.btn-primary{'data-toggle'=>"popover", 'aria-haspopup'=>"true", 'aria-expanded'=>"false"}
Download Jenkins
= partial('downloadlist.html.haml')
.br
.carousel-caption.secondary
Get #{site.jenkins.stable} LTS .war or the latest #{site.jenkins.latest} weekly release
%ol.carousel-indicators.hidden
%li.active{'data-target' => '#ji-home-carousel', 'data-slide-to' => 0}
%li{'data-target' => '#ji-home-carousel', 'data-slide-to' => 1}
%li{'data-target' => '#ji-home-carousel', 'data-slide-to' => 2}
%li{'data-target' => '#ji-home-carousel', 'data-slide-to' => 3}
%li{'data-target' => '#ji-home-carousel', 'data-slide-to' => 4}
%div.carousel-inner{:role=>"listbox"}
%div.carousel-item.active
%div.carousel-caption.primary
%img.jenkins{:src=>"/images/226px-Jenkins_logo.svg.png"}
%h1#main-page-title.page-title
Jenkins
%span.in-tag
Automation Server
%h5.sub-heading
Build great things at any scale
%p
The leading open source automation server, Jenkins provides hundreds
of plugins to support building, deploying and automating any project.
%a.left.carousel-control{:href=>"#ji-home-carousel",:role=>"button",'data-slide'=>"prev"}
%span.icon-prev{"aria-hidden"=>"true"}
%span.sr-only Previous
%a.right.carousel-control{:href=>"#ji-home-carousel",:role=>"button",'data-slide'=>"next"}
%span.icon-next{"aria-hidden"=>"true"}
%span.sr-only Next

View File

@ -1,120 +0,0 @@
.dropdown-menu
.row
.col-md-6.text-xs-center
%h3
LTS Release
%p
LTS (Long-Term Support) releases are chosen every 12 weeks from the
stream of regular releases as the stable release for that time period.
%a{'href' => 'https://wiki.jenkins-ci.org/display/JENKINS/LTS+Release+Line'}
Learn more…
.col-md-6.text-xs-center
%h3
Weekly Release
%p
A new release is produced weekly to deliver bug fixes and features to
users and plugin developers.
.row
.col-md-6.text-xs-center
.btn-group
%a.btn.btn-primary.chromeOnly{:href=>'http://mirrors.jenkins.io/war-stable/latest/jenkins.war'}
%i.icon-box-add
= site.jenkins.stable
\.war
%button.btn.btn-primary.dropdown-toggle{'data-toggle' => 'dropdown', 'data-trigger' => 'hover', 'aria-haspopup'=>"true", 'aria-expanded'=>"false"}
.dropdown-menu
%a.dropdown-item{:href=>'https://registry.hub.docker.com/_/jenkins/'}
%span.icon
%span.title
Docker
%a.dropdown-item{:href => 'http://www.freshports.org/devel/jenkins-lts'}
%span.icon
%span.title
FreeBSD
%a.dropdown-item{:href=>'https://packages.gentoo.org/packages/dev-util/jenkins-bin'}
%span.icon
%span.title
Gentoo
%a.dropdown-item{:href=>'/content/thank-you-downloading-os-x-installer#stable'}
%span.icon
%span.title
Mac OS X
%a.dropdown-item{:href=>'http://openports.se/devel/jenkins/stable'}
%span.icon
%span.title
OpenBSD
%a.dropdown-item{:href=>'https://pkg.jenkins.io/opensuse-stable/'}
%span.icon
%span.title
openSUSE
%a.dropdown-item{:href=>'https://pkg.jenkins.io/redhat-stable/'}
%span.icon
%span.title
Red Hat/Fedora/CentOS
%a.dropdown-item{:href=>'https://pkg.jenkins.io/debian-stable/'}
%span.icon
%span.title
Ubuntu/Debian
%a.dropdown-item{:href=>'/content/thank-you-downloading-windows-installer#stable'}
%span.icon
%span.title
Windows
%p.details
%a.item{:href=>'/changelog-stable'} Changelog
|
%a.item{:href=>'/doc/upgrade-guide'} Upgrade Guide
|
%a.item{:href=>'http://mirrors.jenkins.io/war-stable/'} Past Releases
.col-md-6.text-xs-center
.btn-group
%a.btn.btn-primary.chromeOnly{:href=>'http://mirrors.jenkins.io/war/latest/jenkins.war'}
%i.icon-box-add
= site.jenkins.latest
\.war
%button.btn.btn-primary.dropdown-toggle{'data-toggle' => 'dropdown', 'data-trigger' => 'hover', 'aria-haspopup'=>"true", 'aria-expanded'=>"false"}
.dropdown-menu
%a.dropdown-item{:href=>'https://registry.hub.docker.com/u/jenkinsci/jenkins/'}
%span.icon
%span.title
Docker
%a.dropdown-item{:href=>'http://www.freshports.org/devel/jenkins'}
%span.icon
%span.title
FreeBSD
%a.dropdown-item{:href=>'https://packages.gentoo.org/packages/dev-util/jenkins-bin'}
%span.icon
%span.title
Gentoo
%a.dropdown-item{:href=>'/content/thank-you-downloading-os-x-installer'}
%span.icon
%span.title
Mac OS X
%a.dropdown-item{:href=>'http://openports.se/devel/jenkins/devel'}
%span.icon
%span.title
OpenBSD
%a.dropdown-item{:href=>'https://pkg.jenkins.io/opensuse/'}
%span.icon
%span.title
openSUSE
%a.dropdown-item{:href=>'https://pkg.jenkins.io/redhat/'}
%span.icon
%span.title
Red Hat/Fedora/CentOS
%a.dropdown-item{:href=>'https://pkg.jenkins.io/debian/'}
%span.icon
%span.title
Ubuntu/Debian
%a.dropdown-item{:href=>'/content/thank-you-downloading-windows-installer'}
%span.icon
%span.title
Windows
%p.details
%a.item{:href=>'/changelog'} Changelog
|
%a.item{:href=>'http://mirrors.jenkins.io/war/'} Past Releases

View File

@ -1,60 +0,0 @@
#feature-list-segment.segment
.container
.row.chunks.features.uniform-height
.col-md-6.col-lg-4
.box.cicd
%i.icon-arrow-shuffle
%h5
Continuous Integration and Continuous Delivery
%p
As an extensible automation server, Jenkins can be used as a simple
CI server or turned into the continuous delivery hub for any project.
.col-md-6.col-lg-4
.box.install
%i.icon-download
%h5
Easy installation
%p
Jenkins is a self-contained Java-based program, ready to run
out-of-the-box, with packages for Windows, Mac OS X and other
Unix-like operating systems.
.col-md-6.col-lg-4
.box.settings
%i.icon-settings
%h5
Easy configuration
%p
Jenkins can be easily set up and configured via its web interface,
which includes on-the-fly error checks and built-in help.
.col-md-6.col-lg-4
.box.ecosystem
%i.icon-plug
%h5
Plugins
%p
With hundreds of plugins in the Update Center, Jenkins integrates
with practically every tool in the continuous integration and
continuous delivery toolchain.
.col-md-6.col-lg-4
.box.extend
%i.icon-puzzle-piece
%h5
Extensible
%p
Jenkins can be extended via its plugin architecture, providing
nearly infinite possibilities for what Jenkins can do.
.col-md-6.col-lg-4
.box.distributed
%i.icon-uniE602
%h5
Distributed
%p
Jenkins can easily distribute work across multiple machines,
helping drive builds, tests and deployments across multiple
platforms faster.

View File

@ -1,12 +0,0 @@
= google_analytics_universal
:javascript
!function(d,s,id) {
var js, fjs=d.getElementsByTagName(s)[0];
if (!d.getElementById(id)) {
js = d.createElement(s);
js.id=id;
js.src="//platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js,fjs);
}
}(document,"script","twitter-wjs");

View File

@ -1,9 +0,0 @@
%div.jumbotron.jumbotron-fluid.intro{:class=>page.className}
.container.center
.center.col-md-6
%h2 What is Jenkins?
%p
In a nutshell, Jenkins is the leading open source automation server. Built with Java, it provides
%strong
hundreds
of plugins to support building, testing, deploying and automation virtually any project

File diff suppressed because one or more lines are too long

View File

@ -1,27 +0,0 @@
%ol.jumbotron.getting-started.step-by-step
.brick-tops.bottom
%h3.header
= page.title
- page.steps.each_index do |index|
- step = page.steps[index]
- icon = step.iconclass
%li.card.step
%a.card-block{'data-toggle' => 'popover',
'data-container' => '#ji-hover-layer',
'data-placement' => 'top',
'data-trigger' => 'hover focus',
'data-title' => step.title,
'data-content' => step.long,
'href' => step.href}
%h4.card-title
.tag
.num
- if step.iconclass
%i(class=icon)
%h5.title
= step.title
%p.short
= step.short

View File

@ -17,7 +17,7 @@
.jumbotron.jumbotron-fluid.featured{:class => "featured_#{jumbotron_id}"}
.container
.rog
.row
.col-md-5
%a{:href => page.href}
%h2

View File

@ -1,16 +0,0 @@
.jumbotron.quote-row
.row
.col-md-1
.col-md-4
.card.important
.card-block
%blockquote.blockquote
%p Docker is an open-source project that automates the deployment of applications inside software containers, by providing an additional layer of abstraction and automation of operating-system-level virtualization on Linux. (courtesy Wikipedia)
%footer
%cite{:title=>"Source Title"}Wikipedia
.col-md-6
%p For Jenkins users, this offers a means of isolating jobs from one another. Quickly clean a job's workspace or even dynamically deploy or schedule jobs with Docker containers to increase resource utilization and efficiency.
%p Lorem ipsum dolor sit amet, et quas exerci tincidunt nec, et mea aeque essent everti, cibo honestatis ad pri. Nec zril iudico luptatum ne, ullamcorper definitiones definitionem an ius. Ius dicunt epicuri at, no aeque mundi maiestatis eum, mundi ignota eloquentiam mei ea. Vis liber intellegebat ut, alia invidunt adipiscing at pri, ei has tritani volumus. Sed summo dicant et, maiorum alienum at vis.
.col-md-1

View File

@ -1,24 +0,0 @@
%link{:href => "#{site.base_url}/css/font-awesome.min.css",
:rel => 'stylesheet',
:media => 'screen'}/
%link{:href => "#{site.base_url}/assets/bower/bootstrap/css/bootstrap.min.css",
:rel => 'stylesheet',
:media => 'screen'}/
%link{:href => "#{site.base_url}/assets/bower/ekko-lightbox/ekko-lightbox.min.css",
:rel => 'stylesheet',
:media => 'screen'}/
%link{:href => "#{site.base_url}/assets/bower/tether/css/tether.min.css",
:rel => 'stylesheet',
:media => 'screen'}/
%link{:href => "#{site.base_url}/css/font-icons.css", :rel => 'stylesheet', :media => 'screen'}/
%link{:href => "#{site.base_url}/css/jenkins.css", :rel => 'stylesheet', :media => 'screen'}/
%script{:src => "#{site.base_url}/assets/bower/jquery/jquery.min.js"}
%script{:src => "#{site.base_url}/assets/bower/tether/js/tether.min.js"}
%script{:src => "#{site.base_url}/assets/bower/bootstrap/js/bootstrap.min.js"}
%script{:src => "#{site.base_url}/assets/bower/ekko-lightbox/ekko-lightbox.min.js"}
%script{:src => "#{site.base_url}/assets/bower/anchor-js/anchor.min.js"}

View File

@ -1,26 +0,0 @@
- if legacy?
%div{:id => 'block-block-5', :class => 'block block-block even'}
%h3
What is Jenkins?
%div.content
%p
In a nutshell, Jenkins is the leading open source automation server.
Built with Java, it provides
%strong
hundreds
of plugins to support building, testing, deploying and automation
for virtually any project
= partial('legacy/download.html.haml')
= partial('legacy/book.html.haml')
= partial('legacy/resources.html.haml')
- else
%div.content
= partial('events.html.haml')
- if page.blogrollup
= partial('blogrollup.html.haml')

View File

@ -1,53 +0,0 @@
:ruby
# Images should all be between 300 and 350 pixels wide, and no more than 180px tall
sponsors = [
['microsoft.png',
'Microsoft Azure',
'https://www.azure.com'],
['cloudbees.png',
'CloudBees, Inc.',
'https://cloudbees.com'],
['osuosl.png',
'Oregon State University Open Source Lab',
'https://osuosl.org'],
['rackspace.png',
'Rackspace, Inc.',
'https://rackspace.com'],
['redhat.png',
'RedHat, Inc.',
'https://redhat.com'],
]
supporters = [['Atlassian', 'https://atlassian.com'],
['Datadog', 'https://www.datadoghq.com'],
['JFrog', 'https://jfrog.com'],
['Mac Cloud', 'http://maccloud.me/'],
['PagerDuty', 'https://pagerduty.com'],
['XMission', 'https://xmission.com'],
]
#sponsorsblock.jumbotron
.sponsors
%p
%strong
We thank the following organizations for their major commitments to
support the Jenkins project.
%ul
- sponsors.each do |logo, name, url|
%li
%a{:href => url, :target => '_blank'}
%img{:alt => name, :title => name, :src => "/images/sponsors/#{logo}"}/
.supporters
%p
%strong
We thank the following organizations for their support of the Jenkins
project through free and/or open source licensing programs.
%ul
- supporters.each do |name, url|
%li
%a{:href => url, :target => '_blank'}
= name

View File

@ -1,126 +1,77 @@
:javascript
$(function () {
$(document).delegate('*[data-toggle="lightbox"]', 'click', function(event) {
event.preventDefault();
$(this).ekkoLightbox();
});
})
:javascript
$(function () {
function doPopovers(buttonContainer, placement, extraClass){
var $popovers = $(buttonContainer + ' [data-toggle="popover"]');
var $popLayer = $('#popover-layer');
if ($popovers.length > 0){
$('body').click(function(e){
var $target = $(e.target);
console.log('toggle?');
if($target.closest($popovers).length === 1){
console.log($target);
$popovers.popover('show');
}
else if($target.closest('.popover').length === 0 )
$popovers.popover('hide');
});
if($popLayer.length < 1)
$popLayer = $('<div/>').appendTo('body').addClass('popover-layer').attr('id','popover-layer');
$popovers.popover({
container: '#popover-layer',
trigger:'manual',
template:'<div class="popover download-options ' + extraClass + '" role="tooltip"><div class="popover-arrow"></div><div class="popover-content"></div></div>',
placement:placement,
content:function(){
return $(this).next().html();
},
html:true
});
}
}
doPopovers('#ji-download', 'top', 'download-popup-main');
doPopovers('#download-menu', 'bottom', 'download-popup-menu');
})
#ji-hover-layer
.ji-toolbar-offset
.fixed.top
%nav#ji-toolbar.navbar.navbar-dark.bg-inverse
%a#home-logo.fixed.navbar-brand{:href => site.base_url}
%nav#ji-toolbar.navbar.navbar-toggleable-md.navbar-inverse.top.bg-inverse
.container
%button.navbar-toggler.navbar-toggler-rght.hidden-lg-up.float-right{"data-target" => "#CollapsingNavbar", "data-toggle" => "collapse", :type => "button"}
%i.ion-navicon
%a.navbar-brand{:href => site.base_url}
= site.base_title
%ul.nav.navbar-nav
%li.nav-item.fixed
#download-menu.btn-group
%a.btn.btn-primary.dropdown-toggle{'data-toggle'=>"popover", 'data-offset' => '10 -240px', 'data-placement'=>'bottom', 'aria-haspopup'=>"true", 'aria-expanded'=>"false"}
Downloads
= partial('downloadlist.html.haml')
%li.nav-item{:class => active_link?('blog')}
%a.nav-link{:href => expand_link('node')}
Blog
%li.nav-item{:class => active_link?('doc')}
%a.nav-link{:href => expand_link('doc')}
Documentation
%li.nav-item{:class => active_link?('plugins')}
%a.nav-link{:href => 'https://plugins.jenkins.io/'}
Plugins
- # Can't use active_link? here because our section is going to be the actual solution page itself
- # but we still want to highlight the active link on the Use-cases dropdown
%li.nav-item.dropdown{:class => ('active' if (page.section && site.solutions.keys.include?(page.section.to_sym)))}
%a.nav-link.dropdown-toggle{'data-toggle' => 'dropdown',
:href=> "#", :role=>"button", 'aria-haspopup'=>"true", 'aria-expanded'=>"false"}
Use-cases
%div.dropdown-menu
- site.solutions.keys.sort.each do |key|
- link = expand_link("solutions/#{key}")
%a.dropdown-item.feature{:href => link, :class => active_link?(key.to_s)}
= site.solutions[key].usecase
%li.nav-item{:class => active_link?('participate')}
%a.nav-link{:href => expand_link("participate")}
Participate
%li.nav-item.dropdown{:class => ('active' if (page.section == 'projects'))}
%a.nav-link.dropdown-toggle{'data-toggle' => 'dropdown',
:href=> "/projects", :role=>"button", 'aria-haspopup'=>"true", 'aria-expanded'=>"false"}
Sub-projects
%div.dropdown-menu
%a.dropdown-item.feature{:href => expand_link('projects/')}
Overview
- site.pages.map do |page|
- next unless page.url.match(/\/projects\/(\w+)\/$/)
%a.dropdown-item.feature{:href => page.url}
= page.title
%li.nav-item.dropdown
%a.nav-link.dropdown-toggle{'data-toggle' => 'dropdown',
:href=> '#', :role=>"button", 'aria-haspopup'=>"true", 'aria-expanded'=>"false"}
Resources
%div.dropdown-menu
%a.dropdown-item.feature{:href => 'https://accounts.jenkins.io/', :title => 'Create/manage your account for accessing wiki, issue tracker, etc'}
Account Management
%a.dropdown-item{:href => expand_link("chat"), :title => "Chat with the rest of the Jenkins community on IRC"}
Chat
%a.dropdown-item.feature{:href => 'https://issues.jenkins-ci.org/'}
Issue Tracker
%a.dropdown-item{:href => expand_link("mailing-lists"), :title => "Browse Jenkins mailing list archives and/or subscribe to lists"}
Mailing Lists
%a.dropdown-item.feature{:href => 'https://wiki.jenkins-ci.org/'}
Wiki
%li.nav-item{:class => active_link?('security')}
%a.nav-link{:href => expand_link('security')}
Security
%li.nav-item{:class => active_link?('press')}
%a.nav-link{:href => expand_link('press')}
Press
%li.nav-item{:class => active_link?('conduct')}
%a.nav-link{:href => expand_link('project/conduct')}
Conduct
#CollapsingNavbar.collapse.navbar-collapse
%ul.nav.navbar-nav.ml-auto
%li.nav-item{:class => active_link?('blog')}
%a.nav-link{:href => expand_link('node')}
Blog
#ji-top-peg
%a#ji-fork-tag{:href => 'https://github.com/jenkinsci'}
%img{:style => 'position: absolute; top: 0; right: 0; border: 0;',
:src => 'https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png',
:alt => 'Fork us on GitHub'}/
%li.nav-item{:class => active_link?('doc')}
%a.nav-link{:href => expand_link('doc')}
Documentation
%li.nav-item{:class => active_link?('plugins')}
%a.nav-link{:href => 'https://plugins.jenkins.io/'}
Plugins
%li.nav-item.dropdown
.nav-link.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :role => "button"}
Use-cases
.dropdown-menu
- site.solutions.keys.sort.each do |key|
- link = expand_link("solutions/#{key}")
%a.dropdown-item.feature{:href => link, :class => active_link?(key.to_s)}
= site.solutions[key].usecase
%li.nav-item{:class => active_link?('participate')}
%a.nav-link{:href => expand_link("participate")}
Participate
%li.dropdown.nav-item
.nav-link.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :role => "button"} Sub-projects
.dropdown-menu
%a.dropdown-item.feature{:href => expand_link('projects/')}
Overview
- site.pages.map do |page|
- next unless page.url.match(/\/projects\/(\w+)\/$/)
%a.dropdown-item.feature{:href => expand_link(page.url)}
= page.title
%li.nav-item.dropdown
.nav-link.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :role => "button"}
Resources
.dropdown-menu
%a.dropdown-item.feature{:href => "https://accounts.jenkins.io/", :title => "Create/manage your account for accessing wiki, issue tracker, etc"}
Account Management
%a.dropdown-item{:href => expand_link('chat'), :title => "Chat with the rest of the Jenkins community on IRC"}
Chat
%a.dropdown-item.feature{:href => "https://issues.jenkins-ci.org/"}
Issue Tracker
%a.dropdown-item{:href => expand_link('mailing-lists'),
:title => "Browse Jenkins mailing list archives and/or subscribe to lists"}
Mailing Lists
%a.dropdown-item.feature{:href => "https://wiki.jenkins-ci.org/"}
Wiki
%li.nav-item.dropdown
.nav-link.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :role => "button"}
About
.dropdown-menu
%a.dropdown-item{:href => expand_link('security')}
Security
%a.dropdown-item{:href => expand_link('press')}
Press
%a.dropdown-item{:href => expand_link('project/conduct')}
Conduct
%li.nav-item
%a.nav-link.btn.btn-outline-secondary{:href => expand_link('download')}
Download

View File

@ -1,3 +0,0 @@
%div{:style => 'float: right; clear: all;'}
%a.twitter-share-button{:href => 'https://twitter.com/share', :'data-lang' => 'en'}
Tweet

View File

@ -0,0 +1,108 @@
---
layout: post
title: "Say hello to Blue Ocean 1.0"
tags:
- blueocean
- ux
- pipeline
author: i386
---
Back in May 2016 link:/blog/2016/05/26/introducing-blue-ocean/[we announced our intent]
to rethink the Jenkins User experience with the Blue Ocean project and today
the Jenkins project are pleased to announce the general
availability of Blue Ocean 1.0.
Blue Ocean is an entirely new, modern and fun way for developers to use Jenkins
that has been built from the ground up to help teams of any size approach
Continuous Delivery. Easily installed as a plugin for Jenkins and integrated
with Jenkins Pipeline, it is available from today for production use.
Since the start of the beta at Jenkins World 2016 in September there are now
over 7400+ installations making use of Blue Ocean. This wouldnt be possible
without the support of the entire Jenkins developer and
user community - so thank you for your support!
Blue Ocean is available today from the update center and also as a
Docker image - link:/projects/blueocean[why not give it a try?]
++++
<center>
<iframe width="853" height="480"
src="https://www.youtube-nocookie.com/embed/k_fVlU1FwP4?rel=0" frameborder="0"
allowfullscreen></iframe>
</center>
<br>
++++
*Visual Pipeline Editing* - Team members of any skill level can create continuous
delivery pipelines from start to finish, with just several clicks, using the
intuitive, visual pipeline editor. Any pipeline created with the visual editor
can also be edited in your favorite text editor
bringing all the benefits of Pipeline as Code.
image:/images/blueocean/press/pipeline-editor.png[Editor, role=center]
*Pipeline Visualization* - Developers can visually represent pipelines in a way
that anyone on the team can understand - even your boss's boss - improving
clarity into the continuous delivery process for the whole organization.
The visualization helps you focus on what the pipeline does, not how it does it.
image:/images/blueocean/press/pipeline-visualization.png[Pipeline visualization, role=center]
*Pinpoint Troubleshooting* - Blue Ocean enables developers to locate automation
problems instantly, without endlessly scanning through logs or navigating
through many screens, so you can get back to building the next big thing.
image:/images/blueocean/press/pipeline-diagnosis.png[Pinpoint Troubleshooting, role=center]
*GitHub and Git Integration* - Pipelines are created for all feature branches
and pull requests, with their status reported back to GitHub.
The whole team has visibility into whether changes need work or are good to go.
image:/images/blueocean/press/github-status.png[Github integration, role=center]
*Personalization* Every team member can make Jenkins their own by customizing
the dashboard so that they only see those pipelines that matter to them.
Favoriting any pipeline or branch in Blue Ocean will show a favourite card on
the dashboard so you can see its status at a glance.
image:/images/blueocean/press/personalization.png[Personalized dashboard, role=center]
Just one more thing Id like to pay special thanks to:
- *The Core team* to Keith Zantow, Thorsten Scherler, Tom Fennelly,
Ivan Meredith, Josh McDonald, Vivek Pandey, Brody Maclean and Cliff Meyers.
Each of and everyone of you have brought your own passion, expertise and flair
to the project and it shows. Its been crazy fun and I hope working on
Blue Ocean is something you look back on fondly.
- *Jenkins Developers* past and present we recognise that we are standing on
the shoulders of giants and none of this wouldnt be possible without your
hard work and dedication to free & open source software and Jenkins.
Heres to the next 10 years 🍻 !
- *CloudBees* in particular, Sacha Labourey (CEO), Harpreet Singh
(VP of Product) and Spike Washburn (VP of Engineering) whose dedication to
Jenkins, Open Source and continued faith in the vision and team made all of
this possible, and of course Bob Bickel (Advisor) who dared us to dream big.
- *Michael Neale* who drank all the kool-aide and is just as obsessed with
and dedicated to Blue Ocean as I am. This project would never have shipped
without his hand steady at the tiller. I couldnt ask for a better friend
and partner-in-crime.
- *Tyler Croy* for guiding the project and myself on how to do open source
The Right Way™. Tyler works tirelessly behind the scenes to to make Jenkins
awesome and it wouldnt be possible to keep this show running without
his help and sage-like advice.
- *Kohsuke Kawaguchi* For creating Jenkins, getting Blue Ocean off of
the ground, his tour of Tokyo and above all, his trust.
- *Jenkins Users* your enthusiasm for better development tools which
kept our spirits and momentum up when the days grew long and things
looked tough. We couldnt ask for a better, more appreciative or
passionate group of people. Hopefully weve done our job and you can get
back to building your next big thing!
Next stop, some well needed rest & recovery then back to to making
Jenkins one of the experiences for software developers worldwide!
If youre interested in joining us to make Blue Ocean a great user experience
for Jenkins, please join the Blue Ocean development
team on link:https://gitter.im/jenkinsci/blueocean-plugin[Gitter]!

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,495 @@
body {
font-family: 'Lato', sans-serif;
text-rendering: optimizeLegibility !important;
-webkit-font-smoothing: antialiased !important; }
.h1,
.h2,
.h3,
.h4,
.h5,
.h6,
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: 700;
line-height: 1.2;
color: #4a4a4a; }
h1 {
font-size: 30px; }
@media (min-width: 767px) {
h1 {
font-size: 34px; } }
h2 {
font-size: 24px;
margin-bottom: 1rem; }
@media (min-width: 767px) {
h2 {
font-size: 28px; } }
h3 {
font-size: 20px; }
@media (min-width: 767px) {
h3 {
font-size: 22px; } }
p {
color: #9b9b9b;
font-size: 15px;
line-height: 21px; }
@media (min-width: 767px) {
p {
font-size: 17px;
line-height: 26px; }
p.smaller {
font-size: 15px;
line-height: 21px; } }
.wow {
visibility: hidden; }
.btn {
border-radius: 3px;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-ms-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out; }
.btn-primary {
background: #4a90e2;
border: 1px solid #4a90e2; }
.btn-primary:focus, .btn-primary:hover {
background-color: #2275d7;
border: 1px solid #1b5dab; }
.btn-primary:active, .btn-primary:active:focus, .btn-primary:active:hover, .btn-primary:active:hover:focus, .btn-primary:hover:focus {
background-color: #3483de;
border-color: #2275d7; }
.btn-secondary, .btn-secondary:not([href]):not([tabindex]) {
color: #4a90e2;
background-color: transparent;
border: 1px solid rgba(74, 144, 226, 0.5);
cursor: pointer; }
.btn-secondary span, .btn-secondary:not([href]):not([tabindex]) span {
margin-right: 4px; }
.btn-secondary:focus, .btn-secondary:hover, .btn-secondary:not([href]):not([tabindex]):focus, .btn-secondary:not([href]):not([tabindex]):hover {
background-color: rgba(74, 144, 226, 0.12);
border-color: rgba(74, 144, 226, 0.75);
color: #1f69c1; }
.btn-secondary:active, .btn-secondary:active:focus, .btn-secondary:active:hover, .btn-secondary:active:hover:focus, .btn-secondary:hover:focus, .btn-secondary:not([href]):not([tabindex]):active, .btn-secondary:not([href]):not([tabindex]):active:focus, .btn-secondary:not([href]):not([tabindex]):active:hover, .btn-secondary:not([href]):not([tabindex]):active:hover:focus, .btn-secondary:not([href]):not([tabindex]):hover:focus {
background-color: rgba(74, 144, 226, 0.1);
border-color: #4a90e2;
color: #4a90e2; }
.navbar.navbar-toggleable-md {
font-size: 0.875rem; }
.navbar.navbar-toggleable-md.bg-inverse {
background-color: #000; }
.navbar.navbar-toggleable-md .navbar-brand {
font-family: Georgia,Times,Times New Roman,serif;
font-weight: 600;
font-size: 20px;
padding: 2px 0; }
.navbar.navbar-toggleable-md .btn {
font-size: 0.875rem;
margin-left: 8px;
margin-top: 1px; }
.navbar.navbar-toggleable-md .btn.dropdown-toggle::after {
margin: 0 0 0 8px; }
.navbar.navbar-toggleable-md .btn.btn-outline-secondary.active, .navbar.navbar-toggleable-md .btn.btn-outline-secondary.focus, .navbar.navbar-toggleable-md .btn.btn-outline-secondary:active, .navbar.navbar-toggleable-md .btn.btn-outline-secondary:focus,
.navbar.navbar-toggleable-md .btn .btn-outline-secondary.active,
.navbar.navbar-toggleable-md .btn .btn-outline-secondary:active {
background-color: rgba(255, 255, 255, 0.15); }
.navbar.navbar-toggleable-md .btn.btn-outline-secondary:hover {
background-color: rgba(255, 255, 255, 0.1); }
.navbar.navbar-toggleable-md .show > .btn-outline-secondary.dropdown-toggle {
background-color: rgba(255, 255, 255, 0.15); }
.navbar.navbar-toggleable-md .nav-link {
padding: 0.3rem 0.75rem 0.4rem; }
.navbar.navbar-toggleable-md .nav-link.btn {
color: rgba(255, 255, 255, 0.75); }
.navbar.navbar-toggleable-md .dropdown-menu {
font-size: 0.875rem; }
@media (max-width: 767px) {
.navbar.navbar-toggleable-md .dropdown-menu {
background: none;
border: none; }
.navbar.navbar-toggleable-md .dropdown-menu .dropdown-item {
color: #fff; } }
@media (min-width: 767px) {
.navbar.navbar-toggleable-md .dropdown-menu {
background: none;
border: none; }
.navbar.navbar-toggleable-md .dropdown-menu .dropdown-item {
color: #fff; } }
@media (min-width: 992px) {
.navbar.navbar-toggleable-md .dropdown-menu {
background-color: #fff;
border: 1px solid rgba(0, 0, 0, 0.15); }
.navbar.navbar-toggleable-md .dropdown-menu .dropdown-item {
color: #292b2c; } }
.navbar.navbar-toggleable-md .navbar-toggler {
font-size: 1.5rem; }
@media (max-width: 767px) {
.navbar.navbar-toggleable-md .container {
width: 100%; } }
.header {
position: relative;
height: 370px;
text-align: center;
padding: 60px 0; }
.header .logo {
margin-bottom: 16px;
display: inline-block; }
.header .logo svg {
float: left; }
.header .logo .logo-jenkins {
height: 80px; }
@media (min-width: 767px) {
.header .logo .logo-jenkins {
height: 102px;
width: 74px; } }
.header h1 {
margin-bottom: 24px; }
.header h1 span {
display: block;
font-size: 0.65em;
opacity: 0.5;
margin-bottom: .25rem; }
.header a.btn {
margin: 0 4px; }
@media (min-width: 767px) {
.header {
height: 480px;
padding: 100px 0; } }
@media (min-width: 992px) {
.header {
height: 570px;
padding: 140px 0; } }
.header .skew:before {
content: '';
position: absolute;
left: 0;
top: -100px;
overflow: visible;
width: 100%;
height: 600px;
background: #F8F9FB;
z-index: -1;
-webkit-transform: skewY(-14deg);
-moz-transform: skewY(-14deg);
-ms-transform: skewY(-14deg);
-o-transform: skewY(-14deg);
transform: skewY(-14deg);
-webkit-backface-visibility: hidden;
backface-visibility: initial; }
@media (min-width: 767px) {
.header .skew:before {
top: -350px;
height: 900px; } }
@media (min-width: 992px) {
.header .skew:before {
top: -350px;
height: 1020px; } }
.header .skew .header-inner {
padding: 20px;
margin-left: auto;
margin-right: auto; }
section {
padding-top: 50px;
padding-bottom: 50px; }
@media (min-width: 767px) {
section {
padding-top: 80px;
padding-bottom: 80px; } }
@media (min-width: 992px) {
section {
padding-top: 100px;
padding-bottom: 100px; } }
.intro img {
width: calc(100% + 30px);
margin: 0 -15px;
z-index: 1;
min-height: 220px; }
.intro a.video {
cursor: pointer; }
.intro a.video video {
width: calc(100% + 30px);
margin: 0 -15px;
z-index: 1;
min-height: 220px;
box-shadow: 0 2px 80px 0 rgba(0, 0, 0, 0.05); }
@media (max-width: 767px) {
.intro a.video video source {
display: none; } }
.intro a.video::after {
width: 100%;
height: 100%;
background-color: rgba(1, 11, 25, 0.3);
content: "";
display: block;
position: absolute;
top: 0;
left: 0;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-ms-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out; }
.intro a.video span {
position: absolute;
top: calc(50% - 60px);
left: calc(50% - 60px);
color: #fff;
opacity: .9;
border: 5px solid #fff;
border-radius: 200px;
padding: 30px;
z-index: 999;
font-size: 80px;
display: flex;
justify-content: center;
align-items: center;
width: 120px;
height: 120px;
text-align: center;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-ms-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out; }
.intro a.video span::before {
margin-right: -12px;
margin-bottom: -3px; }
.intro a.video:hover::after {
background-color: rgba(1, 11, 25, 0.4); }
.intro a.video:hover span {
opacity: 1; }
.intro .introblurb {
background: #FFFFFF;
box-shadow: 10px 10px 40px 0 rgba(0, 0, 0, 0.15);
z-index: 2;
margin-top: -8px;
display: inline-block;
padding: 18px 24px;
-webkit-transition: all 0.5s ease-out;
-moz-transition: all 0.5s ease-out;
-ms-transition: all 0.5s ease-out;
-o-transition: all 0.5s ease-out;
transition: all 0.5s ease-out; }
.intro .introblurb:hover {
-webkit-transform: translate(0px, -10px);
-moz-transform: translate(0px, -10px);
-ms-transform: translate(0px, -10px);
-o-transform: translate(0px, -10px);
transform: translate(0px, -10px);
box-shadow: 10px 10px 40px 10px rgba(0, 0, 0, 0.1); }
@media (min-width: 767px) {
.intro img {
min-height: 450px; }
.intro .introblurb {
margin-top: -80px;
padding: 26px 32px; } }
@media (min-width: 992px) {
.intro img {
min-height: 530px; }
.intro .introblurb {
margin-top: 0;
bottom: 24px;
position: absolute; } }
@media (min-width: 1200px) {
.intro img {
min-height: 580px; }
.intro .introblurb {
bottom: 32px; } }
.features {
text-align: center; }
.features .col-lg-4 .icon {
background-color: rgba(74, 144, 226, 0.07);
width: 80px;
height: 80px;
border-radius: 100px;
margin-bottom: 16px;
display: inline-block;
text-align: center;
font-size: 40px;
padding: 10px;
color: #4a90e2;
-webkit-transition: all 0.5s ease-out;
-moz-transition: all 0.5s ease-out;
-ms-transition: all 0.5s ease-out;
-o-transition: all 0.5s ease-out;
transition: all 0.5s ease-out; }
.features .col-lg-4 .icon svg {
height: 48px;
width: 35px;
padding-top: 12px; }
.features .col-lg-4 .icon svg path {
fill: #4a90e2; }
.features .col-lg-4 h3 {
margin-bottom: 8px; }
.features .col-lg-4 p {
margin-bottom: 40px; }
.features .col-lg-4:hover .icon {
-webkit-transform: translate(0px, -10px);
-moz-transform: translate(0px, -10px);
-ms-transform: translate(0px, -10px);
-o-transform: translate(0px, -10px);
transform: translate(0px, -10px); }
.props .container {
padding-top: 100px;
padding-bottom: 100px;
margin-top: -20px; }
.props .skew:before {
content: '';
position: absolute;
left: 0;
overflow: visible;
width: 100%;
height: 610px;
background: #F8F9FB;
z-index: -1;
-webkit-transform: skewY(-2deg);
-moz-transform: skewY(-2deg);
-ms-transform: skewY(-2deg);
-o-transform: skewY(-2deg);
transform: skewY(-2deg);
-webkit-backface-visibility: hidden;
backface-visibility: initial; }
@media (min-width: 767px) {
.props .skew:before {
height: 420px; } }
@media (min-width: 992px) {
.props .skew:before {
height: 440px; } }
@media (min-width: 1200px) {
.props .skew:before {
height: 420px; } }
.cta {
text-align: center;
margin-bottom: 80px; }
.socials {
position: fixed;
bottom: 10px;
left: 10px;
color: #fff;
font-size: 20px; }
@media (min-width: 1200px) {
.socials {
top: 210px;
left: calc(((100vw - 1140px) / 2) - 64px); } }
.socials .socialLinks {
width: 40px;
height: 40px;
border-radius: 100px;
color: #fff;
margin-bottom: 4px;
display: block;
overflow: hidden;
white-space: nowrap;
text-decoration: none;
-webkit-transition: all 0.35s ease-out;
-moz-transition: all 0.35s ease-out;
-ms-transition: all 0.35s ease-out;
-o-transition: all 0.35s ease-out;
transition: all 0.35s ease-out; }
.socials .socialLinks .socialLabel {
font-size: 15px;
line-height: 21px;
color: #fff;
display: inline-block;
opacity: 0;
-webkit-transition: all 0.35s ease-out;
-moz-transition: all 0.35s ease-out;
-ms-transition: all 0.35s ease-out;
-o-transition: all 0.35s ease-out;
transition: all 0.35s ease-out; }
.socials .socialLinks.showLabel, .socials .socialLinks:hover {
width: 95px; }
.socials .socialLinks.showLabel .socialLabel, .socials .socialLinks:hover .socialLabel {
opacity: 1; }
.socials .socialLinks.showLabel:hover, .socials .socialLinks:hover:hover {
-webkit-transform: translate(3px, 0px);
-moz-transform: translate(3px, 0px);
-ms-transform: translate(3px, 0px);
-o-transform: translate(3px, 0px);
transform: translate(3px, 0px); }
.socials .socialsFacebook {
background: #3b5998;
padding: 5px 16px; }
.socials .socialsFacebook .socialLabel {
position: relative;
top: -3px;
left: 10px; }
.socials .socialsTwitter {
background: #1da1f2;
padding: 5px 11px; }
.socials .socialsTwitter .socialLabel {
position: relative;
top: -3px;
left: 5px; }
.socials .socialsLinkedin {
background: #0077b5;
padding: 5px 13px; }
.socials .socialsLinkedin .socialLabel {
position: relative;
top: -3px;
left: 7px; }
.modal-content {
background-color: transparent;
border: none; }
.modal-content .close {
color: #fff;
text-shadow: none;
padding: 16px;
opacity: 0.75;
font-size: 2rem;
margin-right: -8px;
margin-top: -10px; }
.modal-backdrop.in {
opacity: 0.7; }
.modal-dialog {
width: 100vw;
margin: 0; }
.modal-dialog .modal-body {
padding: 15% 0;
width: 100vw; }
.modal-dialog .modal-body iframe {
height: 210px; }
@media (min-width: 767px) {
.modal-dialog .modal-body iframe {
height: 432px; } }
@media (min-width: 992px) {
.modal-dialog .modal-body iframe {
height: 578px; } }
@media (min-width: 1200px) {
.modal-dialog .modal-body iframe {
height: 641px; } }
@media (min-width: 992px) {
.modal-dialog .modal-body {
padding: 5% 0; } }
@media (min-width: 1200px) {
.modal-dialog .modal-body {
width: 100%;
padding: calc((100vh - 640px) / 2 - 55px) 0; } }
@media (min-width: 1200px) {
.modal-dialog {
max-width: 1140px;
margin: auto; } }

45
content/css/footer.css Normal file
View File

@ -0,0 +1,45 @@
#footer {
background: #1077ad;
color: #fff;
padding: 2rem;
position: relative;
z-index: 2;
width: 100%;
float: left;
clear: both;
}
#footer .license-box {
float: left;
font-size: .85rem;
padding-left: 0
}
#footer a {
color: #fff;
}
#footer .links ul li {
text-align: left;
}
#footer .area {
display: inline-block;
vertical-align: top;
font-size: .85rem
}
#footer ul, #footer li {
display: block;
list-style: none;
margin: 0;
padding: 0;
}
.links h5 {
font-size: 1rem;
font-weight: 800;
letter-spacing: 0.05em;
color: #fff;
text-align: left;
}

View File

@ -30,10 +30,6 @@ h6[id]:before {
padding: 0.4em 1em 0.4em 0.5em !important;
}
body > .container {
margin-top: 60px;
}
.container.page {
position: relative
}
@ -77,32 +73,6 @@ body .popover.download-options {
}
#ji-toolbar {
left: 0;
right: 0;
z-index: 100;
border-radius: 0;
padding-right: 160px
}
#ji-toolbar>.navbar-brand {
font: bold 1.33rem 'georgia';
line-height:1.5rem !important;
}
#ji-toolbar .navbar-brand,
#ji-toolbar li.download {
-webkit-transition: all 1s ease-in-out;
-moz-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
transition: all 1s ease-in-out;
}
#ji-toolbar .slide-out {
margin: 0 0 0 -99rem !important;
overflow: hidden;
}
body h1.page-title {
font: bold 4rem 'georgia';
margin-top: -.2rem
@ -121,48 +91,6 @@ body h1.page-title .in-tag {
z-index:10;
}
#doc-toolbar *,
#ji-toolbar * {line-height:1.5rem !important; vertical-align:bottom !important;}
form.search {opacity:.9; float:right}
nav .form-inline .input-group>.form-control {width:0; transition: all 0.5s ease;}
nav form.search .input-group:hover>input.form-control,
nav form.search .input-group:focus>input.form-control ,
nav form.search .input-group>input.form-control:focus{opacity:1; width:12rem}
#ji-toolbar.navbar-dark .navbar-nav .nav-link {
color: rgba(255, 255, 255, .67)
}
#ji-toolbar.navbar-dark .navbar-nav .nav-link:hover {
color: rgba(255, 255, 255, .95)
}
#ji-toolbar form {
white-space: nowrap
}
#ji-toolbar.bg-inverse {
background: #000
}
.ji-toolbar-offset {
min-height: 3rem
}
#ji-top-peg {
position: absolute;
right: 0;
top: 0;
text-align: center;
left: 0;
z-index: 101;
}
#ji-top-peg #ji-fork-tag {
position: fixed;
right: 0
}
.carousel-item {
min-height: 27rem;
background: #fff;
@ -207,7 +135,7 @@ nav form.search .input-group>input.form-control:focus{opacity:1; width:12rem}
}
/* so that banner do not float over fixed navbar*/
.carousel{
.carousel {
z-index: 9;
}
@ -700,55 +628,6 @@ body .gutter {
padding-left: 3rem !important
}
#footer {
background: #1077ad;
color: #fff;
padding: 2rem;
position: relative;
z-index: 2;
width: 100%;
float: left;
clear: both;
}
#footer .license-box {
float: left;
font-size: .85rem;
padding-left: 0
}
#footer a {
color: #fff;
}
#footer .links {
text-align: right;
float: right;
}
#footer .links ul li {
text-align: left;
}
#footer ul>.area {
display: inline-block;
vertical-align: top;
font-size: .85rem
}
#footer ul, #footer li {
display: block;
list-style: none;
margin: 0;
padding: 0;
}
#footer ul>.area h5 {
font-size: 1rem;
font-weight: 800;
letter-spacing: 0.05em;
}
body .ji-dated-list>.post {
border-top: .1rem solid #ccc;
margin-bottom: .5rem
@ -1179,7 +1058,6 @@ z.f9f9f9.section .ji-blog-list>.post>.body>.teaser:after, .ji-dated-list>.post>.
}
.uniform-height .box {
background:#fff;
padding: .67rem .75rem 0 4rem;
position: relative;
border-radius: 5px;
@ -1617,16 +1495,9 @@ table {
}
/** docbook section navigation **/
.section_nav > .page-link {
float: none;
font-size: 0.75rem;
}
.index.page-link {
line-height: 3.5;
}
.pagination-links {
height: 4rem;
text-align: center;
.doc-page-link {
margin-left: auto;
margin-right: auto;
}
@ -1682,3 +1553,90 @@ table.syntax > tbody > tr > th {
.tour .active {
font-weight: bold;
}
/** pilfered from blueocean-style.css **/
.navbar.navbar-toggleable-md {
font-size: 0.875rem; }
.navbar.navbar-toggleable-md.bg-inverse {
background-color: #000; }
.navbar.navbar-toggleable-md .navbar-brand {
font-family: Georgia,Times,Times New Roman,serif;
font-weight: 600;
font-size: 20px;
padding: 2px 0; }
.navbar.navbar-toggleable-md .btn {
font-size: 0.875rem;
margin-left: 8px;
margin-top: 1px; }
.navbar.navbar-toggleable-md .btn.dropdown-toggle::after {
margin: 0 0 0 8px; }
.navbar.navbar-toggleable-md .btn.btn-outline-secondary.active, .navbar.navbar-toggleable-md .btn.btn-outline-secondary.focus, .navbar.navbar-toggleable-md .btn.btn-outline-secondary:active, .navbar.navbar-toggleable-md .btn.btn-outline-secondary:focus,
.navbar.navbar-toggleable-md .btn .btn-outline-secondary.active,
.navbar.navbar-toggleable-md .btn .btn-outline-secondary:active {
background-color: rgba(255, 255, 255, 0.15); }
.navbar.navbar-toggleable-md .btn.btn-outline-secondary:hover {
background-color: rgba(255, 255, 255, 0.1); }
.navbar.navbar-toggleable-md .show > .btn-outline-secondary.dropdown-toggle {
background-color: rgba(255, 255, 255, 0.15); }
.navbar.navbar-toggleable-md .nav-link {
padding: 0.3rem 0.75rem 0.4rem; }
.navbar.navbar-toggleable-md .nav-link.btn {
color: rgba(255, 255, 255, 0.75); }
.navbar.navbar-toggleable-md .dropdown-menu {
font-size: 0.875rem; }
@media (max-width: 767px) {
.navbar.navbar-toggleable-md .dropdown-menu {
background: none;
border: none; }
.navbar.navbar-toggleable-md .dropdown-menu .dropdown-item {
color: #fff; } }
@media (min-width: 767px) {
.navbar.navbar-toggleable-md .dropdown-menu {
background: none;
border: none; }
.navbar.navbar-toggleable-md .dropdown-menu .dropdown-item {
color: #fff; } }
@media (min-width: 992px) {
.navbar.navbar-toggleable-md .dropdown-menu {
background-color: #fff;
border: 1px solid rgba(0, 0, 0, 0.15); }
.navbar.navbar-toggleable-md .dropdown-menu .dropdown-item {
color: #292b2c; } }
.navbar.navbar-toggleable-md .navbar-toggler {
font-size: 1.5rem; }
@media (max-width: 767px) {
.navbar.navbar-toggleable-md .container {
width: 100%; } }
.banner-container .skew:before {
content: '';
position: absolute;
left: 0;
top: -100px;
overflow: visible;
width: 100%;
height: 600px;
background: #F8F9FB;
z-index: -1;
-webkit-transform: skewY(-14deg);
-moz-transform: skewY(-14deg);
-ms-transform: skewY(-14deg);
-o-transform: skewY(-14deg);
transform: skewY(-14deg);
-webkit-backface-visibility: hidden;
backface-visibility: initial; }
@media (min-width: 767px) {
.header .skew:before {
top: -350px;
height: 900px; } }
@media (min-width: 992px) {
.header .skew:before {
top: -350px;
height: 1020px; } }
.jumbotron {
background-color: #F8F9FB;
}

View File

@ -0,0 +1,4 @@
---
sections:
- getting-started
- pipeline-editor

View File

@ -0,0 +1,86 @@
---
layout: section
title: Starting with Blue Ocean
---
:description:
:author:
:email: jenkinsci-docs@googlegroups.com
:sectanchors:
:toc:
:imagesdir: /doc/book/resources
:hide-uri-scheme:
= Starting with Blue Ocean
This section will show how to start using Blue Ocean.
It will include instructions for installing and configuring the Blue Ocean plugin,
and how to get switch into and out of the Blue Ocean UI.
== Installing
Blue Ocean can be installed in an existing Jenkins environment or be run
<<blueocean-docker, with Docker>>.
To start using the plugin:blue-ocean[Blue Ocean plugin] in an existing Jenkins
environment, it must be running Jenkins 2.7.x or later.:
. Login to your Jenkins server
. Click **Manage Jenkins** in the sidebar then **Manage Plugins**
. Choose the **Available** tab and use the search bar to find **Blue Ocean**
. Click the checkbox in the Install column
. Click either **Install without restart** or **Download now and install after
restart**
image::blueocean/intro/plugin-install.png[Installing Blue Ocean, role=center]
For in-depth description on how to install and manage plugins,
refer to the <<managing/plugins#, Managing Plugins>> section.
The majority of Blue Ocean requires no additional configuration after
installation. Existing Pipelines and Jobs will continue to work as usual.
However, the first time a <<creating-pipelines, Pipeline is created>>, Blue
Ocean will ask for permissions to access your repositories (either Git or
GitHub) in order to create pipelines based on those repositories.
[[blueocean-docker]]
=== With Docker
The Jenkins project publishes a Docker container with Blue Ocean built-in every
time a new release of Blue Ocean is published. The `jenkinsci/blueocean`
image is based off of the current link:/download[Jenkins Long-Term Support]
(LTS) release and is production ready.
To start a new Jenkins with Blue Ocean pre-installed:
. Ensure Docker is installed.
. Run `docker run -p 8888:8080 jenkinsci/blueocean:latest`
. Browse to http://localhost:8888/blue
The Blue Ocean container can be configured using all the same
link:https://github.com/jenkinsci/docker#usage[configuration options] available
to the other images published by the Jenkins project.
== Starting Blue Ocean
Once a Jenkins environment has Blue Ocean installed, users can start using Blue
Ocean by clicking the **Open Blue Ocean** in the top navigation bar of the
Jenkins web UI. Alternatively, users can navigate directly to Blue Ocean at the
`/blue` URL for their Jenkins environment, for example
`http://JENKINS_URL/blue`.
image:blueocean/intro/switch-blue-ocean.png[Opening Blue Ocean, role=center]
=== Switching to the "Classic" UI
Blue Ocean may not support some legacy or administrative functions which are
necessary to some users. For those wishing to exit the Blue Ocean user
experience, an "exit" icon is located at the top of most pages in Blue Ocean.
Clicking the exit icon will navigate to the most relevant page in "classic"
which parallels the current page in Blue Ocean.
image::blueocean/intro/switch-classic.png[Returning to the "classic" web UI, role=center]
Some links in Blue Ocean, like **Administration**, will also navigate to the
classic web UI when there is no Blue Ocean equivalent. In these cases, Blue
Ocean will automatically take the user into the classic web UI as necessary.

View File

@ -0,0 +1,174 @@
---
layout: chapter
title: Blue Ocean
---
:notitle:
:description:
:author:
:email: jenkinsci-users@googlegroups.com
:sectanchors:
:imagesdir: /doc/book/resources
:toc:
[blue-ocean]
= Blue Ocean
This chapter will cover all aspects of Blue Ocean, from the Dashboard,
to viewing branches and results from individual Pipeline runs,
to using the Visual Editor to modify Pipelines as code.
This chapter is intended for Jenkins users of all skill levels, but beginners
may need to refer to some sections of "<<using#,Using Jenkins>>" to understand
some topics covered in this chapter.
If you are not yet familiar with Jenkins terminology and features, start with
<<getting-started#,Getting Started with Jenkins>>.
[[overview]]
== What is Blue Ocean?
Blue Ocean rethinks the user experience of Jenkins. Designed from the ground
up for <<pipeline#, Jenkins Pipeline>>, but still compatible with Freestyle
jobs, Blue Ocean reduces clutter and increases clarity for every member of the
team.
* *Sophisticated visualizations* of continuous delivery (CD) Pipelines,
allowing for fast and intuitive comprehension of pipeline's status.
* *Pipeline editor* makes creation of Pipelines approachable by guiding the user through an intuitive and visual process to create a Pipeline.
* *Personalization* to suit the role-based needs of each member of the team.
* *Pinpoint precision* when intervention is needed and/or issues arise. Blue Ocean shows where in the pipeline attention is needed, facilitating exception handling and increasing productivity.
* *Native integration for branch and pull requests* enables maximum developer productivity when collaborating on code with others in GitHub and Bitbucket.
To start using Blue Ocean, see **<<blueocean/getting-started#,Getting Started
with Blue Ocean>>**.
++++
<center>
<iframe width="853" height="480"
src="https://www.youtube-nocookie.com/embed/k_fVlU1FwP4?rel=0" frameborder="0"
allowfullscreen></iframe>
</center>
++++
== Join the community
There a few ways you can join the community:
. Chat with the community and development team on Gitter image:https://badges.gitter.im/jenkinsci/blueocean-plugin.svg[link="https://gitter.im/jenkinsci/blueocean-plugin?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge"]
. Request features or report bugs against the https://issues.jenkins-ci.org/[`blueocean-plugin` component in JIRA].
. Subscribe and ask questions on the https://groups.google.com/forum/#!forum/jenkinsci-users[Jenkins Users mailing list].
. Developer? We've https://issues.jenkins-ci.org/issues/?filter=16142[labeled a few issues] that are great for anyone wanting to get started developing Blue Ocean. Don't forget to drop by the Gitter chat and introduce yourself!
== Frequently Asked Questions
=== Why does Blue Ocean exist?
The world has moved on from developer tools that are purely functional to
developer tools being part of a "developer experience". That is to say, it's no
longer about a single tool but the many tools developers use throughout the day
and how they work together to achieve a workflow that's beneficial for the
developer - this is Developer Experience.
Developer tools companies like Heroku, Atlassian and Github have raised the bar
for what is considered good developer experience, and developers are
increasingly expecting exceptional design. In recent years developers are
becoming more rapidly attracted to tools that are not only functional but are
designed to fit into their workflow seamlessly and are a joy to use. This shift
represents a higher standard of design and user experience that Jenkins needs
to rise to meet.
Creating and visualising continuous delivery pipelines is something valuable
for many Jenkins users and this is demonstrated in the 5+ plugins that the
community has created to meet their needs. To us this indicates a need to
revisit how Jenkins currently expresses these concepts and consider delivery
pipelines as a central theme to the Jenkins user experience.
It's not just continuous delivery concepts but the tools that developers use
every day Github, Bitbucket, Slack, HipChat, Puppet or Docker. It's about
more than Jenkins it's the developer workflow that surrounds Jenkins that
spans multiple tools.
New teams have little time for learning to assemble their own Jenkins
experience they want to improve their time to market by shipping better
software faster. Assembling that ideal Jenkins experience is something we can
work together as a community of Jenkins users and contributors to define. As
time progresses, developers' expectations of good user experience will change
and the mission of Blue Ocean will enable the Jenkins project to respond.
The Jenkins community has poured its sweat and tears into building the most
technically capable and extensible software automation tool in existence. Not
doing anything to revolutionize the Jenkins developer experience today is just
inviting someone else in closed source to do it.
++++
<center>
<iframe width="853" height="480"
src="https://www.youtube-nocookie.com/embed/mn61VFdScuk?rel=0" frameborder="0"
allowfullscreen></iframe>
</center>
++++
=== Where is the name from?
The name Blue Ocean comes from the book
link:https://en.wikipedia.org/wiki/Blue_Ocean_Strategy[Blue Ocean Strategy]
where instead of looking at strategic problems within a contested space you
look at problems in the larger uncontested space. To put this more simply,
consider this quote from ice hockey legend Wayne Gretzky: "skate to where the
puck is going to be, not where it has been".
==== Does Blue Ocean support Freestyle jobs?
Blue Ocean aims to deliver a great experience around Pipeline and be compatible
with any Freestyle jobs that you have configured in your system. However, they
won't be able to benefit from any of the features built for Pipelines for
example, Pipeline visualization.
As Blue Ocean is designed to be extensible it will be possible for the
community to extend it for other job types in the future.
=== What does this mean for the classic Jenkins UI?
The intention is that as Blue Ocean matures there will be less and less reasons
for users to go back to the existing UI.
For example, in the first version we will mainly be targeting Pipeline jobs.
You might be able to see your existing non-pipeline jobs in Blue Ocean but it
might not be possible to configure them from the new UI for some time. This
means users will have to jump back to the classic UI for configuration of
non-pipeline jobs.
There are likely going to be more examples of this and that's why the classic
UI will still be important in the long term.
=== What does this mean for my plugins?
Extensibility is a pretty core concept to Jenkins, so being able to extend the
Blue Ocean UI is important. Based on some research, we worked out a way to
allow `<ExtensionPoint name=..>` to be used in the markup of Blue Ocean,
leaving places for plugins to contribute to the UI (plugins can have their own
Blue Ocean extension points, just like they do today in Jenkins). Blue Ocean
itself (as it is so far) is implemented using these extension points.
Extensions are delivered by plugins, as normal, only if they wish to contribute
to the Blue Ocean experience they will have some additional javascript that
provides extensions.
=== What technologies are currently in use?
Blue Ocean is built as a collection of Jenkins plugins itself. There is one key
difference, however. It provides both its own endpoint for http requests and
delivers up html/javascript via a different path, without the existing Jenkins
UI markup/scripts. React.js and ES6 are used to deliver the javascript
components of Blue Ocean. Inspired by this excellent open source project
(link:https://nylas.com/blog/react-plugins[react-plugins]) an <ExtensionPoint>pattern was
established, that allows extensions to come from any Jenkins plugin (only with
Javascript) and should they fail to load, have failures isolated.
=== Where can I find the source code?
The source code can be found on Github:
* link:http://github.com/jenkinsci/blueocean-plugin[Blue Ocean]
* link:http://github.com/jenkinsci/jenkins-design-language[Jenkins Design Language]

View File

@ -0,0 +1,29 @@
---
layout: section
title: Pipeline Editor
---
:description:
:author:
:email: jenkinsci-docs@googlegroups.com
:sectanchors:
:toc:
:imagesdir: /doc/book/resources
:hide-uri-scheme:
= Pipeline Editor
The Blue Ocean Pipeline Editor is the simplest way for anyone wanting to get started with
creating Pipelines in Jenkins. It's also great way for advanced Jenkins users
to start adopting Pipeline.
The editor allows users to create and edit a Pipeline with different
stages and parallelized tasks that can run at the same time, depending on their
needs. After editing of the Pipeline is complete, the Pipeline can then be
saved into a source code repository as a `Jenkinsfile`.
If you ever need to change the Pipeline again,
Blue Ocean makes it easy to jump back in into the visual editor to modify the
Pipeline at any time, or you can change the Pipeline in code by editing the `Jenkinsfile` directly.
image:blueocean/pipeline-editor.png[Pipeline Editor, role=center]

View File

@ -5,6 +5,7 @@ chapters:
- managing
- best-practice
- pipeline
- blueocean
- use-case
- operating
- scaling

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

View File

@ -0,0 +1,19 @@
---
layout: documentation
title: Jenkins Upgrade Guide
notitle: true
---
== Upgrading to Jenkins LTS 2.46.x
Each section covers the upgrade from the previous LTS release, the section on 2.46.1 covers the upgrade from 2.32.3.
=== Upgrading to Jenkins LTS 2.46.1
==== JNLP4 remoting protocol enabled by default
The JNLP4 protocol is now enabled by default for JNLP agent connections. It's more reliable than JNLP3, and also encrypted, making it the best choice for agent connections. Use of this protocol may require upgrades of +slave.jar+ files on agents.
==== Obsolete ciphers removed from SSHD
Jenkins exposes an SSH server that allows use of CLI commands via SSH. In this SSH server, support for the obsolete ciphers AES128CBC, TripleDESCBC, and BlowfishCBC has been removed.

View File

@ -2,129 +2,166 @@
layout: default
title: Jenkins installation and setup
---
= partial('downloadbanner.html.haml')
.container
.row.body
.col-md-1
.col-md-8
.col-md-10
%h2
Jenkins Installation and Setup
.doc-block
%h3
Introduction
%p
With the release of 2.0, the installation of Jenkins remains
largely the same but the initial setup is different. After you have
chosen your preferred OS or container for installation the first
time you run Jenkins you will be presented with a setup wizard to
properly configure Jenkins. Jenkins will not be accessible via the
web interface or CLI until the initial setup is complete.
Getting started with Jenkins
%pre.code
INFO: This is a new Jenkins instance. The Plugin Install Wizard will be launched.
.container
.row
%p
The Jenkins project produces two release lines, LTS and weekly.
Depending on your organization's needs, one may be preferred over
the either.
%p
Both release lines are distributed as
%code
\.war
files, native packages, installers, and Docker containers.
.row
.col-md-6
%h4
Long-term Support (LTS)
%p
LTS (Long-Term Support) releases are chosen every 12 weeks from the
stream of regular releases as the stable release for that time period.
%h4
System Requirements
%p
Jenkins requires Java7 or above and Servlet 3.1 to function. Java8
is recommended. Jenkins requires a fair amount of memory to operate
well. Smaller installations should start around 256MB-1GB.
%a{'href' => 'https://wiki.jenkins-ci.org/display/JENKINS/LTS+Release+Line'}
Learn more…
%h3
Installation
%p.details
%a.item{:href=>'/changelog-stable'}
Changelog
|
%a.item{:href=>'/doc/upgrade-guide'}
Upgrade Guide
|
%a.item{:href=>'http://mirrors.jenkins.io/war-stable/'}
Past Releases
%h4
Unix/Linux Installation
%p
Jenkins has native integrations with the following OSes. See
respective sections for how to make Jenkins run in the background
automatically:
%ul
%li
%a{ href: 'https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu' } Installing Jenkins on Ubuntu
%li
%a{ href: 'https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions' } Installing Jenkins on Red Hat Distributions
%li
%a{ href: 'https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+with+Docker' } Installing Jenkins with Docker
.col-md-6
%h4
Weekly
%p
A new release is produced weekly to deliver bug fixes and
features to users and plugin developers.
%p
Alternatively, if you have a servlet container that supports
Servlet 3.1/JSP 2.0, then you can run them as services, and deploy
jenkins.war as you would any other war file.
%p.details
%a.item{:href=>'/changelog'}
Changelog
|
%a.item{:href=>'http://mirrors.jenkins.io/war/'}
Past Releases
.row
.col-md-6
%strong
%i.icon-box-add
Download Jenkins
= site.jenkins.stable
for:
%a{ href: "https://wiki.jenkins-ci.org/display/JENKINS/Containers" }
Container specific
documentation is available if you choose this route.
.list-group
%a.list-group-item.list-group-item-action{:href=>'https://registry.hub.docker.com/_/jenkins/'}
%span.icon
%span.title
Docker
%a.list-group-item.list-group-item-action{:href => 'http://www.freshports.org/devel/jenkins-lts'}
%span.icon
%span.title
FreeBSD
%a.list-group-item.list-group-item-action{:href=>'https://packages.gentoo.org/packages/dev-util/jenkins-bin'}
%span.icon
%span.title
Gentoo
%a.list-group-item.list-group-item-action{:href=>'/content/thank-you-downloading-os-x-installer#stable'}
%span.icon
%span.title
Mac OS X
%a.list-group-item.list-group-item-action{:href=>'http://openports.se/devel/jenkins/stable'}
%span.icon
%span.title
OpenBSD
%a.list-group-item.list-group-item-action{:href=>'https://pkg.jenkins.io/opensuse-stable/'}
%span.icon
%span.title
openSUSE
%a.list-group-item.list-group-item-action{:href=>'https://pkg.jenkins.io/redhat-stable/'}
%span.icon
%span.title
Red Hat/Fedora/CentOS
%a.list-group-item.list-group-item-action{:href=>'https://pkg.jenkins.io/debian-stable/'}
%span.icon
%span.title
Ubuntu/Debian
%a.list-group-item.list-group-item-action{:href=>'/content/thank-you-downloading-windows-installer#stable'}
%span.icon
%span.title
Windows
%a.list-group-item.list-group-item-action{:href=>'http://mirrors.jenkins.io/war-stable/latest/jenkins.war'}
%span.title
Generic Java package (.war)
%h4
Windows Installation
%p
If you're running on Windows it is good to run Jenkins as a service
so it starts up automatically without requiring a user to log in.
The easiest way is to run the Windows installer, linked from
Jenkins' homepage. This also has the advantage of being easier to
automate.
.col-md-6
%strong
%i.icon-box-add
Download Jenkins
= site.jenkins.latest
for:
%p
The manual way is to follow Installing Jenkins as a Windows
service. Alternatively, you can install a servlet container like
GlassFish and Tomcat, which can run as a service by itself, and
then deploy Jenkins to it.
.list-group
%a.list-group-item.list-group-item-action{:href=>'https://registry.hub.docker.com/r/jenkinsci/jenkins/'}
%span.icon
%span.title
Docker
%a.list-group-item.list-group-item-action{:href => 'http://www.freshports.org/devel/jenkins'}
%span.icon
%span.title
FreeBSD
%a.list-group-item.list-group-item-action{:href=>'https://packages.gentoo.org/packages/dev-util/jenkins-bin'}
%span.icon
%span.title
Gentoo
%a.list-group-item.list-group-item-action{:href=>'/content/thank-you-downloading-os-x-installer'}
%span.icon
%span.title
Mac OS X
%a.list-group-item.list-group-item-action{:href=>'http://openports.se/devel/jenkins/devel'}
%span.icon
%span.title
OpenBSD
%a.list-group-item.list-group-item-action{:href=>'https://pkg.jenkins.io/opensuse/'}
%span.icon
%span.title
openSUSE
%a.list-group-item.list-group-item-action{:href=>'https://pkg.jenkins.io/redhat/'}
%span.icon
%span.title
Red Hat/Fedora/CentOS
%a.list-group-item.list-group-item-action{:href=>'https://pkg.jenkins.io/debian/'}
%span.icon
%span.title
Ubuntu/Debian
%a.list-group-item.list-group-item-action{:href=>'/content/thank-you-downloading-windows-installer'}
%span.icon
%span.title
Windows
%a.list-group-item.list-group-item-action{:href=>'http://mirrors.jenkins.io/war/latest/jenkins.war'}
%span.title
Generic Java package (.war)
%p
Since Jenkins was written to work on unix-like platforms, some
parts assume the presence of unix-utilities. It is advised to
install these as well on Windows. Install UnxUtils (this includes a
shell that seems to work with forward and backwards slashes and
does globbing correctly)(UnxUtils does not download), put it in the
Windows PATH , and copy sh.exe to C:\bin\sh.exe (or whichever drive
you use) to make shebang lines work. This should get you going. If
UnxUtils gives you trouble (Fork Failed Errors), try Win-Bash.
%ul
%li
%a{ href: "https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Windows+service", title: "Install Service"} Installing Jenkins as a Windows service
%p
%br
%hr/
%h3
Setup Wizard
%p
Jenkins 2.0 is no longer installed completely open and accessible
to the world. Instead Jenkins is initially configured to be more
secure. Jenkins can no longer be accessed without a username and
password and open ports are limited. During the initial run of
Jenkins a security token is generated and printed in the console
log:
%pre.code
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. A security token is required to proceed.
Please use the following security token to proceed to installation:
41d2b60b0e4cb5bf2025d33b21cb
*************************************************************
*************************************************************
*************************************************************
%p
This token must be input in the Setup Wizard the first time you
open the Jenkins UI. This token will also serve as the default
password for the user 'admin' if you skip the user-creation step in
the Setup Wizard.
%p
In addition to configuring the initial security for Jenkins the
Setup Wizard will also install the initial plugins in your
installation. Previously,Jenkins included several bundled plugins
based on a set of assumed use cases. However, as technology and
tools have changed the list of bundled plugins included with
Jenkins has not kept up to date. Rather than continuously updating
a list of bundled plugins, Jenkins 2.0 begins with a setup wizard
asking the user to choose the initial plugins to be installed. The
recommended set of plugins available are based on the most common
use cases but users are free to customize their own installion.
.row
.col-md-12
%p
Once a Jenkins package has been downloaded, proceed to the
%strong
%a{:href => 'doc/book/getting-started/installing/'}
Installing Jenkins
section of the User Handbook.

View File

@ -1,90 +1,86 @@
---
layout: simplepage
title: "Events"
section: events # no such section (yet)
# no such section (yet)
section: events
notitle: true
---
:css
.floating {
float: left;
width: 320px;
}
h1, p {
clear: both;
}
.container
.row
%h1
Recurring Events
.row
.col-md-6.text-center
%ul.ji-item-list
%li.post.event.floating
%a.body{:href => 'http://lists.jenkins-ci.org/pipermail/jenkins-infra/2017-February/001029.html', :target => '_blank'}
.header.time
.date-time
.date
.day
Mondays
.dow
Mon
.time
20h UTC
%h1
Recurring Events
%div.item-list
%ul.ji-item-list
%li.post.event.floating
%a.body{:href => 'http://lists.jenkins-ci.org/pipermail/jenkins-infra/2017-February/001029.html', :target => '_blank'}
.header.time
.date-time
.date
.day
Mondays
.dow
Mon
.time
20h UTC
%h5.title
Infra Team Sync
.col-md-6.text-center
%ul.ji-item-list
%li.post.event.floating
%a.body{:href => 'https://jenkins.io/project/governance/#meeting', :target => '_blank'}
.header.time
.date-time
.date
.day.small
Every other Wed
.dow
Wed
.time
18h UTC
%h5.title
Infra Team Sync
%h5.title
Project Meeting
.row
%p
Other recurring events can be found in the
%a{:href => '/content/event-calendar'}
Jenkins event calendar.
%li.post.event.floating
%a.body{:href => 'https://jenkins.io/project/governance/#meeting', :target => '_blank'}
.header.time
.date-time
.date
.day.small
Every other Wed
.dow
Wed
.time
18h UTC
%h5.title
Project Meeting
%p
Other recurring events can be found in the
%a{:href => '/content/event-calendar'}
Jenkins event calendar.
%h1
Upcoming Events
%div.item-list
%ul.ji-item-list
.row
%h1
Upcoming Events
.row
- # Sort by the date defined for each of the events
- site.events.keys.sort { |x,y| Time.parse(site.events[x].date) <=> Time.parse(site.events[y].date) }.each do |name|
- data = site.events[name]
- raise "No `date` specified!" unless data.date
- event_time = Time.parse(data.date)
- next unless event_time > Time.now.utc
%li.post.event.floating
%a.body{:href => data.link, :target => '_blank'}
.header.time
.date-time
.date
.month
= event_time.strftime('%b')
.day
= event_time.strftime('%-d')
.dow
= event_time.strftime('%a')
.time
= event_time.strftime('%l:%M %P')
.col-md-3.text-center
%ul.ji-item-list
%li.post.event.floating
%a.body{:href => data.link, :target => '_blank'}
.header.time
.date-time
.date
.month
= event_time.strftime('%b')
.day
= event_time.strftime('%-d')
.dow
= event_time.strftime('%a')
.time
= event_time.strftime('%l:%M %P')
%h5.title
= data.title
%h5.title
= data.title
%p.teaser
= data.raw_content
.more
%p.teaser
= data.raw_content
.more
.attrs
.attrs

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -5,19 +5,138 @@ blogrollup: true
homepage: true
---
= partial('downloadbanner.html.haml')
= partial('jumbotron.html.haml',
:href => '/doc/book/pipeline',
:title => 'Pipeline as Code',
:intro => 'Pipeline provides an extensible set of tools for modeling simple-to-complex continuous delivery (CD) pipelines "as code". Create your first Pipeline and "Jenkinsfile" using the new Declarative Pipeline syntax.',
:image => site.solutions[:pipeline].jumbotron.image,
:call_to_action => {:text => 'Learn more', :href => '/doc/pipeline/tour/hello-world/'})
= partial('featurelist.html.haml')
= partial('steps.html.haml', site.steps[:firststart])
:ruby
# Images should all be between 300 and 350 pixels wide, and no more than 180px tall
%div
.section.events.fff
%div.container-fluid.events.no-margin
sponsors = [
['microsoft.png',
'Microsoft Azure',
'https://www.azure.com'],
['cloudbees.png',
'CloudBees, Inc.',
'https://cloudbees.com'],
['osuosl.png',
'Oregon State University Open Source Lab',
'https://osuosl.org'],
['rackspace.png',
'Rackspace, Inc.',
'https://rackspace.com'],
['redhat.png',
'RedHat, Inc.',
'https://redhat.com'],
]
supporters = [['Atlassian', 'https://atlassian.com'],
['Datadog', 'https://www.datadoghq.com'],
['JFrog', 'https://jfrog.com'],
['Mac Cloud', 'http://maccloud.me/'],
['PagerDuty', 'https://pagerduty.com'],
['XMission', 'https://xmission.com'],
]
.banner-container
.skew
.container
.row
&nbsp;
.row
.col-md-2
.col-lg-4
.logo{:style => 'width: 256px;'}
= partial('logo.html.haml')
.col-md-4
%h1.page-title
%span>
Jenkins
%p
%strong
Build great things at any scale
%p
The leading open source automation server, Jenkins provides
hundreds of plugins to support building, deploying and automating
any project.
.container
.row
%a.btn.btn-secondary{:href => expand_link('doc')}
Documentation
%a.btn.btn-primary{:href => expand_link('download')}
Download
.col-md-2
= partial('projectjumbotron.html.haml',
:href => '/projects/blueocean',
:title => 'Say &ldquo;hello&rdquo; to Blue Ocean 1.0',
:intro => "Blue Ocean is a brand new user experience that puts Continuous Delivery in reach of any team &mdash; without sacrificing the power and sophistication of Jenkins.",
:image => 'images/blueocean/blueocean-successful-pipeline.png',
:call_to_action => {:text => 'Get started', :href => '/projects/blueocean'})
#feature-list-segment.segment
.container
.row.chunks.features.uniform-height
.col-md-6.col-lg-4
.box.cicd
%i.icon-arrow-shuffle
%h5
Continuous Integration and Continuous Delivery
%p
As an extensible automation server, Jenkins can be used as a simple
CI server or turned into the continuous delivery hub for any project.
.col-md-6.col-lg-4
.box.install
%i.icon-download
%h5
Easy installation
%p
Jenkins is a self-contained Java-based program, ready to run
out-of-the-box, with packages for Windows, Mac OS X and other
Unix-like operating systems.
.col-md-6.col-lg-4
.box.settings
%i.icon-settings
%h5
Easy configuration
%p
Jenkins can be easily set up and configured via its web interface,
which includes on-the-fly error checks and built-in help.
.col-md-6.col-lg-4
.box.ecosystem
%i.icon-plug
%h5
Plugins
%p
With hundreds of plugins in the Update Center, Jenkins integrates
with practically every tool in the continuous integration and
continuous delivery toolchain.
.col-md-6.col-lg-4
.box.extend
%i.icon-puzzle-piece
%h5
Extensible
%p
Jenkins can be extended via its plugin architecture, providing
nearly infinite possibilities for what Jenkins can do.
.col-md-6.col-lg-4
.box.distributed
%i.icon-uniE602
%h5
Distributed
%p
Jenkins can easily distribute work across multiple machines,
helping drive builds, tests and deployments across multiple
platforms faster.
.container
.section.events
.container-fluid.events.no-margin
%div.row
%div#sidebar.col-md-12.events.horizontal
= partial('events.html.haml')
@ -34,4 +153,28 @@ homepage: true
.col-md-1
.col-md-2
= partial('sponsors.html.haml')
#sponsorsblock.jumbotron
.sponsors
%p
%strong
We thank the following organizations for their major commitments to
support the Jenkins project.
%ul
- sponsors.each do |logo, name, url|
%li
%a{:href => url, :target => '_blank'}
%img{:alt => name, :title => name, :src => expand_link("images/sponsors/#{logo}")}/
.supporters
%p
%strong
We thank the following organizations for their support of the Jenkins
project through free and/or open source licensing programs.
%ul
- supporters.each do |name, url|
%li
%a{:href => url, :target => '_blank'}
= name

View File

@ -0,0 +1,64 @@
var didScroll;
var lastScrollTop = 0;
var delta = 50;
$(window).scroll(function(event){
didScroll = true;
});
setInterval(function() {
if (didScroll) {
hasScrolled();
didScroll = false;
}
}, 250);
function hasScrolled() {
var st = $(this).scrollTop();
// Make sure they scroll more than delta
if (Math.abs(lastScrollTop - st) <= delta)
return;
if (st > lastScrollTop) {
// Scroll Down
$('.socialLinks').removeClass('showLabel');
} else {
// Scroll Up
if (st + $(window).height() < $(document).height()) {
$('.socialLinks').addClass('showLabel');
}
}
lastScrollTop = st;
}
function doyourthang(meh) {
var x = screen.width / 2 - 700 / 2;
var y = screen.height / 2 - 600 / 2;
window.open(meh.href, "", 'height=700,width=600,left=' + x + ',top=' + y);
}
// Youtube modal
$(function() {
$(".video").click(function () {
var theModal = $(this).data("target"),
videoSRC = $(this).attr("data-video"),
videoSRCauto = videoSRC + "?modestbranding=1&rel=0&html5=1&autoplay=1";
$(theModal + ' iframe').attr('src', videoSRCauto);
$(theModal + ' button.close').click(function () {
$(theModal + ' iframe').attr('src', videoSRC);
});
$(theModal).click(function () {
$(theModal + ' iframe').attr('src', videoSRC);
});
});
});
$("#videoModal").on('hide.bs.modal', function(){
var theModal = $(".video").data("target"),
videoSRC = $(".video").attr("data-video");
$(theModal + ' iframe').attr('src', videoSRC); //esc
});

513
content/js/wow.js Normal file
View File

@ -0,0 +1,513 @@
(function() {
var MutationObserver, Util, WeakMap, getComputedStyle, getComputedStyleRX,
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
Util = (function() {
function Util() {}
Util.prototype.extend = function(custom, defaults) {
var key, value;
for (key in defaults) {
value = defaults[key];
if (custom[key] == null) {
custom[key] = value;
}
}
return custom;
};
Util.prototype.isMobile = function(agent) {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent);
};
Util.prototype.createEvent = function(event, bubble, cancel, detail) {
var customEvent;
if (bubble == null) {
bubble = false;
}
if (cancel == null) {
cancel = false;
}
if (detail == null) {
detail = null;
}
if (document.createEvent != null) {
customEvent = document.createEvent('CustomEvent');
customEvent.initCustomEvent(event, bubble, cancel, detail);
} else if (document.createEventObject != null) {
customEvent = document.createEventObject();
customEvent.eventType = event;
} else {
customEvent.eventName = event;
}
return customEvent;
};
Util.prototype.emitEvent = function(elem, event) {
if (elem.dispatchEvent != null) {
return elem.dispatchEvent(event);
} else if (event in (elem != null)) {
return elem[event]();
} else if (("on" + event) in (elem != null)) {
return elem["on" + event]();
}
};
Util.prototype.addEvent = function(elem, event, fn) {
if (elem.addEventListener != null) {
return elem.addEventListener(event, fn, false);
} else if (elem.attachEvent != null) {
return elem.attachEvent("on" + event, fn);
} else {
return elem[event] = fn;
}
};
Util.prototype.removeEvent = function(elem, event, fn) {
if (elem.removeEventListener != null) {
return elem.removeEventListener(event, fn, false);
} else if (elem.detachEvent != null) {
return elem.detachEvent("on" + event, fn);
} else {
return delete elem[event];
}
};
Util.prototype.innerHeight = function() {
if ('innerHeight' in window) {
return window.innerHeight;
} else {
return document.documentElement.clientHeight;
}
};
return Util;
})();
WeakMap = this.WeakMap || this.MozWeakMap || (WeakMap = (function() {
function WeakMap() {
this.keys = [];
this.values = [];
}
WeakMap.prototype.get = function(key) {
var i, item, j, len, ref;
ref = this.keys;
for (i = j = 0, len = ref.length; j < len; i = ++j) {
item = ref[i];
if (item === key) {
return this.values[i];
}
}
};
WeakMap.prototype.set = function(key, value) {
var i, item, j, len, ref;
ref = this.keys;
for (i = j = 0, len = ref.length; j < len; i = ++j) {
item = ref[i];
if (item === key) {
this.values[i] = value;
return;
}
}
this.keys.push(key);
return this.values.push(value);
};
return WeakMap;
})());
MutationObserver = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (MutationObserver = (function() {
function MutationObserver() {
if (typeof console !== "undefined" && console !== null) {
console.warn('MutationObserver is not supported by your browser.');
}
if (typeof console !== "undefined" && console !== null) {
console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.');
}
}
MutationObserver.notSupported = true;
MutationObserver.prototype.observe = function() {};
return MutationObserver;
})());
getComputedStyle = this.getComputedStyle || function(el, pseudo) {
this.getPropertyValue = function(prop) {
var ref;
if (prop === 'float') {
prop = 'styleFloat';
}
if (getComputedStyleRX.test(prop)) {
prop.replace(getComputedStyleRX, function(_, _char) {
return _char.toUpperCase();
});
}
return ((ref = el.currentStyle) != null ? ref[prop] : void 0) || null;
};
return this;
};
getComputedStyleRX = /(\-([a-z]){1})/g;
this.WOW = (function() {
WOW.prototype.defaults = {
boxClass: 'wow',
animateClass: 'animated',
offset: 0,
mobile: true,
live: true,
callback: null,
scrollContainer: null
};
function WOW(options) {
if (options == null) {
options = {};
}
this.scrollCallback = bind(this.scrollCallback, this);
this.scrollHandler = bind(this.scrollHandler, this);
this.resetAnimation = bind(this.resetAnimation, this);
this.start = bind(this.start, this);
this.scrolled = true;
this.config = this.util().extend(options, this.defaults);
if (options.scrollContainer != null) {
this.config.scrollContainer = document.querySelector(options.scrollContainer);
}
this.animationNameCache = new WeakMap();
this.wowEvent = this.util().createEvent(this.config.boxClass);
}
WOW.prototype.init = function() {
var ref;
this.element = window.document.documentElement;
if ((ref = document.readyState) === "interactive" || ref === "complete") {
this.start();
} else {
this.util().addEvent(document, 'DOMContentLoaded', this.start);
}
return this.finished = [];
};
WOW.prototype.start = function() {
var box, j, len, ref;
this.stopped = false;
this.boxes = (function() {
var j, len, ref, results;
ref = this.element.querySelectorAll("." + this.config.boxClass);
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
results.push(box);
}
return results;
}).call(this);
this.all = (function() {
var j, len, ref, results;
ref = this.boxes;
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
results.push(box);
}
return results;
}).call(this);
if (this.boxes.length) {
if (this.disabled()) {
this.resetStyle();
} else {
ref = this.boxes;
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
this.applyStyle(box, true);
}
}
}
if (!this.disabled()) {
this.util().addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
this.util().addEvent(window, 'resize', this.scrollHandler);
this.interval = setInterval(this.scrollCallback, 50);
}
if (this.config.live) {
return new MutationObserver((function(_this) {
return function(records) {
var k, len1, node, record, results;
results = [];
for (k = 0, len1 = records.length; k < len1; k++) {
record = records[k];
results.push((function() {
var l, len2, ref1, results1;
ref1 = record.addedNodes || [];
results1 = [];
for (l = 0, len2 = ref1.length; l < len2; l++) {
node = ref1[l];
results1.push(this.doSync(node));
}
return results1;
}).call(_this));
}
return results;
};
})(this)).observe(document.body, {
childList: true,
subtree: true
});
}
};
WOW.prototype.stop = function() {
this.stopped = true;
this.util().removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
this.util().removeEvent(window, 'resize', this.scrollHandler);
if (this.interval != null) {
return clearInterval(this.interval);
}
};
WOW.prototype.sync = function(element) {
if (MutationObserver.notSupported) {
return this.doSync(this.element);
}
};
WOW.prototype.doSync = function(element) {
var box, j, len, ref, results;
if (element == null) {
element = this.element;
}
if (element.nodeType !== 1) {
return;
}
element = element.parentNode || element;
ref = element.querySelectorAll("." + this.config.boxClass);
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
if (indexOf.call(this.all, box) < 0) {
this.boxes.push(box);
this.all.push(box);
if (this.stopped || this.disabled()) {
this.resetStyle();
} else {
this.applyStyle(box, true);
}
results.push(this.scrolled = true);
} else {
results.push(void 0);
}
}
return results;
};
WOW.prototype.show = function(box) {
this.applyStyle(box);
box.className = box.className + " " + this.config.animateClass;
if (this.config.callback != null) {
this.config.callback(box);
}
this.util().emitEvent(box, this.wowEvent);
this.util().addEvent(box, 'animationend', this.resetAnimation);
this.util().addEvent(box, 'oanimationend', this.resetAnimation);
this.util().addEvent(box, 'webkitAnimationEnd', this.resetAnimation);
this.util().addEvent(box, 'MSAnimationEnd', this.resetAnimation);
return box;
};
WOW.prototype.applyStyle = function(box, hidden) {
var delay, duration, iteration;
duration = box.getAttribute('data-wow-duration');
delay = box.getAttribute('data-wow-delay');
iteration = box.getAttribute('data-wow-iteration');
return this.animate((function(_this) {
return function() {
return _this.customStyle(box, hidden, duration, delay, iteration);
};
})(this));
};
WOW.prototype.animate = (function() {
if ('requestAnimationFrame' in window) {
return function(callback) {
return window.requestAnimationFrame(callback);
};
} else {
return function(callback) {
return callback();
};
}
})();
WOW.prototype.resetStyle = function() {
var box, j, len, ref, results;
ref = this.boxes;
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
results.push(box.style.visibility = 'visible');
}
return results;
};
WOW.prototype.resetAnimation = function(event) {
var target;
if (event.type.toLowerCase().indexOf('animationend') >= 0) {
target = event.target || event.srcElement;
return target.className = target.className.replace(this.config.animateClass, '').trim();
}
};
WOW.prototype.customStyle = function(box, hidden, duration, delay, iteration) {
if (hidden) {
this.cacheAnimationName(box);
}
box.style.visibility = hidden ? 'hidden' : 'visible';
if (duration) {
this.vendorSet(box.style, {
animationDuration: duration
});
}
if (delay) {
this.vendorSet(box.style, {
animationDelay: delay
});
}
if (iteration) {
this.vendorSet(box.style, {
animationIterationCount: iteration
});
}
this.vendorSet(box.style, {
animationName: hidden ? 'none' : this.cachedAnimationName(box)
});
return box;
};
WOW.prototype.vendors = ["moz", "webkit"];
WOW.prototype.vendorSet = function(elem, properties) {
var name, results, value, vendor;
results = [];
for (name in properties) {
value = properties[name];
elem["" + name] = value;
results.push((function() {
var j, len, ref, results1;
ref = this.vendors;
results1 = [];
for (j = 0, len = ref.length; j < len; j++) {
vendor = ref[j];
results1.push(elem["" + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value);
}
return results1;
}).call(this));
}
return results;
};
WOW.prototype.vendorCSS = function(elem, property) {
var j, len, ref, result, style, vendor;
style = getComputedStyle(elem);
result = style.getPropertyCSSValue(property);
ref = this.vendors;
for (j = 0, len = ref.length; j < len; j++) {
vendor = ref[j];
result = result || style.getPropertyCSSValue("-" + vendor + "-" + property);
}
return result;
};
WOW.prototype.animationName = function(box) {
var animationName;
try {
animationName = this.vendorCSS(box, 'animation-name').cssText;
} catch (_error) {
animationName = getComputedStyle(box).getPropertyValue('animation-name');
}
if (animationName === 'none') {
return '';
} else {
return animationName;
}
};
WOW.prototype.cacheAnimationName = function(box) {
return this.animationNameCache.set(box, this.animationName(box));
};
WOW.prototype.cachedAnimationName = function(box) {
return this.animationNameCache.get(box);
};
WOW.prototype.scrollHandler = function() {
return this.scrolled = true;
};
WOW.prototype.scrollCallback = function() {
var box;
if (this.scrolled) {
this.scrolled = false;
this.boxes = (function() {
var j, len, ref, results;
ref = this.boxes;
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
if (!(box)) {
continue;
}
if (this.isVisible(box)) {
this.show(box);
continue;
}
results.push(box);
}
return results;
}).call(this);
if (!(this.boxes.length || this.config.live)) {
return this.stop();
}
}
};
WOW.prototype.offsetTop = function(element) {
var top;
while (element.offsetTop === void 0) {
element = element.parentNode;
}
top = element.offsetTop;
while (element = element.offsetParent) {
top += element.offsetTop;
}
return top;
};
WOW.prototype.isVisible = function(box) {
var bottom, offset, top, viewBottom, viewTop;
offset = box.getAttribute('data-wow-offset') || this.config.offset;
viewTop = (this.config.scrollContainer && this.config.scrollContainer.scrollTop) || window.pageYOffset;
viewBottom = viewTop + Math.min(this.element.clientHeight, this.util().innerHeight()) - offset;
top = this.offsetTop(box);
bottom = top + box.clientHeight;
return top <= viewBottom && bottom >= viewTop;
};
WOW.prototype.util = function() {
return this._util != null ? this._util : this._util = new Util();
};
WOW.prototype.disabled = function() {
return !this.config.mobile && this.util().isMobile(navigator.userAgent);
};
return WOW;
})();
}).call(this);

View File

@ -4,15 +4,20 @@ title: 'Jenkins Community Blog'
section: blog
---
%div.container.blog-post.no-margin
:ruby
page_index = page.posts.current_page_index
first_skip = false
second_skip = false
skip_window = 3
%div.container.blog-post
.row.body
.col-md-1
%div#content.col-md-8{:class => 'main-content with-sidebar'}
%div#content-top
%h2
= page.title
%div.blogintro
.blogintro
The Jenkins project has a lot going on between core/plugin development,
events and other open source automation related activities. To keep up with
it subscribe to our
@ -26,7 +31,39 @@ section: blog
follow us on Twitter
= partial('blogcardlist.html.haml', :posts => page.posts)
= page.posts.links
%div#sidebar.col-md-3.events.vertical
= partial('sidebar.html.haml')
%div
%nav
%ul.pagination
%li.page-item{:class => (page.posts.previous_page or 'disabled')}
%a.page-link{:href => (page.posts.previous_page and page.posts.previous_page.url)}
&laquo;
- page.posts.pages.each_index do |index|
- if index == 0
%li.page-item{:class => ((page_index == index) and 'active')}
%a.page-link{:href => expand_link('node')}
= index + 1
- elsif (index >= skip_window) && !first_skip
- first_skip = true
%li.page-item.disabled
%a.page-link{:href => '#'}
\...
- elsif (( index >= (page_index + skip_window)) && (index < ((page.posts.pages.size - skip_window) - 1)) && !second_skip )
- second_skip = true
%li.page-item.disabled
%a.page-link{:href => '#'}
\...
- elsif second_skip && ((index < (page.posts.pages.size - skip_window) - 1))
- next
- else
%li.page-item{:class => ((page_index == index) and 'active')}
%a.page-link{:href => expand_link("node/page/#{index + 1}.html")}
= index + 1
%li.page-item{:class => (page.posts.next_page or 'disabled')}
%a.page-link{:href => (page.posts.next_page and page.posts.next_page.url)}
&raquo;
.col-md-4.events.vertical
.content
= partial('events.html.haml')

View File

@ -10,145 +10,146 @@ section: participate
Welcome aboard!
%div
%div.col-lg-6
%h2
Participate
.container
.row
.col-lg-6
%h2
Participate
%p
As a participant, you take an active role in the community.
%p
As a participant, you take an active role in the community.
%h3
Meet
%p
Meet other Jenkins users and share your experiences.
%ul
%li
Organize or attend
%a{:href => '/projects/jam/'}
Jenkins Area Meetups.
%li
Attend other events with a Jenkins presence, like SCALE or FOSDEM.
%h3
Meet
%p
Meet other Jenkins users and share your experiences.
%ul
%li
Organize or attend
%a{:href => '/projects/jam/'}
Jenkins Area Meetups.
%li
Attend other events with a Jenkins presence, like SCALE or FOSDEM.
%h3
Help
%p
As an experienced user, you can help others get the most out of Jenkins.
%ul
%li
%a{:href => '/mailing-lists'}
jenkinsci-users mailing list
%li
%a{:href => '/chat'}
\#jenkins IRC channel on Freenode
%li
%a{:href => 'https://reddit.com/r/jenkinsci'}
\/r/jenkins on Reddit
%li
%a{:href => 'http://stackoverflow.com/tags/jenkins'}
Jenkins on Stack Overflow
%h3
Help
%p
As an experienced user, you can help others get the most out of Jenkins.
%ul
%li
%a{:href => '/mailing-lists'}
jenkinsci-users mailing list
%li
%a{:href => '/chat'}
\#jenkins IRC channel on Freenode
%li
%a{:href => 'https://reddit.com/r/jenkinsci'}
\/r/jenkins on Reddit
%li
%a{:href => 'http://stackoverflow.com/tags/jenkins'}
Jenkins on Stack Overflow
%h3
Discuss
%ul
%li
%a{:href => '/mailing-lists'}
Mailing lists
%li
%a{:href => '/chat'}
IRC channels
%h3
Discuss
%ul
%li
%a{:href => '/mailing-lists'}
Mailing lists
%li
%a{:href => '/chat'}
IRC channels
%h3
Review changes
%p
Help review changes to code or documentation.
%ul
%li
%a{:href => 'https://github.com/pulls?utf8=%E2%9C%93&q=is%3Aopen+is%3Apr+team%3Ajenkinsci%2Fcode-reviewers'}
List of open pull requests for which
%strong
code reviews
have been requested
%li
%a{:href => 'https://github.com/pulls?utf8=%E2%9C%93&q=is%3Aopen+is%3Apr+team%3Ajenkins-infra%2Fcopy-editors'}
List of open pull requests for which
%strong
copy editing
has been requested
%h3
Review changes
%p
Help review changes to code or documentation.
%ul
%li
%a{:href => 'https://github.com/pulls?utf8=%E2%9C%93&q=is%3Aopen+is%3Apr+team%3Ajenkinsci%2Fcode-reviewers'}
List of open pull requests for which
%strong
code reviews
have been requested
%li
%a{:href => 'https://github.com/pulls?utf8=%E2%9C%93&q=is%3Aopen+is%3Apr+team%3Ajenkins-infra%2Fcopy-editors'}
List of open pull requests for which
%strong
copy editing
has been requested
%h3
Provide feedback
%p
We cannot fix what we don't know is broken. So let us know about it!
%ul
%li
%a{:href => 'https://wiki.jenkins-ci.org/display/JENKINS/How+to+report+an+issue'}
How to report an issue in Jenkins
%li
The
%a{:href => '/changelog'}
changelog
has an integrated feedback mechanism. Just select
%em
Community ratings
and vote using the weather icons.
%li
Likewise, the
%a{:href => '/changelog-stable'}
LTS changelog
provides the same functionality.
%h3
Provide feedback
%p
We cannot fix what we don't know is broken. So let us know about it!
%ul
%li
%a{:href => 'https://wiki.jenkins-ci.org/display/JENKINS/How+to+report+an+issue'}
How to report an issue in Jenkins
%li
The
%a{:href => '/changelog'}
changelog
has an integrated feedback mechanism. Just select
%em
Community ratings
and vote using the weather icons.
%li
Likewise, the
%a{:href => '/changelog-stable'}
LTS changelog
provides the same functionality.
%div.col-lg-6
%h2
Contribute
.col-lg-6
%h2
Contribute
%p
As a contributor, you actively help improve Jenkins and plugins by contributing code, documentation, translations, or tests.
%p
As a contributor, you actively help improve Jenkins and plugins by contributing code, documentation, translations, or tests.
%h3
Write code
%p
Do you enjoy writing code? There are numerous plugins and components for you to contribute to.
%a{:href => 'code'}
Learn more.
%p
Are you an established contributor to Jenkins and looking for a new challenge?
The Jenkins Security Team is looking for members willing to help improve Jenkins security.
%a{:href => '/security#team'}
Learn more.
%h3
Write code
%p
Do you enjoy writing code? There are numerous plugins and components for you to contribute to.
%a{:href => 'code'}
Learn more.
%p
Are you an established contributor to Jenkins and looking for a new challenge?
The Jenkins Security Team is looking for members willing to help improve Jenkins security.
%a{:href => '/security#team'}
Learn more.
%h3
Translate
%p
Jenkins is used all over the world by speakers of dozens of different languages. If you're fluent in languages other than English, consider improving support for those languages
%a{:href => 'https://wiki.jenkins-ci.org/display/JENKINS/Internationalization'}
by contributing to core or plugin localizations.
%h3
Translate
%p
Jenkins is used all over the world by speakers of dozens of different languages. If you're fluent in languages other than English, consider improving support for those languages
%a{:href => 'https://wiki.jenkins-ci.org/display/JENKINS/Internationalization'}
by contributing to core or plugin localizations.
%h3
Document
%p
Improve the documentation of Jenkins and plugins to make it easier for others to get started.
%h3
Document
%p
Improve the documentation of Jenkins and plugins to make it easier for others to get started.
%ul
%li
We coordinate and discuss documenting efforts using the
%a{:href => 'https://groups.google.com/forum/#!forum/jenkinsci-docs'}
jenkinsci-docs
mailing list and the
%a{:href => '/chat/'}
\#jenkins-community IRC channel.
%li
%a{:href => 'https://github.com/jenkins-infra/jenkins.io/blob/master/CONTRIBUTING.adoc#adding-documentation'}
Learn how to contribute documentation to jenkins.io
%ul
%li
We coordinate and discuss documenting efforts using the
%a{:href => 'https://groups.google.com/forum/#!forum/jenkinsci-docs'}
jenkinsci-docs
mailing list and the
%a{:href => '/chat/'}
\#jenkins-community IRC channel.
%li
%a{:href => 'https://github.com/jenkins-infra/jenkins.io/blob/master/CONTRIBUTING.adoc#adding-documentation'}
Learn how to contribute documentation to jenkins.io
%h3
Test
%p
The Jenkins project relies heavily on automated tests to ensure stability and consistency of features. By contributing automated tests that match your use cases, you can help prevent regressions that would affect you.
%ul
%li
%a{:href => 'https://github.com/jenkinsci/acceptance-test-harness'}
Acceptance Test Harness (ATH) on GitHub
%li
%a{:href => 'https://github.com/jenkinsci/jenkins-test-harness'}
Jenkins Unit Test Harness on GitHub
%h3
Test
%p
The Jenkins project relies heavily on automated tests to ensure stability and consistency of features. By contributing automated tests that match your use cases, you can help prevent regressions that would affect you.
%ul
%li
%a{:href => 'https://github.com/jenkinsci/acceptance-test-harness'}
Acceptance Test Harness (ATH) on GitHub
%li
%a{:href => 'https://github.com/jenkinsci/jenkins-test-harness'}
Jenkins Unit Test Harness on GitHub

View File

@ -4,6 +4,7 @@ title: "Jenkins Press Information"
section: press
---
:toc:
If you're a journalist, blogger or anybody else who might consider themselves
"press" this page should help you refer to, explain or otherwise cite the
@ -78,6 +79,62 @@ to be used over the `headshot.png` image.
If you have any questions about artwork, please ask one of the <<Press Contacts>>.
== About Blue Ocean
.Elevator Pitch
""
Blue Ocean is a new user experience for Jenkins based on a personalizable,
modern design that allows users to graphically create, visualize and diagnose
Continuous Delivery (CD) Pipelines
""
=== Screenshots
.Pipeline Editor
""
Developers of any skill level can create Continuous Delivery pipelines from start to finish using the intuitive and visual pipeline editor.
""
image:/images/blueocean/press/pipeline-editor.png[Editor, role=center]
image:/images/blueocean/press/pipeline-editor-step.png[Editor with open step, role=center]
.Pipeline visualization
""
Enables developers to visually represent pipelines in a way even their boss's boss can understand, improving clarity into the CD process for the whole organization
""
image:/images/blueocean/press/pipeline-visualization.png[Pipeline visualization, role=center]
.Pipeline diagnosis
""
Developers locate automation problems instantly without endlessly scanning through logs or navigating through many screens.
""
image:/images/blueocean/press/pipeline-diagnosis.png[Pipeline diagnosis, role=center]
.Personalized dashboard
""
Developers can make Jenkins their own by customizing their dashboard so that they only see the Pipelines that matter to them.
""
image:/images/blueocean/press/personalization.png[Personalized dashboard, role=center]
.Github integration
""
Pipelines are run for all feature branches and pull requests, with their status reported back to Github, so the whole team knows if your changes need work or are good to go.
""
image:/images/blueocean/press/github-status.png[Github integration, role=center]
=== Video
Also available for download in link:https://www.dropbox.com/s/1824kdeh0czdgna/Blue_Ocean_01_End_Bumper.mov?dl=0[full high definition].
++++
<center>
<iframe width="853" height="480"
src="https://www.youtube-nocookie.com/embed/k_fVlU1FwP4?rel=0" frameborder="0"
allowfullscreen></iframe>
</center>
++++
== Press Contacts
The following individuals can be reached out to for comment, clarification

View File

@ -1,324 +0,0 @@
---
layout: project
title: "Blue Ocean"
section: projects
tags:
- blueocean
---
++++
<style>
.jumbotron.featured {
background: #042E54 url(/images/post-images/blueocean/weather-icons.png) no-repeat center;
background-size: cover;
position: relative;
overflow: hidden;
width: 100%;
height: 160px;
}
</style>
++++
Blue Ocean is a new project that rethinks the user experience of Jenkins.
Designed from the ground up for Jenkins Pipeline and compatible with Freestyle
jobs, Blue Ocean reduces clutter and increases clarity for every member of your
team through the following key features:
* *Sophisticated visualizations* of CD pipelines, allowing for fast and intuitive comprehension of software pipeline status.
* *Pipeline editor* (In Development) that makes automating CD pipelines approachable by guiding the user through an intuitive and visual process to create a pipeline.
* *Personalization* of the Jenkins UI to suit the role-based needs of each member of the DevOps team.
* *Pinpoint precision* when intervention is needed and/or issues arise. The Blue Ocean UI shows where in the pipeline attention is needed, facilitating exception handling and increasing productivity.
* *Native integration for branch and pull requests* enables maximum developer productivity when collaborating on code with others in GitHub and Bitbucket.
== Use the beta
Blue Ocean is available today as a plugin from the update center
for Jenkins servers running Jenkins 2.7.x and above.
=== From Jenkins
To start using Blue Ocean from an existing Jenkins:
. Login to your Jenkins server
. Click `Manage Jenkins` in the sidebar then `Manage Plugins`
. Choose the `Available` tab and use the search bar to find `Blue Ocean beta`
. Click the checkbox in the Install column
. Click either `Install without restart` or `Download now and install after restart`
. When installation is complete click the `Use Blue Ocean` button in the classic UI
=== From Docker
The Docker container is continuously updated to contain the latest Blue Ocean and Jenkins LTS releases.
To start a new Jenkins with Blue Ocean installed:
. Install Docker
. Run `docker run -p 8888:8080 jenkinsci/blueocean:latest`
. Browse to `http://localhost:8888/blue`
== Join the community
There a a few ways you can join the community:
. Chat with the community and development team on Gitter image:https://badges.gitter.im/jenkinsci/blueocean-plugin.svg[link="https://gitter.im/jenkinsci/blueocean-plugin?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge"]
. Request features or report bugs against the https://issues.jenkins-ci.org/[`blueocean-plugin` component in JIRA].
. Subscribe and ask questions on the https://groups.google.com/forum/#!forum/jenkinsci-users[Jenkins Users mailing list].
. Developer? We've https://issues.jenkins-ci.org/issues/?filter=16142[labeled a few issues] that are great for anyone wanting to get started developing Blue Ocean. Don't forget to drop by the Gitter chat and introduce yourself!
== Quick tour
Here is a quick tour of Blue Ocean.
image:/images/post-images/blueocean/pipeline-activity.png[Pipeline activity, role=center]
=== Pipelines
Blue Ocean is built from the ground up for Pipeline and uses its related concepts as a
foundation to enable use cases that Jenkins hasn't handled before. The visualization
makes it easy to follow along the flow of your Pipeline and gives you clarity
into your Continuous Delivery processes.
image:/images/post-images/blueocean/successful-pipeline.png[Successful Pipeline, role=center]
We know many developers spend a lot of time staring at logs in Jenkins. Thats
why weve broken up the log broken up step by step to make it much simpler to navigate.
Gone are the days that we all spend scrolling through log files that are 10s of
thousands or 100s of thousands of lines long.
When you open the pipeline visualisation you can immediately identify what
problem that are causing the Pipeline to fail.
image:/images/post-images/blueocean/failing-pipeline.png[Successful Pipeline, role=center]
=== Personalized Dashboard
The Personalized Dashboard surfaces a single developer the things that they care
about so that they can work better with their team. It responds
preemptively to your activity showing you the status of Pipelines that you are
interested in.
If a developer favorites a Pipeline or one of its branches it will appear on the
dashboard. Pipelines needed the developers attention, such as failing Pipelines,
appear at the top of the dashboard.
And when the developer creates a branch in Git, Blue Ocean will automatically
favourite it for them. When the branch is deleted the Pipeline's branch is
removed from view.
image:/images/post-images/blueocean/personalized-dashboard.png[Personalized dashboard, role=center]
=== Branches and Pull Requests
Blue Ocean uses Jenkins Pipeline to discover new branches with `Jenkinsfile`s and
runs them for you so that you are testing your Pipeline with every new feature
branch that you create.
image:/images/post-images/blueocean/pipeline-branches.png[Branches, role=center]
If a developer opens a Pull Request against your repository, Jenkins will build it
using your Pipeline and update Github or Bitbucket with the status of the Pipeline.
This is extremely useful for reviewers of Pull Requests as successful Pipelines
improve confidence that changes will integrate without causing havoc.
image:/images/post-images/blueocean/github-pipeline-status.png[Github Pipeline status, role=center]
=== Pipeline Editor (Coming Soon!)
The Pipeline Editor is the simplest way for anyone wanting to get started with
creating Pipelines in Jenkins. It's also great way for advanced Jenkins users
to start adopting Pipeline.
It allows developers to break up their Pipeline into different
stages and parallelize tasks that can occur at the same time - its all up to you.
When you are done authoring your Pipeline, the pipeline definition is saved back
to your repository as a `Jenkinsfile`.
If you ever need to change the Pipeline again,
the user interfaces allows you to jump back in into the editor to author the
Pipeline at any time or you can do so in code by editing the `Jenkinsfile` directly.
image:/images/post-images/blueocean/pipeline-editor.png[Pipeline Editor, role=center]
=== Design Language
Jenkins is nothing without its ecosystem of 1000+ plugins and we believe it's
important that Blue Ocean brings them along for the ride. Most developers in
our community don't consider themselves hot shot frontend developers or
designers, that's why we are introducing a consistent design language and
accompanying JavaScript and CSS framework. If you're familiar with Google's
link:https://www.google.com/design/spec/material-design/introduction.html[Material
Design], Twitter link:http://getbootstrap.com/[Bootstrap], Apple's
link:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/[Human
Interface Guidelines] or Microsoft
link:https://msdn.microsoft.com/en-us/library/windows/apps/hh465424.aspx[Modern
UI] you will be right at home here.
For those curious about the technology stack here, we are working with a
combination of
link:https://medium.com/sons-of-javascript/javascript-an-introduction-to-es6-1819d0d89a0f#.72c3e6snq[ES6]
and
link:https://medium.com/@tomastrajan/introduction-to-react-and-flux-6043d63610cd#.stjh5un3g[React]
which we believe will be provide a smooth learning experience for those strong
in Java skills but not so confident in CSS/JS. React's component based way of
describing user interfaces also complements the way that Jenkins Extensibility
works. We've extended the plugin system and toolchain to work with React
components.
image:/images/post-images/blueocean/jdl.png[Jenkins Design Language, role=center]
== Videos
=== Introducing Blue Ocean
++++
<center>
<iframe width="853" height="480"
src="https://www.youtube-nocookie.com/embed/3dITffteCD4?rel=0" frameborder="0"
allowfullscreen></iframe>
</center>
++++
=== Jenkins World 2016
++++
<center>
<iframe width="853" height="480"
src="https://www.youtube-nocookie.com/embed/mn61VFdScuk?rel=0" frameborder="0"
allowfullscreen></iframe>
</center>
++++
== FAQ
=== Why does this project exist?
The world has moved on from developer tools that are purely functional to
developer tools being part of a "developer experience". That is to say, it's no
longer about a single tool but the many tools developers use throughout the day
and how they work together to achieve a workflow that's beneficial for the
developer - this is Developer Experience.
Developer tools companies like Heroku, Atlassian and Github have raised the bar
for what is considered good developer experience, and developers are
increasingly expecting exceptional design. In recent years developers are
becoming more rapidly attracted to tools that are not only functional but are
designed to fit into their workflow seamlessly and are a joy to use. This shift
represents a higher standard of design and user experience that Jenkins needs
to rise to meet.
Creating and visualising continuous delivery pipelines is something valuable
for many Jenkins users and this is demonstrated in the 5+ plugins that the
community has created to meet their needs. To us this indicates a need to
revisit how Jenkins currently expresses these concepts and consider delivery
pipelines as a central theme to the Jenkins user experience.
It's not just continuous delivery concepts but the tools that developers use
every day Github, Bitbucket, Slack, HipChat, Puppet or Docker. It's about
more than Jenkins it's the developer workflow that surrounds Jenkins that
spans multiple tools.
New teams have little time for learning to assemble their own Jenkins
experience they want to improve their time to market by shipping better
software faster. Assembling that ideal Jenkins experience is something we can
work together as a community of Jenkins users and contributors to define. As
time progresses, developers' expectations of good user experience will change
and the mission of Blue Ocean will enable the Jenkins project to respond.
The Jenkins community has poured its sweat and tears into building the most
technically capable and extensible software automation tool in existence. Not
doing anything to revolutionize the Jenkins developer experience today is just
inviting someone else in closed source to do it.
=== Where is the name from?
The name Blue Ocean comes from the book
link:https://en.wikipedia.org/wiki/Blue_Ocean_Strategy[Blue Ocean Strategy]
where instead of looking at strategic problems within a contested space you
look at problems in the larger uncontested space. To put this more simply,
consider this quote from ice hockey legend Wayne Gretzky: "skate to where the
puck is going to be, not where it has been".
=== Where can I find the source code?
The source code can be found on Github:
* link:http://github.com/jenkinsci/blueocean-plugin[Blue Ocean]
* link:http://github.com/jenkinsci/jenkins-design-language[Jenkins Design Language]
=== How will Jenkins users consume the Blue Ocean UI?
Blue Ocean is packaged as a plugin and made available for installation via
the update center. The aim is to deliver it without modifying your existing
Jenkins configuration so you can run it side by side with the classic Jenkins
UI and switch between the two whenever you like.
=== What does this mean for the classic Jenkins UI?
The intention is that as Blue Ocean matures there will be less and less reasons
for users to go back to the existing UI.
For example, in the first version we will mainly be targeting Pipeline jobs.
You might be able to see your existing non-pipeline jobs in Blue Ocean but it
might not be possible to configure them from the new UI for some time. This
means users will have to jump back to the classic UI for configuration of
non-pipeline jobs.
There are likely going to be more examples of this and that's why the classic
UI will still be important in the long term.
=== What about my Freestyle jobs?
Blue Ocean aims to deliver a great experience around Pipeline and be compatible
with any Freestyle jobs that you have configured in your system. However, they
won't be able to benefit from any of the features built for Pipelines for
example, Pipeline visualization.
As Blue Ocean is designed to be extensible it will be possible for the
community to extend it for other job types in the future.
=== Is this a CloudBees project?
The short answer is *"no"*. The project has been originated and sponsored by
CloudBees, but it is a *100% open project* (including sources, roadmaps, public
discussions, etc.). Everybody is invited to contribute to it.
To quote link:https://github.com/i386[James Dumay] (Blue Ocean Product Manager
at CloudBees):
____
While the project's inception has happened within CloudBees we see this project
being one owned by the community. At CloudBees we recognize the importance of a
vibrant and healthy Jenkins community, we see the company and community working
in symbiosis: a thriving developer community is good for CloudBees and CloudBees
provides time and money back into the community to make it stronger. Blue Ocean
is our way of giving back and strengthening. To that effect we've put together a
new a team of product, UX, frontend and backend developers (some old faces and a
lot of new ones!) that will be working on this project with the community full
time
____
=== What does this mean for my plugins?
Extensibility is a pretty core concept to Jenkins, so being able to extend the
Blue Ocean UI is important. Based on some research, we worked out a way to
allow "<ExtensionPoint name=..>" to be used in the markup of Blue Ocean,
leaving places for plugins to contribute to the UI (plugins can have their own
Blue Ocean extension points, just like they do today in Jenkins). Blue Ocean
itself (as it is so far) is implemented using these extension points.
Extensions are delivered by plugins, as normal, only if they wish to contribute
to the Blue Ocean experience they will have some additional javascript that
provides extensions.
=== What technologies are currently in use?
Blue Ocean is built as a collection of Jenkins plugins itself. There is one key
difference, however. It provides both its own endpoint for http requests and
delivers up html/javascript via a different path, without the existing Jenkins
UI markup/scripts. React.js and ES6 are used to deliver the javascript
components of Blue Ocean. Inspired by this excellent open source project
(link:https://nylas.com/blog/react-plugins[react-plugins]) an <ExtensionPoint>pattern was
established, that allows extensions to come from any Jenkins plugin (only with
Javascript) and should they fail to load, have failures isolated.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

View File

@ -0,0 +1,162 @@
---
layout: default
title: Blue Ocean
css:
- '/assets/bower/bootstrap/css/bootstrap.min.css'
- '/css/blueocean-animate.css'
- '/css/blueocean-style.css'
opengraph:
image: 'img/blueocean.gif'
---
%header#header.header
.skew
.container.wow.fadeIn{"data-wow-delay" => "0.5s"}
.row
.header-inner.col-lg-12
.logo
= partial('logo.html.haml')
%h1.intro-title
%span>
Introducing
Jenkins Blue Ocean 1.0
%a.btn.btn-secondary{:href => expand_link('doc/book/blueocean')}
Documentation
%a.btn.btn-primary{:href => expand_link('doc/book/blueocean')}
Get started
%section.intro.wow.fadeInUp{"data-wow-delay" => "0.7s"}
.container
.row
.col-xs-12.col-sm-11.col-lg-10.col-xl-9
%a.video{"data-target" => "#videoModal", "data-toggle" => "modal", "data-video" => "https://www.youtube.com/embed/k_fVlU1FwP4"}
%video{:autoplay => "", :loop => "", :muted => "", :poster => "img/video.png"}
%source{:src => "img/video.webm", :type => "video/webm"}
%source{:src => "img/video.mp4", :type => "video/mp4"}
%span.ion-play
.col-xs-12.col-sm-10.push-sm-2.col-md-8.push-md-4.col-lg-5.push-lg-7
.introblurb.wow.fadeInUp{"data-wow-delay" => "0.1s"}
%h2 Continous Delivery is no longer for the experts
%p Thats why weve built Blue Ocean; the continuous delivery tool for teams just like yours.
%p
Its a brand new way to use Jenkins that even your bosss boss can understand.
%span.emoji 😉
%span.emoji 🙌
%a.btn.btn-secondary{:href => expand_link('doc/book/blueocean'), :role => "button"} Get started
%section.features
.container
.row
.col-xl-10.push-xl-1
.featuresblurb.col-md-10.push-md-1.col-lg-8.push-lg-2
%h2 Continuous Delivery for every team
%p Blue Ocean puts Continuous Delivery in reach of any team without sacrificing the power and sophistication of Jenkins.
%br/
.row
.col-lg-4.col-md-6.col-sm-6.wow.fadeIn{"data-wow-delay" => "0.1s"}
.icon
%span.ion-edit
%h3 Visual Pipeline Editor
%p.smaller Create your first Continuous Delivery pipeline from start to finish.
.col-lg-4.col-md-6.col-sm-6.wow.fadeIn{"data-wow-delay" => "0.2s"}
.icon
%span.ion-eye
%h3 Pipeline visualization
%p.smaller
Visually represent pipelines so that even your bosss boss can understand.
.clearfix.hidden-lg-up
.col-lg-4.col-md-6.col-sm-6.wow.fadeIn{"data-wow-delay" => "0.3s"}
.icon
%span.ion-ios-pulse-strong
%h3 Diagnosis
%p.smaller
Diagnose problems instantly and say
%br.hidden-lg-down/
%em good-riddance
to endlessly scanning through logs.
.clearfix.hidden-md-down
.col-lg-4.col-md-6.col-sm-6.wow.fadeIn{"data-wow-delay" => "0.4s"}
.icon
%span.ion-social-github
%h3 Github & Git
%p.smaller Run the pipleine for every feature branch and pull request.
.clearfix.hidden-lg-up
.col-lg-4.col-md-6.col-sm-6.wow.fadeIn{"data-wow-delay" => "0.5s"}
.icon
%span.ion-person
%h3 Personalization
%p.smaller Customize your dashboard so that you only see pipelines that matter to you.
.col-lg-4.col-md-6.col-sm-6.wow.fadeIn{"data-wow-delay" => "0.6s"}
.icon
%svg{:height => "24px", :version => "1.1", :viewbox => "0 0 24 24", :width => "24px", :xmlns => "http://www.w3.org/2000/svg", "xmlns:xlink" => "http://www.w3.org/1999/xlink"}
%path#Combined-Shape{:d => "M7.38341175,23.0798118 C3.04752489,21.2711041 0,16.9914458 0,12 C0,5.372583 5.372583,0 12,0 C18.627417,0 24,5.372583 24,12 C24,16.9914458 20.9524751,21.2711041 16.6165883,23.0798118 L13.5388628,15.6932706 C14.9841584,15.090368 16,13.6638153 16,12 C16,9.790861 14.209139,8 12,8 C9.790861,8 8,9.790861 8,12 C8,13.6638153 9.01584163,15.090368 10.4611372,15.6932706 L7.38341175,23.0798118 Z", :fill => "#000000", "fill-rule" => "evenodd", :stroke => "none"}
%h3 100% Open Source
%p.smaller
Blue Ocean is 100% free and open source software. Yup, you heard right —
%em free!
%section.props
.skew
.container
.row
.col-lg-4.col-md-6.wow.fadeIn{"data-wow-delay" => "0.2s"}
%blockquote.twitter-tweet{"data-cards" => "hidden", "data-lang" => "en"}
%p{:dir => "ltr", :lang => "en"}>
I've just been testing
%a{:href => "https://twitter.com/jenkinsci"} @jenkinsci
with the new UI/UX. Awesome! Very good job! Creating pipelines is now dead simple.
%a{:href => "https://t.co/dSFlauhpxd"} pic.twitter.com/dSFlauhpxd
Jochen Breuer (@mr_brejoc)
%a{:href => "https://twitter.com/mr_brejoc/status/846108945794191361"} March 26, 2017
.col-lg-4.col-md-6.wow.fadeIn{"data-wow-delay" => "0.4s"}
%blockquote.twitter-tweet{"data-conversation" => "none", "data-lang" => "en"}
%p{:dir => "ltr", :lang => "en"}>
%a{:href => "https://twitter.com/i386"} @i386
blue ocean is life 👌🏻 you have made work fun again
— Gabriel Csapo (@gabriel_csapo)
%a{:href => "https://twitter.com/gabriel_csapo/status/845506373785796608"} March 25, 2017
.col-lg-4.hidden-md-down.wow.fadeIn{"data-wow-delay" => "0.6s"}
%blockquote.twitter-tweet{"data-lang" => "en"}
%p{:dir => "ltr", :lang => "en"}>
%a{:href => "https://twitter.com/hashtag/blueocean?src=hash"} #blueocean
is going to change the way you use
%a{:href => "https://twitter.com/jenkinsci"} @jenkinsci
%a{:href => "https://twitter.com/hashtag/ModernUI?src=hash"} #ModernUI
%a{:href => "https://t.co/bD4qaOGQLs"} https://t.co/bD4qaOGQLs
— Mario Cruz (@mariocruz)
%a{:href => "https://twitter.com/mariocruz/status/736250745725550593"} May 27, 2016
%section.cta
.container
.row
.col-md-10.push-md-1.col-lg-8.push-lg-2.col-xl-6.push-xl-3.wow.fadeIn{"data-wow-delay" => "0.3s"}
%h2 Continuous Delivery shouldnt be hard
%p
Blue Ocean focuses on the needs of regular developers
= succeed "." do
%em just like you
%p We do all the hard work making things simple so you can get back to building your next big thing.
%a.btn.btn-secondary{:href => "#", :role => "button"} Get started
.socials.wow.fadeIn{"data-wow-delay" => "4s", "data-wow-duration" => ".5s"}
%a.socialLinks.socialsFacebook{:href => "https://www.facebook.com/sharer/sharer.php?u=https%3A//jenkins.io/projects/blueocean/", :onclick => "doyourthang(this); return false;", :target => "_blank"}
%i.icon.ion-social-facebook
%p.socialLabel Share
%a.socialLinks.socialsTwitter{:href => "https://twitter.com/share?url=http%3A%2F%2Fjenkins.io/projects/blueocean/&\r\n related=jenkinsci%2Ccloudbees&hashtags=jenkinsci,devops&text=Introducing%20Jenkins%20Blue%20Ocean%201.0%20%E2%80%93%20Continuous%20Delivery%20for%20every%20team.", :onclick => "doyourthang(this); return false;", :target => "_blank"}
%i.icon.ion-social-twitter
%p.socialLabel Share
%a.socialLinks.socialsLinkedin{:href => "https://www.linkedin.com/shareArticle?mini=true&url=http%3A//jenkins.io/projects/blueocean/&title=Introducing%20Jenkins%20Blue%20Ocean%201.0&summary=Jenkins%20Blue%20Ocean%20%E2%80%93%20Continuous%20Delivery%20for%20every%20team&source=", :onclick => "doyourthang(this); return false;", :target => "_blank"}
%i.icon.ion-social-linkedin
%p.socialLabel Share
#videoModal.modal.fade{"aria-hidden" => "true", "aria-labelledby" => "myModalLabel", :role => "dialog", :tabindex => "-1"}
.modal-dialog.modal-lg
.modal-content
.modal-body
%button.close{"aria-label" => "Close", "data-dismiss" => "modal", :type => "button"}
%span{"aria-hidden" => "true"}
%i.icon.ion-ios-close-outline
%iframe{:allowfullscreen => "", :frameborder => "0", :height => "490", :src => "", :width => "100%"}
%script{:src => expand_link('js/wow.js'), :type => "text/javascript"}
:javascript
new WOW().init();
%script{:charset => "utf-8", :src => expand_link('js/blueocean-landing-script.js')}

View File

@ -27,7 +27,7 @@ plugins which effortlessly retain the look and feel of the Blue Ocean user
experience.
link:/projects/blueocean[*Learn more*]
link:blueocean[*Learn more*]
---
@ -48,7 +48,7 @@ in completing their summer projects.
The Jenkins project participated in the Google Summer of Code 2016 with
link:https://summerofcode.withgoogle.com/organizations/5668199471251456/[five student projects].
link:/projects/gsoc[*Learn more*]
link:gsoc[*Learn more*]
---
@ -66,7 +66,7 @@ developed to make the development of Jenkins core and plugins more efficient.
There are various sub-groups and opportunities to contribute to the
link:https://github.com/jenkins-infra[Jenkins project's infrastructure].
link:/projects/infrastructure[*Learn more*]
link:infrastructure[*Learn more*]
---
@ -86,6 +86,6 @@ Jenkins Area Meetups are driven by local organizers but receive support from
the Jenkins project via swag (stickers, etc), promotion, and help bootstrapping
and operating the meetup group.
link:/projects/jam[*Learn more*]
link:jam[*Learn more*]
---