Finish CI guide.
This commit is contained in:
		
							parent
							
								
									b79be6d320
								
							
						
					
					
						commit
						e2de7ab0c7
					
				| 
						 | 
				
			
			@ -14,11 +14,57 @@ private repositories.
 | 
			
		|||
[0]: https://travis-ci.org/
 | 
			
		||||
[1]: https://github.com/
 | 
			
		||||
 | 
			
		||||
## Enabling Travis and GitHub
 | 
			
		||||
 | 
			
		||||
Enabling Travis builds for your GitHub repository is pretty simple:
 | 
			
		||||
 | 
			
		||||
1. Go to your profile on travis-ci.org: https://travis-ci.org/profile/username
 | 
			
		||||
2. Find the repository for which you're interested in enabling builds.
 | 
			
		||||
3. Click the slider on the right so it says "ON" and is a dark grey.
 | 
			
		||||
4. Optionally configure the build by clicking on the wrench icon. Further
 | 
			
		||||
   configuration happens in you `.travis.yml` file. More details on that
 | 
			
		||||
   below.
 | 
			
		||||
 | 
			
		||||
## The Test Script
 | 
			
		||||
 | 
			
		||||
When testing static sites, there is no better tool than [html-proofer][].
 | 
			
		||||
The simplest test script simply runs `jekyll build` and ensures that Jekyll
 | 
			
		||||
doesn't fail to build the site. It doesn't check the resulting site, but it
 | 
			
		||||
does ensure things are built properly.
 | 
			
		||||
 | 
			
		||||
## Enabling Travis and GitHub
 | 
			
		||||
When testing Jekyll output, there is no better tool than [html-proofer][2].
 | 
			
		||||
This tool checks your resulting site to ensure all links and images exist.
 | 
			
		||||
Utilize it either with the convenient `html-proof` command-line executable,
 | 
			
		||||
or write a Ruby script which utilizes the gem.
 | 
			
		||||
 | 
			
		||||
### The `html-proof` Executable
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
jekyll build
 | 
			
		||||
html-proof ./_site
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Some options can be specified via command-line switches. Check out the
 | 
			
		||||
`html-proofer` README for more information about these switches, or run
 | 
			
		||||
`html-proof --help` locally.
 | 
			
		||||
 | 
			
		||||
### The `html/proofer` Library
 | 
			
		||||
 | 
			
		||||
You can also invoke `html-proofer` in Ruby scripts (e.g. in a Rakefile):
 | 
			
		||||
 | 
			
		||||
```ruby
 | 
			
		||||
#!/usr/bin/env ruby
 | 
			
		||||
 | 
			
		||||
require 'html/proofer'
 | 
			
		||||
HTML::Proofer.new("./_site").run
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Options are given as a second argument to `.new`, and are encoded in a
 | 
			
		||||
symbol-keyed Ruby Hash. More information about the configuration options,
 | 
			
		||||
check out `html-proofer`'s README file.
 | 
			
		||||
 | 
			
		||||
[2]: https://github.com/gjtorikian/html-proofer
 | 
			
		||||
 | 
			
		||||
## Configuring Your Travis Builds
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -26,3 +72,105 @@ This file is used to configure your Travis builds. Because Jekyll is built
 | 
			
		|||
with Ruby and requires RubyGems to install, we use the Ruby language build
 | 
			
		||||
environment. Below is a sample `.travis.yml` file, and what follows that is
 | 
			
		||||
an explanation of each line.
 | 
			
		||||
 | 
			
		||||
```yaml
 | 
			
		||||
language: ruby
 | 
			
		||||
rvm:
 | 
			
		||||
- 2.1
 | 
			
		||||
script: ./script/cibuild
 | 
			
		||||
 | 
			
		||||
# branch whitelist
 | 
			
		||||
branches:
 | 
			
		||||
  only:
 | 
			
		||||
  - gh-pages     # test the gh-pages branch
 | 
			
		||||
  - /pages-(.*)/ # test every branch which starts with "pages-"
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Ok, now for an explanation of each line:
 | 
			
		||||
 | 
			
		||||
{% highlight yaml %}
 | 
			
		||||
language: ruby
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
This line tells Travis to use a Ruby build container. It gives your script
 | 
			
		||||
access to Bundler, RubyGems, and and Ruby runtime.
 | 
			
		||||
 | 
			
		||||
{% highlight yaml %}
 | 
			
		||||
rvm:
 | 
			
		||||
- 2.1
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
RVM is a popular Ruby Version Manager (like rbenv, chruby, etc). This
 | 
			
		||||
directive tells Travis the Ruby version to use when running your test
 | 
			
		||||
script.
 | 
			
		||||
 | 
			
		||||
{% highlight yaml %}
 | 
			
		||||
script: ./script/cibuild
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
Travis allows you to run any arbitrary shell script to test your site. One
 | 
			
		||||
convention is to put all scripts for your project in the `script`
 | 
			
		||||
directory, and to call your test script `cibuild`. This line is completely
 | 
			
		||||
customizable. If your script won't change much, you can write your test
 | 
			
		||||
incantation here directly:
 | 
			
		||||
 | 
			
		||||
{% highlight yaml %}
 | 
			
		||||
script: jekyll build && html-proof ./_site
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
The `script` directive can be absolutely any valid shell command.
 | 
			
		||||
 | 
			
		||||
{% highlight yaml %}
 | 
			
		||||
# branch whitelist
 | 
			
		||||
branches:
 | 
			
		||||
  only:
 | 
			
		||||
  - gh-pages     # test the gh-pages branch
 | 
			
		||||
  - /pages-(.*)/ # test every branch which starts with "pages-"
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
You want to ensure the Travis builds for your site are being run only on
 | 
			
		||||
the branch or branches which contain your site. One means of ensuring this
 | 
			
		||||
isolation is including a branch whitelist in your Travis configuration
 | 
			
		||||
file. By specifying the `gh-pages` branch, you will ensure the associated
 | 
			
		||||
test script (discussed above) is only executed on site branches. If you use
 | 
			
		||||
a pull request flow for proposing changes, you may wish to enforce a
 | 
			
		||||
convention for your builds such that all branches containing edits are
 | 
			
		||||
prefixed, exemplified above with the `/pages-(.*)/` regular expression.
 | 
			
		||||
 | 
			
		||||
The `branches` directive is completely optional.
 | 
			
		||||
 | 
			
		||||
{% highlight yaml %}
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
Using `html-proofer`? You'll want this environment variable. Nokogiri, used
 | 
			
		||||
to parse HTML files in your compiled site, comes bundled with libraries
 | 
			
		||||
which it must compile each time it is installed. Luckily, you can
 | 
			
		||||
dramatically increase the install time of Nokogiri by setting the
 | 
			
		||||
environment variable `NOKOGIRI_USE_SYSTEM_LIBRARIES` to `true`.
 | 
			
		||||
 | 
			
		||||
## Gotchas
 | 
			
		||||
 | 
			
		||||
### Exclude `vendor`
 | 
			
		||||
 | 
			
		||||
Travis bundles all gems in the `vendor` directory on its build servers,
 | 
			
		||||
which Jekyll will mistakenly read and explode on. To avoid this, exclude
 | 
			
		||||
`vendor` in your `_config.yml`:
 | 
			
		||||
 | 
			
		||||
{% highlight yaml %}
 | 
			
		||||
exclude: [vendor]
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
### Questions?
 | 
			
		||||
 | 
			
		||||
This entire guide is open-source. Go ahead and [edit it][3] if you have a
 | 
			
		||||
fix or [ask for help][4] if you run into trouble and need some help.
 | 
			
		||||
 | 
			
		||||
[3]: https://github.com/jekyll/jekyll/edit/master/site/docs/continuous-integration.md
 | 
			
		||||
[4]: https://github.com/jekyll/jekyll-help#how-do-i-ask-a-question
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue