brpm_content 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +38 -0
  3. data/.travis.yml +14 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +21 -0
  6. data/README.md +308 -0
  7. data/Rakefile +24 -0
  8. data/TO_BE_MIGRATED.txt +8 -0
  9. data/architecture.png +0 -0
  10. data/brpm_content.gemspec +31 -0
  11. data/customers/demo/integrations/brpm/process_event_handler_event.rb +183 -0
  12. data/customers/demo/integrations/jenkins/spec/api/applications_spec.rb +89 -0
  13. data/customers/demo/integrations/jenkins/spec/api/plans_spec.rb +69 -0
  14. data/customers/demo/integrations/jenkins/spec/api/requests_spec.rb +57 -0
  15. data/customers/demo/integrations/jenkins/spec/spec_helper.rb +33 -0
  16. data/customers/demo/integrations/jira/process_webhook_event.rb +33 -0
  17. data/customers/demo/jira_mappings.rb +29 -0
  18. data/infrastructure/integrations/event_handler.rb +62 -0
  19. data/infrastructure/integrations/webhook_receiver.rb +49 -0
  20. data/infrastructure/shell_scripts/backup_database.sh +19 -0
  21. data/infrastructure/shell_scripts/create_bl_package.sh +34 -0
  22. data/infrastructure/shell_scripts/create_release_request.sh +34 -0
  23. data/infrastructure/shell_scripts/ddns.sh +10 -0
  24. data/infrastructure/shell_scripts/install_brpm.sh +63 -0
  25. data/infrastructure/shell_scripts/install_content_module.sh +66 -0
  26. data/infrastructure/shell_scripts/install_content_repo.sh +60 -0
  27. data/infrastructure/shell_scripts/install_module_from_gem.sh +80 -0
  28. data/infrastructure/shell_scripts/maintenance.sh +4 -0
  29. data/infrastructure/shell_scripts/patch_brpm.sh +90 -0
  30. data/infrastructure/shell_scripts/restore_database.sh +33 -0
  31. data/infrastructure/shell_scripts/run_event_handler.cmd +16 -0
  32. data/infrastructure/shell_scripts/run_event_handler.sh +20 -0
  33. data/infrastructure/shell_scripts/run_webhook_receiver.cmd +14 -0
  34. data/infrastructure/shell_scripts/run_webhook_receiver.sh +15 -0
  35. data/infrastructure/shell_scripts/update_content_repo.sh +21 -0
  36. data/infrastructure/silent_install_options_4.6.txt +93 -0
  37. data/infrastructure/silent_install_options_upgrade_4.6.txt +92 -0
  38. data/infrastructure/smtp_settings.rb +42 -0
  39. data/infrastructure/ssh_script_header_additions.rb +21 -0
  40. data/modules/ansible/automations/execute_role.rb +3 -0
  41. data/modules/ansible/automations/execute_role.txt +12 -0
  42. data/modules/ansible/config.yml +5 -0
  43. data/modules/ansible/lib/ansible.rb +41 -0
  44. data/modules/atrium_orchestrator/automations/execute_workflow.rb +12 -0
  45. data/modules/atrium_orchestrator/automations/execute_workflow.txt +25 -0
  46. data/modules/atrium_orchestrator/automations/reserve_ip_address.rb +22 -0
  47. data/modules/atrium_orchestrator/automations/reserve_ip_address.txt +21 -0
  48. data/modules/atrium_orchestrator/config.yml +7 -0
  49. data/modules/atrium_orchestrator/lib/ao_soap_client.rb +94 -0
  50. data/modules/bladelogic/automations/create_package.rb +29 -0
  51. data/modules/bladelogic/automations/create_package.txt +26 -0
  52. data/modules/bladelogic/automations/deploy_package.rb +137 -0
  53. data/modules/bladelogic/automations/deploy_package.txt +53 -0
  54. data/modules/bladelogic/config.yml +7 -0
  55. data/modules/bladelogic/lib/bl_rest/bsa_rest_client.rb +65 -0
  56. data/modules/bladelogic/lib/bl_soap/blpackage.rb +43 -0
  57. data/modules/bladelogic/lib/bl_soap/bsa_soap_base.rb +118 -0
  58. data/modules/bladelogic/lib/bl_soap/bsa_soap_client.rb +34 -0
  59. data/modules/bladelogic/lib/bl_soap/compliance_job.rb +155 -0
  60. data/modules/bladelogic/lib/bl_soap/deploy_job.rb +48 -0
  61. data/modules/bladelogic/lib/bl_soap/depot_group.rb +47 -0
  62. data/modules/bladelogic/lib/bl_soap/job.rb +376 -0
  63. data/modules/bladelogic/lib/bl_soap/job_group.rb +72 -0
  64. data/modules/bladelogic/lib/bl_soap/job_management.rb +22 -0
  65. data/modules/bladelogic/lib/bl_soap/job_result.rb +12 -0
  66. data/modules/bladelogic/lib/bl_soap/job_run.rb +271 -0
  67. data/modules/bladelogic/lib/bl_soap/login.rb +47 -0
  68. data/modules/bladelogic/lib/bl_soap/nsh_script_job.rb +14 -0
  69. data/modules/bladelogic/lib/bl_soap/patch_catalog.rb +178 -0
  70. data/modules/bladelogic/lib/bl_soap/patch_remediation_job.rb +137 -0
  71. data/modules/bladelogic/lib/bl_soap/patching_job.rb +250 -0
  72. data/modules/bladelogic/lib/bl_soap/server.rb +12 -0
  73. data/modules/bladelogic/lib/bl_soap/template.rb +13 -0
  74. data/modules/bladelogic/lib/bl_soap/utility.rb +99 -0
  75. data/modules/bladelogic/resource_automations/select_job.rb +33 -0
  76. data/modules/bladelogic/resource_automations/select_job.txt +15 -0
  77. data/modules/bladelogic/tests/create_package_spec.rb +28 -0
  78. data/modules/bladelogic/tests/deploy_package_spec.rb +23 -0
  79. data/modules/bladelogic/tests/spec_helper.rb +82 -0
  80. data/modules/brpm/automations/create_release_from_excel.rb +34 -0
  81. data/modules/brpm/automations/create_release_from_excel.txt +5 -0
  82. data/modules/brpm/automations/create_release_request.rb +100 -0
  83. data/modules/brpm/automations/create_release_request.txt +5 -0
  84. data/modules/brpm/automations/create_request.rb +73 -0
  85. data/modules/brpm/automations/create_request.txt +23 -0
  86. data/modules/brpm/automations/promote_request.rb +197 -0
  87. data/modules/brpm/automations/promote_request.txt +24 -0
  88. data/modules/brpm/automations/select_application_version.rb +22 -0
  89. data/modules/brpm/automations/select_application_version.txt +17 -0
  90. data/modules/brpm/automations/select_component_version.rb +12 -0
  91. data/modules/brpm/automations/select_component_version.txt +5 -0
  92. data/modules/brpm/automations/select_request_template.rb +6 -0
  93. data/modules/brpm/automations/select_request_template.txt +13 -0
  94. data/modules/brpm/automations/wait_for_step_in_other_request.rb +11 -0
  95. data/modules/brpm/automations/wait_for_step_in_other_request.txt +13 -0
  96. data/modules/brpm/automations/wait_till_promoted_request_is_completed.rb +9 -0
  97. data/modules/brpm/automations/wait_till_promoted_request_is_completed.txt +5 -0
  98. data/modules/brpm/config.yml +6 -0
  99. data/modules/brpm/lib/brpm_request.rb +207 -0
  100. data/modules/brpm/lib/brpm_rest.rb +312 -0
  101. data/modules/brpm/lib/brpm_rest_client.rb +1501 -0
  102. data/modules/brpm/resource_automations/select_application.rb +16 -0
  103. data/modules/brpm/resource_automations/select_application.txt +5 -0
  104. data/modules/brpm/resource_automations/select_environment.rb +14 -0
  105. data/modules/brpm/resource_automations/select_environment.txt +5 -0
  106. data/modules/brpm/resource_automations/select_request_template.rb +16 -0
  107. data/modules/brpm/resource_automations/select_request_template.txt +5 -0
  108. data/modules/brpm/resource_automations/select_step_in_request.rb +33 -0
  109. data/modules/brpm/resource_automations/select_step_in_request.txt +5 -0
  110. data/modules/brpm/sample_applications/e-finance.json +0 -0
  111. data/modules/brpm/tests/create_release_request_spec.rb +66 -0
  112. data/modules/brpm/tests/create_request_spec.rb +84 -0
  113. data/modules/brpm/tests/select_application_version_spec.rb +47 -0
  114. data/modules/brpm/tests/spec_helper.rb +63 -0
  115. data/modules/docker_brpm/automations/create_brpm_instance_input_params.rb +10 -0
  116. data/modules/docker_brpm/automations/create_brpm_instance_input_params.txt +17 -0
  117. data/modules/docker_brpm/automations/create_brpm_instance_one_shot.rb +60 -0
  118. data/modules/docker_brpm/automations/create_brpm_instance_one_shot.txt +14 -0
  119. data/modules/docker_brpm/automations/create_brpm_instance_show_results.rb +23 -0
  120. data/modules/docker_brpm/automations/create_brpm_instance_show_results.txt +13 -0
  121. data/modules/docker_brpm/automations/create_database.rb +24 -0
  122. data/modules/docker_brpm/automations/create_database.txt +3 -0
  123. data/modules/docker_brpm/automations/create_environment.rb +14 -0
  124. data/modules/docker_brpm/automations/create_environment.txt +3 -0
  125. data/modules/docker_brpm/automations/create_image_for_application.rb +23 -0
  126. data/modules/docker_brpm/automations/create_image_for_application.txt +6 -0
  127. data/modules/docker_brpm/automations/create_image_for_brpm_application_input_params.rb +7 -0
  128. data/modules/docker_brpm/automations/create_image_for_brpm_application_input_params.txt +8 -0
  129. data/modules/docker_brpm/automations/create_image_for_brpm_database_creator_input_params.rb +7 -0
  130. data/modules/docker_brpm/automations/create_image_for_brpm_database_creator_input_params.txt +8 -0
  131. data/modules/docker_brpm/automations/create_image_for_database_creator.rb +21 -0
  132. data/modules/docker_brpm/automations/create_image_for_database_creator.txt +6 -0
  133. data/modules/docker_brpm/automations/create_installed_component_for_application.rb +11 -0
  134. data/modules/docker_brpm/automations/create_installed_component_for_application.txt +3 -0
  135. data/modules/docker_brpm/automations/create_installed_component_for_database.rb +7 -0
  136. data/modules/docker_brpm/automations/create_installed_component_for_database.txt +3 -0
  137. data/modules/docker_brpm/automations/create_installed_component_for_database_creator.rb +8 -0
  138. data/modules/docker_brpm/automations/create_installed_component_for_database_creator.txt +3 -0
  139. data/modules/docker_brpm/automations/create_installed_component_for_utilities.rb +7 -0
  140. data/modules/docker_brpm/automations/create_installed_component_for_utilities.txt +3 -0
  141. data/modules/docker_brpm/automations/create_version_tags_for_component_in_all_envs.rb +13 -0
  142. data/modules/docker_brpm/automations/create_version_tags_for_component_in_all_envs.txt +6 -0
  143. data/modules/docker_brpm/automations/delete_brpm_instance.rb +38 -0
  144. data/modules/docker_brpm/automations/delete_brpm_instance.txt +8 -0
  145. data/modules/docker_brpm/automations/execute_test_run_in_jenkins.rb +43 -0
  146. data/modules/docker_brpm/automations/execute_test_run_in_jenkins.txt +13 -0
  147. data/modules/docker_brpm/automations/execute_test_run_in_jenkins_show_results.rb +5 -0
  148. data/modules/docker_brpm/automations/execute_test_run_in_jenkins_show_results.txt +9 -0
  149. data/modules/docker_brpm/automations/launch_create_image_for_brpm_application_request.rb +27 -0
  150. data/modules/docker_brpm/automations/launch_create_image_for_brpm_application_request.txt +3 -0
  151. data/modules/docker_brpm/automations/launch_test_run_request.rb +30 -0
  152. data/modules/docker_brpm/automations/launch_test_run_request.txt +14 -0
  153. data/modules/docker_brpm/automations/release_brpm_input_params.rb +7 -0
  154. data/modules/docker_brpm/automations/release_brpm_input_params.txt +8 -0
  155. data/modules/docker_brpm/automations/run_application_container.rb +27 -0
  156. data/modules/docker_brpm/automations/run_application_container.txt +3 -0
  157. data/modules/docker_brpm/automations/run_database_container.rb +14 -0
  158. data/modules/docker_brpm/automations/run_database_container.txt +3 -0
  159. data/modules/docker_brpm/automations/stop_application_container.rb +11 -0
  160. data/modules/docker_brpm/automations/stop_application_container.txt +3 -0
  161. data/modules/docker_brpm/automations/stop_database_container.rb +11 -0
  162. data/modules/docker_brpm/automations/stop_database_container.txt +3 -0
  163. data/modules/docker_brpm/automations/test_rest_api.rb +18 -0
  164. data/modules/docker_brpm/automations/test_rest_api.txt +3 -0
  165. data/modules/docker_brpm/automations/upgrade_database.rb +19 -0
  166. data/modules/docker_brpm/automations/upgrade_database.txt +8 -0
  167. data/modules/docker_brpm/config.yml +8 -0
  168. data/modules/docker_brpm/lib/docker.rb +39 -0
  169. data/modules/docker_brpm/lib/git.rb +16 -0
  170. data/modules/docker_brpm/sample_applications/dockerizedbrpm.json +0 -0
  171. data/modules/email/automations/send_notification.rb +48 -0
  172. data/modules/email/automations/send_notification.txt +27 -0
  173. data/modules/email/config.yml +6 -0
  174. data/modules/framework/automations/direct_execute.rb +10 -0
  175. data/modules/framework/automations/direct_execute.txt +16 -0
  176. data/modules/framework/automations/install_module.rb +13 -0
  177. data/modules/framework/automations/install_module.txt +16 -0
  178. data/modules/framework/bin/brpm_install +106 -0
  179. data/modules/framework/bin/event_handler +63 -0
  180. data/modules/framework/bin/webhook_receiver +49 -0
  181. data/modules/framework/brpm_auto.rb +307 -0
  182. data/modules/framework/brpm_framework.rb +88 -0
  183. data/modules/framework/brpm_script_executor.rb +146 -0
  184. data/modules/framework/config.yml +7 -0
  185. data/modules/framework/config/customer_include.rb +26 -0
  186. data/modules/framework/config/server.yml +3 -0
  187. data/modules/framework/customer_include_default.rb +25 -0
  188. data/modules/framework/lib/logging/brpm_logger.rb +39 -0
  189. data/modules/framework/lib/logging/logger_base.rb +36 -0
  190. data/modules/framework/lib/logging/simple_logger.rb +27 -0
  191. data/modules/framework/lib/params/all_params.rb +80 -0
  192. data/modules/framework/lib/params/integration_settings.rb +27 -0
  193. data/modules/framework/lib/params/params.rb +172 -0
  194. data/modules/framework/lib/params/params_base.rb +81 -0
  195. data/modules/framework/lib/params/request_params.rb +38 -0
  196. data/modules/framework/lib/resource_framework.rb +211 -0
  197. data/modules/framework/lib/rest_api.rb +155 -0
  198. data/modules/framework/lib/semaphore.rb +79 -0
  199. data/modules/framework/lib/utilities.rb +317 -0
  200. data/modules/framework/lib/version_control/git.rb +192 -0
  201. data/modules/framework/lib/version_control/svn.rb +221 -0
  202. data/modules/framework/log.html +39 -0
  203. data/modules/framework/tests/all_params_spec.rb +116 -0
  204. data/modules/framework/tests/brpm_auto_spec.rb +84 -0
  205. data/modules/framework/tests/customer_include/config/customer_include.rb +10 -0
  206. data/modules/framework/tests/customer_include/config/server.yml +3 -0
  207. data/modules/framework/tests/customer_include_spec.rb +29 -0
  208. data/modules/framework/tests/local_jirb.rb +15 -0
  209. data/modules/framework/tests/params_spec.rb +172 -0
  210. data/modules/framework/tests/request_params_spec.rb +86 -0
  211. data/modules/framework/tests/server_yaml_spec.rb +19 -0
  212. data/modules/framework/tests/spec_helper.rb +42 -0
  213. data/modules/framework/transport/dispatch_baa.rb +355 -0
  214. data/modules/framework/transport/dispatch_base.rb +345 -0
  215. data/modules/framework/transport/dispatch_nsh.rb +248 -0
  216. data/modules/framework/transport/dispatch_ssh.rb +154 -0
  217. data/modules/framework/transport/transport_baa.rb +1095 -0
  218. data/modules/framework/transport/transport_nsh.rb +359 -0
  219. data/modules/framework/transport/transport_ssh.rb +220 -0
  220. data/modules/framework/write_to.rb +1 -0
  221. data/modules/jenkins/automations/create_release.rb +4 -0
  222. data/modules/jenkins/automations/create_release.txt +23 -0
  223. data/modules/jenkins/automations/f2_downloadJenkinsArtifact.rb +126 -0
  224. data/modules/jenkins/config.yml +7 -0
  225. data/modules/jenkins/lib/jenkins.rb +300 -0
  226. data/modules/jenkins/resource_automations/f2_rsc_jenkinsJobs.rb +58 -0
  227. data/modules/jira/automations/add_comment.rb +4 -0
  228. data/modules/jira/automations/add_comment.txt +23 -0
  229. data/modules/jira/automations/create_release.rb +4 -0
  230. data/modules/jira/automations/create_release.txt +23 -0
  231. data/modules/jira/automations/delete_release.rb +4 -0
  232. data/modules/jira/automations/delete_release.txt +23 -0
  233. data/modules/jira/automations/transition_issue.rb +4 -0
  234. data/modules/jira/automations/transition_issue.txt +23 -0
  235. data/modules/jira/automations/transition_issues_for_request.rb +29 -0
  236. data/modules/jira/automations/transition_issues_for_request.txt +20 -0
  237. data/modules/jira/automations/transition_issues_for_run.rb +26 -0
  238. data/modules/jira/automations/transition_issues_for_run.txt +20 -0
  239. data/modules/jira/automations/update_release.rb +4 -0
  240. data/modules/jira/automations/update_release.txt +26 -0
  241. data/modules/jira/config.yml +7 -0
  242. data/modules/jira/lib/jira_rest_client.rb +185 -0
  243. data/modules/jira/tests/create_read_update_delete_release_spec.rb +39 -0
  244. data/modules/jira/tests/spec_helper.rb +39 -0
  245. data/modules/jira/tests/transition_issue_spec.rb +32 -0
  246. data/modules/patch_process_management/automations/execute_job/script.rb +105 -0
  247. data/modules/patch_process_management/automations/execute_job/wrapper.txt +39 -0
  248. data/modules/patch_process_management/automations/patch_analysis/script.rb +107 -0
  249. data/modules/patch_process_management/automations/patch_analysis/wrapper.txt +33 -0
  250. data/modules/patch_process_management/automations/patch_readiness/script.rb +89 -0
  251. data/modules/patch_process_management/automations/patch_readiness/wrapper.txt +33 -0
  252. data/modules/patch_process_management/automations/patch_remediation/script.rb +217 -0
  253. data/modules/patch_process_management/automations/patch_remediation/wrapper.txt +40 -0
  254. data/modules/patch_process_management/config.yml +10 -0
  255. data/modules/teamcity/automations/trigger_build.rb +4 -0
  256. data/modules/teamcity/automations/trigger_build.txt +14 -0
  257. data/modules/teamcity/config.yml +7 -0
  258. data/modules/teamcity/lib/teamcity_rest_client.rb +17 -0
  259. data/modules/teamcity/tests/spec_helper.rb +34 -0
  260. data/modules/teamcity/tests/trigger_build_spec.rb +27 -0
  261. data/modules/windows/automations/deploy_directory_over_windows_shares/script.rb +87 -0
  262. data/modules/windows/automations/deploy_directory_over_windows_shares/wrapper.txt +29 -0
  263. data/modules/windows/automations/deploy_file_over_windows_shares/script.rb +31 -0
  264. data/modules/windows/automations/deploy_file_over_windows_shares/wrapper.txt +24 -0
  265. data/modules/windows/config.yml +6 -0
  266. data/modules/windows/lib/samba.rb +29 -0
  267. metadata +397 -0
@@ -0,0 +1 @@
1
+ write_to(File.read(BrpmAuto.logger.step_run_log_file_path))
@@ -0,0 +1,4 @@
1
+ params = BrpmAuto.params
2
+
3
+ BrpmAuto.log "Creating a new option for plan '#{params["release_name"]}' in the JIRA dropdown custom field with id #{params["jira_release_field_id"]}..."
4
+ JiraRestClient.new.create_option_for_dropdown_custom_field(params["jira_release_field_id"], params["release_name"])
@@ -0,0 +1,23 @@
1
+ ###
2
+ # jira_release_field_id:
3
+ # name: JIRA release field id
4
+ # required: yes
5
+ # release_name:
6
+ # name: Release name
7
+ # required: yes
8
+ ###
9
+
10
+ #=== BMC Application Automation Integration Server: JIRA ===#
11
+ # [integration_id=4]
12
+ #=== End ===#
13
+
14
+ require "#{params["SS_script_support_path"]}/git_repos/brpm_content/modules/framework/brpm_script_executor.rb"
15
+
16
+ params["direct_execute"] = "true"
17
+
18
+ params["SS_integration_dns"] = SS_integration_dns
19
+ params["SS_integration_username"] = SS_integration_username
20
+ params["SS_integration_password_enc"] = SS_integration_password_enc
21
+ params["SS_integration_details"] = YAML.load(SS_integration_details)
22
+
23
+ BrpmScriptExecutor.execute_automation_script("jira", "create_release", params)
@@ -0,0 +1,126 @@
1
+ # Description: Download an artifact from jenkins
2
+ # Instructions: Modify this automation for each flavor of application deployment
3
+ # add any arguments you want to be available to other steps here by prefixing them with "ARG_"
4
+ #=> About the f2 framework: upon loading the automation, several utility classes will be available
5
+ # @rpm: the BrpmAutomation class, @p: the Param class, @rest: the BrpmRest class and
6
+ # @transport: the Transport class - the transport class will be loaded dependent on the SS_transport property value (ssh, nsh or baa)
7
+ #---------------------- f2_getRequestInputs_basic -----------------------#
8
+ # Description: Enter Request inputs for component deploy and promotion
9
+ # Author(s): 2015 Brady Byrd
10
+ #---------------------- Arguments --------------------------#
11
+ ###
12
+ # Jenkins Artifact:
13
+ # name: Artifact to download from Jenkins
14
+ # type: in-text
15
+ # position: A1:D1
16
+ # required: no
17
+ # Jenkins Project:
18
+ # name: Jenkins Project
19
+ # type: in-external-single-select
20
+ # external_resource: f2_rsc_jenkinsJobs
21
+ # position: A2:D2
22
+ # required: no
23
+ # Jenkins Build No:
24
+ # name: Build number from Jenkins
25
+ # type: in-text
26
+ # position: A3:C3
27
+ # required: no
28
+ ###
29
+
30
+ #=== General Integration Server: DevOps_Jenkins ===#
31
+ # [integration_id=2]
32
+ SS_integration_dns = "http://vw-aus-rem-dv11.bmc.com:8080"
33
+ SS_integration_username = "bbyrd"
34
+ SS_integration_password = "-private-"
35
+ SS_integration_details = ""
36
+ SS_integration_password_enc = "__SS__Cj1Jek1QTjBaTkYyUQ=="
37
+ #=== End ===#
38
+
39
+
40
+ #---------------------- Declarations -----------------------#
41
+ params["direct_execute"] = true #Set for local execution
42
+ #require 'C:/BMC/persist/automation_libs/brpm_framework.rb'
43
+ require "#{FRAMEWORK_DIR}/brpm_framework.rb"
44
+ rpm_load_module "jenkins"
45
+
46
+ #---------------------- Methods ----------------------------#
47
+ # Assign local variables to properties and script arguments
48
+ def logical_list_value(arg_value, match_value)
49
+ result = nil
50
+ items = [arg_value]
51
+ return !(match_value =~ /#{arg_value}.*/).nil? unless arg_value =~ /(\sor\s|\sand\s|\,)/
52
+ list_items = arg_value.split(" or ") if arg_value.include?(" or ")
53
+ list_items = arg_value.split(" and ") if arg_value.include?(" and ")
54
+ list_items = arg_value.split(",") if arg_value.include?(",")
55
+ list_items.map{|l| l.strip }.each{|k|
56
+ result = (match_value =~ /#{k}.*/)
57
+ break if !result.nil?
58
+ }
59
+ !result.nil?
60
+ end
61
+
62
+ #---------------------- Variables --------------------------#
63
+ # Assign local variables to properties and script arguments
64
+ ARG_PREFIX = "ARG_"
65
+ jenkins_project = @p.get("Jenkins Project", @p.jenkins_project)
66
+ jenkins_build_no = @p.get("Jenkins Build No", @p.jenkins_build_no) #if passed from rest
67
+ jenkins_build_no = "lastSuccessfulBuild" if jenkins_build_no == ""
68
+ jenkins_artifact_value = @p.required("Jenkins Artifact")
69
+ package_name = "jenkins_#{jenkins_build_no}"
70
+ staging_dir = @rpm.get_staging_dir(package_name, true)
71
+ win_curl = @p.win_curl #"C:\\bmc\\curl.exe"
72
+ download_file = ""
73
+ transfer_properties = {}
74
+
75
+ #---------------------- Main Body --------------------------#
76
+ # Set a property in General for each component to deploy
77
+ @rpm.message_box "Artifacts from Jenkins Build", "title"
78
+ @rpm.log "Jenkins:\n\tServer: #{SS_integration_dns}\n\tJob: #{jenkins_project}\n\tBuildNo: #{jenkins_build_no}\n\tArtifact: #{jenkins_artifact_value}"
79
+ @jenkins = Jenkins.new(SS_integration_dns, script_params, {"username" => SS_integration_username, "password" => decrypt_string_with_prefix(SS_integration_password_enc), "job_name" => jenkins_project})
80
+ cur_server = @p.get_server_list.keys.first
81
+ raise "No server selected" if cur_server.length < 3
82
+ channel_root = @p.get_server_property(cur_server, "CHANNEL_ROOT")
83
+ channel_root = "C:\\temp" if channel_root == ""
84
+
85
+ rest_result = @jenkins.job_build_data(jenkins_build_no)
86
+ build_number = rest_result["data"]["number"]
87
+ @rpm.log "Artifacts from Build #{build_number}:"
88
+ found = false
89
+ rest_result["data"]["artifacts"].each do |item|
90
+ @rpm.log("\t#{item["fileName"]} => #{item["relativePath"]}")
91
+ if logical_list_value(jenkins_artifact_value, item["fileName"])
92
+ found = true
93
+ download_file = item["fileName"]
94
+ end
95
+ end
96
+ raise "ERROR artifact not in list: #{jenkins_artifact}" unless found
97
+ @rpm.log "Full Build Results:"
98
+ @rpm.log rest_result["data"].inspect
99
+ new_name = "Regression - #{jenkins_project} - #{build_number}"
100
+ res = @rest.update("requests", (@p.request_id.to_i - 1000).to_s, {"request" => {"name" => new_name}})
101
+
102
+ # New Method out of mem errors trying to download
103
+ if false #<100mb files only
104
+ @rpm.log "Downloading file: #{download_file} to #{staging_dir}"
105
+ @jenkins.get_build_artifact(jenkins_build_no, download_file, staging_dir)
106
+ package_info = @nsh.package_staged_artifacts(staging_dir, "#{package_name}.zip")
107
+ else
108
+ @rpm.log "Downloading #{download_file} from Jenkins on target"
109
+ # http://vw-aus-rem-dv11.bmc.com:8080/job/Trunk_BRPM_INSTALLERS/356/artifact/BRPM_Windows_201505220925.zip
110
+ url_part = "#{jenkins_build_no}/artifact/#{download_file}"
111
+ url = File.join(SS_integration_dns,"job",jenkins_project, url_part)
112
+ target_os = @rpm.get_server_list.first[1]["os_platform"]
113
+ cmd = "#{win_curl} -X GET #{url} > #{channel_root}\\#{download_file}"
114
+ @rpm.log "Command: #{cmd}"
115
+ script_file = @transport.make_temp_file(cmd, "windows")
116
+ result = @transport.execute_script(script_file, {"transfer_properties" => transfer_properties})
117
+ @rpm.log "cURL Output: #{result}"
118
+ package_info = {"instance_path" => File.join(channel_root, download_file)}
119
+ end
120
+
121
+ @p.assign_local_param("jenkins_build_no", build_number)
122
+ @p.assign_local_param("instance_#{@p.SS_component}", package_info)
123
+ @p.assign_local_param("jenkins_download_package", download_file)
124
+ @p.save_local_params # Cleanup and save
125
+
126
+
@@ -0,0 +1,7 @@
1
+ dependencies:
2
+ - brpm
3
+
4
+ integration_servers:
5
+ - JIRA
6
+
7
+ version: 1.0.0
@@ -0,0 +1,300 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+
4
+ # Base class for working with Subversion
5
+ class Jenkins
6
+
7
+ # Initializes an instance of the class
8
+ #
9
+ # ==== Attributes
10
+ #
11
+ # * +url+ - url for Jenkins server...
12
+ # * +params+ - params hash
13
+ # * +options+ - hash of options includes:...
14
+ # job_name - jenkins job name (from url)...
15
+ # username - jenkins user username...
16
+ # password - jenkins user password...
17
+ # verbose - true for verbose output (default = false)...
18
+ # simulate - simulate command - echo it (default = false)...
19
+ #
20
+ def initialize(url, options, compat_options = {})
21
+ self.extend Utilities
22
+ if options.has_key?("SS_output_dir")
23
+ BrpmAuto.log "Load for this class has changed, no longer necessary to send params as 2nd argument"
24
+ options = compat_options
25
+ end
26
+ @url = url
27
+ @username = get_option(options,"username")
28
+ @password = get_option(options,"password")
29
+ @job_name = get_option(options,"job_name")
30
+ @verbose = get_option(options,"verbose", false)
31
+ @simulate = get_option(options,"simulate", false)
32
+ end
33
+
34
+ # Calls the jenkins server via rest
35
+ # Uses the current project and auth information
36
+ # ==== Attributes
37
+ # * +options+ - a hash of options, includes:
38
+ # url_part - the fragment of the url past the project ex.
39
+ # for this url: http://vw-aus-rem-dv11.bmc.com:8080/job/BRPM_4.6-D_WAR/231/api/json
40
+ # the fragment is "231/api/json"
41
+ # username - override existing username
42
+ # password - override existing password
43
+ # method - get/post, defaults to get
44
+ #
45
+ # ==== Returns
46
+ #
47
+ # * +rest_result+ - hash of information including status (success-failure) and data - the rest result
48
+ #
49
+ def jenkins_rest_call(url_part, options = {})
50
+ result = {"status" => "Failure"}
51
+ options["username"] = @username unless options.has_key?("username")
52
+ options["password"] = @password unless options.has_key?("password")
53
+ method = get_option(options,"method") == "post" ? "post" : "get"
54
+ url = File.join(@url,"job",@job_name, url_part)
55
+ BrpmAuto.log "Full url [#{method}]: #{url}" if @simulate || @verbose
56
+ unless @simulate
57
+ response = rest_call(url, method, options)
58
+ BrpmAuto.log "Response: #{response.inspect}" if @verbose
59
+ result["data"] = "#{response["status"]}: #{response["message"]}" unless response["status"] == "success"
60
+ result["data"] = response["data"] if response["status"] == "success"
61
+ result["status"] = response["status"]
62
+ else
63
+ result["status"] = "simulate"
64
+ end
65
+ result
66
+ end
67
+
68
+ def set_job_name(new_name)
69
+ @job_name = new_name
70
+ new_name
71
+ end
72
+
73
+ # Returns the array of Build Jobs
74
+ #
75
+ # ==== Returns
76
+ #
77
+ # * +job_list+ - an array of hashes with job information
78
+ #
79
+ def job_list
80
+ options = {"username" => @username, "password" => @password}
81
+ response = rest_call("#{@url}/api/json", "get", options)
82
+ return "ERROR" if response["status"] == "ERROR"
83
+ response["data"]
84
+ end
85
+
86
+ # Returns the data of a Build Job
87
+ #
88
+ # ==== Returns
89
+ #
90
+ # * +job_data+ - a hash of job information
91
+ #
92
+ def job_data
93
+ jenkins_rest_call("/api/json")
94
+ end
95
+
96
+ # Returns the data of a build
97
+ # ==== Attributes
98
+ #
99
+ # * +build_no+ - the id of a build (omit for latest build)
100
+ #
101
+ # ==== Returns
102
+ #
103
+ # * +job_data+ - a hash of job information
104
+ #
105
+ def job_build_data(build_no = nil)
106
+ build_no = "lastBuild" if build_no.nil?
107
+ jenkins_rest_call("#{build_no}/api/json")
108
+ end
109
+
110
+ # Returns the status of a build
111
+ # ==== Attributes
112
+ #
113
+ # * +build_no+ - the id of a build (omit for latest build)
114
+ #
115
+ # ==== Returns
116
+ #
117
+ # * +hash+ - still_building (ture/false) and status (success/fail)
118
+ #
119
+ def build_status(build_no = nil)
120
+ response = job_build_data(build_no)
121
+ # Now parse for the status and build id
122
+ #log "Raw Result: #{response.inspect}"
123
+ ans = {}
124
+ ans["still_building"] = response["data"]["building"]
125
+ ans["success"] = response["status"]
126
+ ans
127
+ end
128
+
129
+ # Returns the raw results of a build
130
+ # ==== Attributes
131
+ #
132
+ # * +build_no+ - the id of a build (omit for latest build)
133
+ # * +get_link+ - returns a link to the results instead (optional - default = false)
134
+ #
135
+ # ==== Returns
136
+ #
137
+ # * +job_data+ - text of build output
138
+ #
139
+ def build_results(build_no, get_link = false)
140
+ url_part = "#{build_no}/consoleText"
141
+ if get_link
142
+ response = File.join(@url,"job",@job_name, url_part)
143
+ else
144
+ response = jenkins_rest_call(url_part, {"headers" => {}})
145
+ end
146
+ response
147
+ end
148
+
149
+ # Monitors a running build
150
+ # ==== Attributes
151
+ #
152
+ # * +build_no+ - the id of a build (omit for latest build)
153
+ #
154
+ # ==== Returns
155
+ #
156
+ # * +job_data+ - a hash of job information
157
+ #
158
+ def monitor_build(build_no)
159
+ # start with an initial build result
160
+ # Now parse for the status and build id
161
+ max_time = MaxBuildTime
162
+ sleep_interval = 15
163
+ result = build_status(build_no)
164
+ results = "Initial test: Build Number: #{build_no}, Status - building: #{result["still_building"].to_s}, result: #{result["success"]}\n"
165
+ # Now Check to see if the token matches
166
+ build_match = true
167
+ #build_match = response.include?(ss_token) if use_token_match # Enable this if using token matching
168
+ BrpmAuto.message_box "Monitoring Build Progress (id: #{build_no})"
169
+ if build_no.to_i > 0 && result["still_building"] == true && build_match
170
+ start_time = Time.now
171
+ elapsed = 0
172
+ complete = false
173
+ until elapsed > (max_time * 60) do
174
+ result = build_status(build_no)
175
+ results += "Status - building: #{result["still_building"].to_s}, result: #{result["success"]}\n"
176
+ if result["still_building"] == false
177
+ BrpmAuto.log "Success - #{result["success"]}"
178
+ complete = true if result["success"] == "SUCCESS"
179
+ complete = false if result["success"] != "SUCCESS"
180
+ break
181
+ else
182
+ elapsed = Time.now - start_time
183
+ BrpmAuto.log "Still building ...elapsed: #{elapsed.to_i.to_s}, pausing for #{sleep_interval.to_s} seconds"
184
+ sleep sleep_interval
185
+ end
186
+ elapsed = Time.now - start_time
187
+ end
188
+ elsif result["success"] != "SUCCESS"
189
+ BrpmAuto.log "Build failed on initial parameters, either could not retrieve build id or token did not match output"
190
+ complete = false
191
+ else
192
+ BrpmAuto.log "Build Successful"
193
+ complete = true
194
+ end
195
+ complete
196
+ end
197
+
198
+ # Performs a build on the active project
199
+ # ==== Attributes
200
+ #
201
+ # * +build_arguments+ - a hash of the build arguments
202
+ #
203
+ # ==== Returns
204
+ #
205
+ # * +job_data+ - a hash of job information
206
+ #
207
+ def build(build_arguments = {})
208
+ # Fetch the next build number
209
+ build_details = job_data
210
+ next_build = build_details["data"]["nextBuildNumber"]
211
+ url_part = "build"
212
+ options = {"method" => post, "data" => build_arguments}
213
+ reponse = jenkins_rest_call(url_part, options)
214
+ last_build = next_build
215
+ result = "Web server response: " + response["header"]
216
+ BrpmAuto.log result
217
+ unless response["header"].include?("HTTPFound 302") #response["status"] == "failure"
218
+ BrpmAuto.log "Command_Failed: Build did not launch"
219
+ return -1
220
+ end
221
+ launched = false
222
+ 10.times do
223
+ test_result = job_build_data(last_build)
224
+ if test_result["data"].is_a?(String) && test_result["data"].include?("failure")
225
+ BrpmAuto.log "Job not ready waiting..."
226
+ sleep(6)
227
+ else
228
+ launched = true
229
+ break
230
+ end
231
+ end
232
+ if launched
233
+ return last_build
234
+ else
235
+ BrpmAuto.log "Command_Failed: Build did not launch in 60 seconds"
236
+ return -1
237
+ end
238
+ end
239
+
240
+
241
+ # Returns the status of a build
242
+ # ==== Attributes
243
+ #
244
+ # * +build_no+ - jenkins build id
245
+ # * +artifact_name+ - name from the build artifacts list in job data
246
+ # * +target_path+ - folder to download to (default is SS_output_dir)
247
+ #
248
+ # ==== Returns
249
+ #
250
+ # * +status+ - success or failure
251
+ #
252
+ def get_build_artifact(build_no, artifact_name, target_path = nil)
253
+ # http://vw-aus-rem-dv11.bmc.com:8080/job/BRPM_4.6-D_WAR/lastSuccessfulBuild/artifact/brpm_231.war
254
+ url_part = "#{build_no}/artifact/#{artifact_name}"
255
+ url = File.join(@url,"job",@job_name, url_part)
256
+ target_path = @params["SS_output_dir"] if target_path.nil?
257
+ fetch_artifact(url, target_path)
258
+ end
259
+
260
+ private
261
+
262
+ def download_file(artifact_url, download_path)
263
+ package_name = artifact_url.split("/").last
264
+ uri = URI(artifact_url)
265
+ Dir.chdir(download_path)
266
+ Net::HTTP.start(uri.host, uri.port) do |http|
267
+ request = Net::HTTP::Get.new uri.request_uri
268
+ BrpmAuto.log "Downloading: #{artifact_url} to #{download_path}"
269
+ fil = open(package_name, "wb")
270
+ begin
271
+ http.request_get(uri.request_uri) do |resp|
272
+ resp.read_body do |segment|
273
+ fil.write(segment)
274
+ end
275
+ end
276
+ ensure
277
+ fil.close()
278
+ end
279
+ end
280
+ "Downloaded to: #{download_path}"
281
+ end
282
+
283
+ def fetch_artifact(url, download_path)
284
+ _response = Net::HTTP.get_response( URI.parse( url ) )
285
+ package_name = url.split("/").last
286
+ case _response
287
+ when Net::HTTPSuccess then
288
+ response = download_file(url, download_path)
289
+ _response
290
+ when Net::HTTPRedirection then
291
+ location = _response['location']
292
+ BrpmAuto.log "\tRedirected to #{location}"
293
+ response = download_file(location, download_path)
294
+ _response
295
+ else
296
+ _response.value
297
+ end
298
+ end
299
+
300
+ end