-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathjenkins_rename.rb
executable file
·85 lines (73 loc) · 2.51 KB
/
jenkins_rename.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env ruby
# coding: utf-8
# frozen_string_literal: true
#
# Copyright (C) 2015-2016 Harald Sitter <[email protected]>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) version 3, or any
# later version accepted by the membership of KDE e.V. (or its
# successor approved by the membership of KDE e.V.), which shall
# act as a proxy defined in Section 6 of version 3 of the license.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
# mass renames are more efficient done on command line
# https://wiki.jenkins.io/display/JENKINS/Administering+Jenkins 'Moving/copying/renaming jobs'
# go to Jenkins GUI "Manage Jenkins" page and "Reload Configuration from Disk"
# run job_updater
require 'date'
require 'logger'
require 'logger/colors'
require 'optparse'
require_relative 'lib/jenkins'
require_relative 'lib/thread_pool'
require_relative 'lib/retry'
require_relative 'lib/jenkins/job'
parser = OptionParser.new do |opts|
opts.banner = <<-EOS
Usage: jenkins_rename.rb [options] 'regex' 'PATTERN_FROM' 'PATTERN_TO'
regex must be a valid Ruby regular expression matching the jobs you wish to
rename. The parts matching PATTERN_FROM will be renamed to PATTERN_TO.
e.g.
• Sub 'plasma' in all jobs for 'liquid':
'.*' plasma liquid
EOS
end
parser.parse!
if ARGV.size < 3
warn 'Not enough arguments.'
warn parser.help
abort
end
@log = Logger.new(STDOUT).tap do |l|
l.progname = $PROGRAM_NAME
l.level = Logger::INFO
end
pattern = Regexp.new(ARGV[0])
from = ARGV[1]
to = ARGV[2]
ARGV.clear
@log.info "Finding all jobs for #{pattern} and renaming using sub #{from} #{to}"
client = JenkinsApi::Client.new
job_names = client.job.list_all.select { |name| pattern.match(name) }
puts "Jobs: \n#{job_names.join("\n")}"
loop do
puts 'Does that list look okay? (y/n)'
case gets.strip.downcase
when 'y' then break
when 'n' then exit
end
end
job_names.each do |job_name|
new_name = job_name.gsub(from, to)
@log.info "#{job_name} => #{new_name}"
Jenkins::Job.new(job_name).rename(new_name)
end