Module: TeamCityApi

Defined in:
lib/teamcity_api.rb

Class Method Summary collapse

Class Method Details

.create_build_config_vcs_root_config(vcsRootId) ⇒ Object



178
179
180
181
182
183
# File 'lib/teamcity_api.rb', line 178

def TeamCityApi.create_build_config_vcs_root_config vcsRootId
  xml = Builder::XmlMarkup.new :indent => 2
  xml.tag!("vcs-root-entry"){
    xml.tag!("vcs-root", "id" => "#{vcsRootId}")
  }
end

.create_build_trigger_config(buildConfigurationId) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/teamcity_api.rb', line 36

def TeamCityApi.create_build_trigger_config buildConfigurationId
  xml = Builder::XmlMarkup.new :indent => 2
  xml.build{
    xml.triggeringOptions 'cleanSources' => 'true', 'rebuildAllDependencies' => 'true', 'queueAtTop' => 'true'
    xml.buildType 'id' => "#{buildConfigurationId}"
  }
end

.create_new_build_configuration(projectId, inputFile, username, password) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/teamcity_api.rb', line 125

def TeamCityApi.create_new_build_configuration projectId, inputFile, username, password
  file = File.open("../spec/#{inputFile}", "r")
  requestContent = file.read
  uri = URI.parse "http://localhost:9999/"
  http = Net::HTTP.new uri.host, uri.port


  request = Net::HTTP::Post.new "/httpAuth/app/rest/projects/id:#{projectId}/buildTypes", {'Accept' => 'application/json'}
  request.body = requestContent
  request.content_type = 'application/json'
  request.basic_auth username, password
  response = http.request request
  # File handling will be removed and instead use Tempfile for better security
  target = open("../spec/CreateNewBuildConfigurationResponse", 'w')
  target.truncate(0)
  target.write(response.body)
  target.close
end

.create_new_project(inputFile, username, password) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/teamcity_api.rb', line 58

def TeamCityApi.create_new_project inputFile, username, password
  file = File.open("../spec/#{inputFile}", "r")
  requestContent = file.read
  uri = URI.parse "http://localhost:9999/"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Post.new "/httpAuth/app/rest/projects", {'Accept' => 'application/json'}
  request.body = requestContent
  request.content_type = 'application/json'
  request.basic_auth username, password
  response = http.request request
  puts response.body
end

.create_new_vcs_root(inputFile, username, password) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/teamcity_api.rb', line 85

def TeamCityApi.create_new_vcs_root inputFile, username, password
  file = File.open("../spec/#{inputFile}", "r")
  requestContent = file.read
  uri = URI.parse "http://localhost:9999/"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Post.new "/httpAuth/app/rest/vcs-roots", {'Accept' => 'application/json'}
  request.body = requestContent
  request.content_type = 'application/json'
  request.basic_auth username, password
  response = http.request request
  puts response.body
end

.get_build_configs_by_projectId(projectId, username, password) ⇒ Object

Build Config Get/Create API



99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/teamcity_api.rb', line 99

def TeamCityApi.get_build_configs_by_projectId projectId, username, password
  uri = URI.parse "http://teamcity.relayhealth.com"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Get.new "/app/rest/projects/id:#{projectId}/buildTypes", {'Accept' => 'application/json'}
  request.basic_auth username, password
  response = http.request request
  # File handling will be removed and instead use Tempfile for better security
  target = open("../spec/BuildConfigsByProjectId", 'w')
  target.truncate(0)
  target.write(response.body)
  target.close
end

.get_build_configs_by_projectId_and_build_configurationId(projectId, buildConfigurationId, username, password) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/teamcity_api.rb', line 112

def TeamCityApi.get_build_configs_by_projectId_and_build_configurationId projectId, buildConfigurationId, username, password
  uri = URI.parse "http://teamcity.relayhealth.com"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Get.new "/app/rest/projects/id:#{projectId}/buildTypes/id:#{buildConfigurationId}", {'Accept' => 'application/json'}
  request.basic_auth username, password
  response = http.request request
  # File handling will be removed and instead use Tempfile for better security
  target = open("../spec/BuildConfigByProjectAndBuildConfigurationId", 'w')
  target.truncate(0)
  target.write(response.body)
  target.close
end

.get_build_status(projectId) ⇒ Object



224
225
226
227
228
229
230
231
232
# File 'lib/teamcity_api.rb', line 224

def TeamCityApi.get_build_status projectId
  # list queued builds per project
  uri = URI.parse 'http://teamcity.relayhealth.com'
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Get.new "/app/rest/buildQueue?locator=project:#{projectId}", {'Accept' => 'application/json'}
  creds = TeamCityApi.get_teamcity_creds
  request.basic_auth creds[0].delete("\n"), creds[1].delete("\n")
  response = http.request request
end

.get_project_by_id(projectId, username, password) ⇒ Object

Project Get/Create API



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/teamcity_api.rb', line 45

def TeamCityApi.get_project_by_id projectId, username, password
  uri = URI.parse "http://teamcity.relayhealth.com"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Get.new "/app/rest/projects/id:#{projectId}", {'Accept' => 'application/json'}
  request.basic_auth username, password
  response = http.request request
  # File handling will be removed and instead use Tempfile for better security
  target = open("../spec/ProjectConfigByProjectId", 'w')
  target.truncate(0)
  target.write(response.body)
  target.close
end

.get_teamcity_credsObject



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/teamcity_api.rb', line 10

def TeamCityApi.get_teamcity_creds
  file = File.open(Dir.pwd + '/spec/p.txt', 'r')
  content = file.read
  content.gsub!(/\r\n?/, "\n")
  line_num = 0
  creds = []
  content.each_line do |line|
    creds << line
  end
  creds
end

.get_vcs_roots_by_id(vcsRootId, username, password) ⇒ Object

VCS-Root Get/Create API



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/teamcity_api.rb', line 72

def TeamCityApi.get_vcs_roots_by_id vcsRootId, username, password
  uri = URI.parse "http://teamcity.relayhealth.com"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Get.new "/httpAuth/app/rest/vcs-roots/id:#{vcsRootId}", {'Accept' => 'application/json'}
  request.basic_auth username, password
  response = http.request request
  # File handling will be removed and instead use Tempfile for better security
  target = open("../spec/VcsRootConfigByVcsRootId", 'w')
  target.truncate(0)
  target.write(response.body)
  target.close
end

.set_build_configuration_build_step(buildConfigurationId, inputFile, username, password) ⇒ Object

Setup build configuration step



186
187
188
189
190
191
192
193
194
195
196
# File 'lib/teamcity_api.rb', line 186

def TeamCityApi.set_build_configuration_build_step buildConfigurationId, inputFile, username, password
  file = File.open("../spec/#{inputFile}", "r")
  requestContent = file.read
  uri = URI.parse "http://localhost:9999/"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Post.new "/httpAuth/app/rest/buildTypes/id:#{buildConfigurationId}/steps/"
  request.body = requestContent
  request.content_type = 'application/xml'
  request.basic_auth username, password
  response = http.request request
end

.set_build_configuration_feature(buildConfigurationId, inputFile, username, password) ⇒ Object

Setup build feature step



199
200
201
202
203
204
205
206
207
208
209
# File 'lib/teamcity_api.rb', line 199

def TeamCityApi.set_build_configuration_feature buildConfigurationId, inputFile, username, password
  file = File.open("../spec/#{inputFile}", "r")
  requestContent = file.read
  uri = URI.parse "http://localhost:9999/"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Post.new "/httpAuth/app/rest/buildTypes/id:#{buildConfigurationId}/features/"
  request.body = requestContent
  request.content_type = 'application/xml'
  request.basic_auth username, password
  response = http.request request
end

.set_build_configuration_parameter(buildConfigurationId, parameterName, parameterValue, username, password) ⇒ Object

Setup build configuration parameters



156
157
158
159
160
161
162
163
164
# File 'lib/teamcity_api.rb', line 156

def TeamCityApi.set_build_configuration_parameter buildConfigurationId, parameterName, parameterValue, username, password
  uri = URI.parse "http://localhost:9999/"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Put.new "/httpAuth/app/rest/buildTypes/id:#{buildConfigurationId}/parameters/#{parameterName}"
  request.body = parameterValue
  request.content_type = 'text/plain'
  request.basic_auth username, password
  response = http.request request
end

.set_build_configuration_setting(buildConfigurationId, settingName, settingValue, username, password) ⇒ Object

Setup build configuration settings



145
146
147
148
149
150
151
152
153
# File 'lib/teamcity_api.rb', line 145

def TeamCityApi.set_build_configuration_setting buildConfigurationId, settingName, settingValue, username, password
  uri = URI.parse "http://localhost:9999/"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Put.new "/httpAuth/app/rest/buildTypes/id:#{buildConfigurationId}/settings/#{settingName}"
  request.body = settingValue
  request.content_type = 'text/plain'
  request.basic_auth username, password
  response = http.request request
end

.set_build_configuration_trigger(buildConfigurationId, inputFile, username, password) ⇒ Object

Setup build trigger step



212
213
214
215
216
217
218
219
220
221
222
# File 'lib/teamcity_api.rb', line 212

def TeamCityApi.set_build_configuration_trigger buildConfigurationId, inputFile, username, password
  file = File.open("../spec/#{inputFile}", "r")
  requestContent = file.read
  uri = URI.parse "http://localhost:9999/"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Post.new "/httpAuth/app/rest/buildTypes/id:#{buildConfigurationId}/triggers/"
  request.body = requestContent
  request.content_type = 'application/xml'
  request.basic_auth username, password
  response = http.request request
end

.set_build_configuration_vcs_root(buildConfigurationId, vcsRootId, username, password) ⇒ Object

Setup build configuration Vcs-Root



167
168
169
170
171
172
173
174
175
176
# File 'lib/teamcity_api.rb', line 167

def TeamCityApi.set_build_configuration_vcs_root buildConfigurationId, vcsRootId, username, password
  uri = URI.parse "http://localhost:9999/"
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Post.new "/httpAuth/app/rest/buildTypes/id:#{buildConfigurationId}/vcs-root-entries/"
  request.body = create_build_config_vcs_root_config vcsRootId
  request.content_type = 'application/xml'
  request.basic_auth username, password

  response = http.request request
end

.trigger_build(buildConfigurationId, username, password) ⇒ Object

Build trigger API



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/teamcity_api.rb', line 23

def TeamCityApi.trigger_build buildConfigurationId, username, password
  puts "Triggering build configuration: #{buildConfigurationId} for #{username}..."
  configContent = create_build_trigger_config buildConfigurationId
  uri = URI.parse 'http://teamcity.relayhealth.com'
  http = Net::HTTP.new uri.host, uri.port
  request = Net::HTTP::Post.new '/httpAuth/app/rest/buildQueue'
  request.body = configContent
  request.content_type = 'application/xml'
  request.basic_auth username, password
  response = http.request request
  puts response
end