<3
@pablokbs
job('MiTrabajo') {
scm {
github("git@github.com:pablokbs/myapp.git")
}
triggers {
scm('*/15 * * * *')
}
steps {
shell('deploy.sh')
}
}Ejemplo simple
import groovy.json.jsonSlurper
def project = 'pablokbs/myapp'
def github = 'https://api.github.com'
def api = new URL("${github}/repos/${project}/branches")
def branches = new JsonSlurper().parse(api.newReader())
branches.each {
def branchName = it.name
job {
name "${project}-${branchName}".replaceAll('/','-')
scm {
git("git://github.com/${project}.git", branchName)
}
steps {
shell("deploy.sh ${project} ${branchName}")
}
}
}Ejemplo más complejo
jenkins-master:~# docker -H tcp://127.0.0.1:3241 ps | wc -l
64├── current -> /var/www/myapp/releases/20150120114500/
├── releases/
│ ├── 20150080072500
│ ├── 20150090083000
│ ├── 20150100093500
│ ├── 20150110104000
│ └── 20150120114500
├── revisions.log
└── shared/
└── myapp.conf
└── temp/
└── plugins/
└── uploads/# basic details
set :application, 'app_name'
set :deploy_user, 'jenkins'
# setup repo details
set :scm, :git
set :repo_url, 'git@github.com:pablokbs/myapp.git'
# how many old releases do we want to keep
set :keep_releases, 5
# files we want symlinking to specific entries in shared.
set :linked_files, %w{config/database.yml}
# dirs we want symlinking to shared
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets}
namespace :deploy do
on roles(:web) do |host|
execute "sudo service nginx reload"
info "Nginx reloaded on #{host.hostname}"
end
end
$ cap production deploy$ cap production deploy:rollbackRunning /usr/bin/env mkdir -p /var/myapp/releases/20160421215335
Running tar xf /var/myapp/shared/129.tgz -C /var/myapp/releases/20160421215335
Running /usr/bin/env echo "129.tgz" >> REVISION
Running /usr/bin/env mkdir -p /var/myapp/releases/20160421215335
Running /usr/bin/env ln -s /var/myapp/shared/.env /var/myapp/releases/20160421215335/.env
Running /usr/bin/env ln -s /var/myapp/releases/20160421215335 /var/myapp/releases/current
Running sudo service myapp restart
Running echo "Branch master deployed as release 20160421215335 by jenkins" >> revisions.logs3://yourbucket/somedirectory/
|- 201506011200.zip
|- 201506011500.zip
...
|- 201506020100.zip
`- 201506030100.zipgem 'capistrano-elb-mgmt'
gem 'capistrano-s3_archive'gem 'chef'# Grab the servers
q = "roles:#{fetch(:application)} \
AND roles:#{fetch(:chef_role)} \
AND chef_environment:#{fetch(:environment)}"
servers = query.search(
:node,
q,
:filter_result =>
{
:hostname => ["hostname"],
:ip_address => ["ipaddress"],
:roles => ["roles"]
}
).firstgem 'dogapi'slides.com/pablokbs