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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/capistrano/recipes/deploy/strategy/jenkins_artifact.rb', line 50
def deploy!
dir_name = exists?(:is_multibranch_job) && fetch(:is_multibranch_job) ? fetch(:branch) : fetch(:build_project)
release_name_from = fetch(:release_name_from, :build_at)
if release_name_from != :build_at && release_name_from != :deploy_at
abort ':release_name_from must be either `:build_at` or `:deploy_at`'
end
jenkins_origin = fetch(:jenkins_origin) or abort ":jenkins_origin configuration must be defined"
client = JenkinsApi::Client.new(server_url: jenkins_origin.to_s)
last_successful_build = client.job.get_last_successful_build(dir_name)
build_at = Time.at(last_successful_build['timestamp'] / 1000)
set(:artifact_url) do
artifact_finder = exists?(:artifact_relative_path) ?
->(artifact) { artifact['relativePath'] == fetch(:artifact_relative_path) } :
->(artifact) { true }
uri = JenkinsApi::Client::Job.get_artifact_url_by_build(last_successful_build, &artifact_finder)
abort "No artifact found for #{dir_name}" if uri.empty?
URI.parse(uri).tap {|uri|
uri.scheme = jenkins_origin.scheme
uri.host = jenkins_origin.host
uri.port = jenkins_origin.port
}.to_s
end
compression_type = fetch(
:artifact_compression_type,
_guess_compression_type(fetch(:artifact_url))
)
compression_switch = _compression_type_to_switch(compression_type)
tar_opts = []
strip_level = fetch(:artifact_strip_level, 1)
if strip_level && strip_level > 0
tar_opts << "--strip-components=#{strip_level}"
end
if release_name_from == :build_at
set(:release_name, build_at.strftime('%Y%m%d%H%M%S'))
end
set(:release_path, "#{fetch(:releases_path)}/#{fetch(:release_name)}")
set(:latest_release, fetch(:release_path))
run " mkdir -p \#{fetch(:release_path)} && \\\n (curl -s \#{fetch(:artifact_url)} | \\\n tar \#{tar_opts.join(' ')} -C \#{fetch(:release_path)} -\#{compression_switch}xf -)\n SCRIPT\nend\n"
|