Skip to content

Instantly share code, notes, and snippets.

@aussielunix
Created July 4, 2012 13:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aussielunix/3047317 to your computer and use it in GitHub Desktop.
Save aussielunix/3047317 to your computer and use it in GitHub Desktop.
puppet testing from jenkins

Jenkins

I use these rake tasks in Jenkins with one job per rake task. The first job must pass before triggering the second one. I then use the pipeline view to visualise this.

Updated

New task for checking erb templates for syntax issues

lunix@glenmorangie] -> rake -T
rake clean # Remove any temporary products.
rake clobber # Remove any generated file.
rake doc # Generate puppet documentation.
rake style # Check puppet module code style.
rake syntax # Check puppet module syntax.
rake erb # test erb syntax
...
...
...
...
group :test do
gem 'rspec'
gem 'mechanize'
gem 'puppet-lint'
gem 'rake'
end
# Rakefile
require 'rubygems'
require 'erb'
require 'open3'
require 'bundler'
Bundler.require(:rake)
require 'rake/clean'
desc "Check puppet module syntax."
task :syntax do
begin
require 'puppet/face'
rescue LoadError
fail 'Cannot load puppet/face, are you sure you have Puppet 2.7?'
end
def validate_manifest(file)
begin
Puppet::Face[:parser, '0.0.1'].validate(file)
rescue Puppet::Error => error
puts error.message
end
end
puts "Checking puppet module syntax..."
FileList['**/*.pp'].each do |manifest|
# exclude the vendor/ dir
next if manifest =~ /vendor/
puts "Evaluating syntax for #{manifest}"
validate_manifest manifest
end
end
desc "test erb syntax"
task :erb do
FileList['**/*.erb'].each do |template|
# exclude the vendor/ dir
next if template =~ /vendor/
puts "Evaluating (erb) template syntax - #{template}"
Open3.popen3('ruby -Ku -c') do |stdin, stdout, stderr|
stdin.puts(ERB.new(File.read(template), nil, '-').src)
stdin.close
if error = ((stderr.readline rescue false))
puts template + error[1..-1].sub(/^[^:]*:\d+: /, '')
exit 1
end
stdout.close rescue false
stderr.close rescue false
end
end
end
desc "Check puppet module code style."
task :style do
begin
require 'puppet-lint'
rescue LoadError
fail 'Cannot load puppet-lint, did you install it?'
end
puts "Checking puppet module code style..."
linter = PuppetLint.new
linter.configuration.log_format = '%{path}:%{linenumber}:%{check}:%{KIND}:%{message}'
linter.configuration.send("disable_80chars")
FileList['**/*.pp'].each do |puppet_file|
# exclude the vendor/ dir
next if puppet_file =~ /vendor/
puts "Evaluating code style for #{puppet_file}"
linter.file = puppet_file
linter.run
end
fail if linter.errors?
end
#TODO: this hasn't been tested yet
#
desc "Generate documentation."
task :doc do |t|
puts "Generating puppet documentation..."
work_dir = File.dirname(__FILE__)
sh %{puppet doc \
--outputdir #{work_dir}/doc \
--mode rdoc \
--manifestdir #{work_dir}/manifests \
--modulepath #{work_dir}/modules \
--manifest #{work_dir}/site.pp}
if File.exists? "#{work_dir}/doc/files/#{work_dir}/modules"
FileUtils.mv "#{work_dir}/doc/files/#{work_dir}", "#{work_dir}/doc/files"
end
Dir.glob('./**/*.*').each do |file|
if File.file? "#{file}"
sh %{sed -i "s@#{work_dir}/@/@g" "#{file}"}
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment