gitlab-qa 7.20.0 → 7.21.0
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.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +0 -3
- data/lib/gitlab/qa/component/telegraf.rb +174 -0
- data/lib/gitlab/qa/report/generate_test_session.rb +2 -1
- data/lib/gitlab/qa/report/report_as_issue.rb +1 -1
- data/lib/gitlab/qa/runner.rb +16 -3
- data/lib/gitlab/qa/runtime/env.rb +6 -14
- data/lib/gitlab/qa/version.rb +1 -1
- data/lib/gitlab/qa.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7df136e02dc7640dd456d9e6f0f089cfdf105c7e8d4983ee41e487081eadb3eb
|
4
|
+
data.tar.gz: 9ab31d33024c1a2e6826213028e4a1f1c3ab69c8ece4d230be79a4f3b1f15108
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5420d4ffea08d120903f51fa9d590b20cfee1686ecdff384ac2ff931ba1ead170409a412e3c45cb96f6310359540d245624bf05fce654f106030550d68ff8928
|
7
|
+
data.tar.gz: 459ce3e23b1113bcb52b2413d6cae58dc9946976e7615833fd5fbe9d0b979d0894c964fc6565cb2a0e13e9953369c4073b6a5ec00510b24edec3cd4b2ad00a61
|
data/.gitlab-ci.yml
CHANGED
@@ -21,9 +21,6 @@ default:
|
|
21
21
|
- bundle version
|
22
22
|
- bundle config path vendor
|
23
23
|
- bundle install --jobs=$(nproc) --retry=3 --quiet && bundle check
|
24
|
-
- if [ -n "$TRIGGERED_USER" ] && [ -n "$TRIGGER_SOURCE" ]; then
|
25
|
-
echo "Pipeline triggered by $TRIGGERED_USER at $TRIGGER_SOURCE";
|
26
|
-
fi
|
27
24
|
- export LANG=C.UTF-8
|
28
25
|
|
29
26
|
workflow:
|
@@ -0,0 +1,174 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
module Gitlab
|
6
|
+
module QA
|
7
|
+
module Component
|
8
|
+
# Component to collect docker metrics
|
9
|
+
#
|
10
|
+
class Telegraf < Base
|
11
|
+
DOCKER_IMAGE = 'telegraf'
|
12
|
+
DOCKER_IMAGE_TAG = '1.21-alpine'
|
13
|
+
LOG_DIR = '/etc/telegraf/log'
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
super
|
17
|
+
|
18
|
+
@name = DOCKER_IMAGE
|
19
|
+
@host_log_dir = "#{Runtime::Env.host_artifacts_dir}/#{@name}"
|
20
|
+
@environment = Runtime::Env.variables.slice(
|
21
|
+
'QA_INFLUXDB_TOKEN',
|
22
|
+
'QA_INFLUXDB_URL',
|
23
|
+
'QA_RUN_TYPE',
|
24
|
+
'CI_JOB_NAME',
|
25
|
+
'CI_PIPELINE_ID'
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
attr_reader :name, :host_log_dir, :telegraf_config
|
30
|
+
|
31
|
+
# Start container
|
32
|
+
#
|
33
|
+
# @return [void]
|
34
|
+
def start
|
35
|
+
docker.run(image: image, tag: tag) do |command|
|
36
|
+
set_command_args(command)
|
37
|
+
set_volumes(command)
|
38
|
+
set_environment(command)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Run prepare commands
|
43
|
+
#
|
44
|
+
# @return [void]
|
45
|
+
def prepare
|
46
|
+
@telegraf_config = File.open("#{Dir.mktmpdir(nil, ENV['CI_BUILDS_DIR'])}/telegraf.conf", 'w') do |file|
|
47
|
+
file.write(config)
|
48
|
+
file.path
|
49
|
+
end
|
50
|
+
FileUtils.mkdir_p(host_log_dir)
|
51
|
+
|
52
|
+
prepare_docker_image
|
53
|
+
prepare_docker_container
|
54
|
+
end
|
55
|
+
|
56
|
+
# Run teardown
|
57
|
+
#
|
58
|
+
# @return [void]
|
59
|
+
def teardown
|
60
|
+
return unless run_telegraf?
|
61
|
+
|
62
|
+
super
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# Set custom run command arguments
|
68
|
+
#
|
69
|
+
# @param [Docker::Command] command
|
70
|
+
# @return [void]
|
71
|
+
def set_command_args(command)
|
72
|
+
command << '-d'
|
73
|
+
command << "--name #{name}"
|
74
|
+
command << "--user root"
|
75
|
+
command << "--entrypoint telegraf"
|
76
|
+
end
|
77
|
+
|
78
|
+
# Set volumes
|
79
|
+
#
|
80
|
+
# @param [Docker::Command] command
|
81
|
+
# @return [void]
|
82
|
+
def set_volumes(command)
|
83
|
+
command.volume(host_log_dir, LOG_DIR)
|
84
|
+
command.volume('/var/run/docker.sock', '/var/run/docker.sock')
|
85
|
+
command.volume(telegraf_config, '/etc/telegraf/telegraf.conf', :ro)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Set environment variables
|
89
|
+
#
|
90
|
+
# @param [Docker::Command] command
|
91
|
+
# @return [void]
|
92
|
+
def set_environment(command)
|
93
|
+
environment.each { |k, v| command.env(k, v) }
|
94
|
+
end
|
95
|
+
|
96
|
+
# Run main entrypoint
|
97
|
+
#
|
98
|
+
# @return [void]
|
99
|
+
def instance_no_teardown
|
100
|
+
if run_telegraf?
|
101
|
+
super
|
102
|
+
else
|
103
|
+
Runtime::Logger.debug("Skipping starting telegraf container!")
|
104
|
+
yield self if block_given?
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Should telegraf be started
|
109
|
+
#
|
110
|
+
# Run only on CI and skip if metrics explicitly disabled, run_type not set or influx params missing
|
111
|
+
#
|
112
|
+
# @return [Boolean]
|
113
|
+
def run_telegraf?
|
114
|
+
Runtime::Env.ci && Runtime::Env.qa_export_test_metrics? && Runtime::Env.qa_run_type && !missing_influx_config?
|
115
|
+
end
|
116
|
+
|
117
|
+
# Influxdb config params missing
|
118
|
+
#
|
119
|
+
# @return [Boolean]
|
120
|
+
def missing_influx_config?
|
121
|
+
environment.slice('QA_INFLUXDB_TOKEN', 'QA_INFLUXDB_URL').any? { |_k, v| v.blank? }
|
122
|
+
end
|
123
|
+
|
124
|
+
# Telegraf configuration
|
125
|
+
#
|
126
|
+
# @return [String]
|
127
|
+
def config
|
128
|
+
<<~CONFIG
|
129
|
+
[global_tags]
|
130
|
+
run_type = "${QA_RUN_TYPE}"
|
131
|
+
pipeline_id = "${CI_PIPELINE_ID}"
|
132
|
+
job_name = "${CI_JOB_NAME}"
|
133
|
+
|
134
|
+
[agent]
|
135
|
+
interval = "1s"
|
136
|
+
round_interval = true
|
137
|
+
metric_batch_size = 1000
|
138
|
+
metric_buffer_limit = 10000
|
139
|
+
collection_jitter = "0s"
|
140
|
+
flush_interval = "10s"
|
141
|
+
flush_jitter = "0s"
|
142
|
+
precision = ""
|
143
|
+
debug = true
|
144
|
+
logtarget = "file"
|
145
|
+
logfile = "#{LOG_DIR}/telegraf.log"
|
146
|
+
hostname = ""
|
147
|
+
omit_hostname = false
|
148
|
+
|
149
|
+
[[outputs.influxdb_v2]]
|
150
|
+
urls = ["${QA_INFLUXDB_URL}"]
|
151
|
+
token = "${QA_INFLUXDB_TOKEN}"
|
152
|
+
organization = "gitlab-qa"
|
153
|
+
bucket = "test-env-stats"
|
154
|
+
|
155
|
+
[[inputs.docker]]
|
156
|
+
endpoint = "unix:///var/run/docker.sock"
|
157
|
+
gather_services = false
|
158
|
+
container_names = []
|
159
|
+
source_tag = false
|
160
|
+
container_name_include = ["gitlab-{ce,ee}-*", "gitlab-{ce,ee}-qa-*"]
|
161
|
+
container_name_exclude = []
|
162
|
+
timeout = "5s"
|
163
|
+
perdevice = false
|
164
|
+
perdevice_include = []
|
165
|
+
total = true
|
166
|
+
total_include = ["cpu", "blkio", "network"]
|
167
|
+
docker_label_include = []
|
168
|
+
docker_label_exclude = []
|
169
|
+
CONFIG
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erb'
|
4
|
+
require 'date'
|
4
5
|
|
5
6
|
module Gitlab
|
6
7
|
module QA
|
@@ -24,7 +25,7 @@ module Gitlab
|
|
24
25
|
end
|
25
26
|
|
26
27
|
issue = gitlab.create_issue(
|
27
|
-
title: "Test session report | #{pipeline}",
|
28
|
+
title: "#{Time.now.strftime('%Y-%m-%d')} Test session report | #{pipeline}",
|
28
29
|
description: generate_description(tests),
|
29
30
|
labels: ['Quality', 'QA', 'triage report', pipeline_name_label]
|
30
31
|
)
|
@@ -122,7 +122,7 @@ module Gitlab
|
|
122
122
|
"found:canary.staging.gitlab.com"
|
123
123
|
when 'preprod'
|
124
124
|
'found:pre.gitlab.com'
|
125
|
-
when '
|
125
|
+
when 'nightly', QA::Runtime::Env.default_branch, 'staging-ref', 'release'
|
126
126
|
"found:#{pipeline}"
|
127
127
|
else
|
128
128
|
raise "No `found:*` label for the `#{pipeline}` pipeline!"
|
data/lib/gitlab/qa/runner.rb
CHANGED
@@ -62,16 +62,17 @@ module Gitlab
|
|
62
62
|
args = remove_gitlab_qa_args(args)
|
63
63
|
|
64
64
|
if args.size >= 1
|
65
|
+
scenario = Scenario.const_get(args.shift)
|
66
|
+
|
65
67
|
load_omnibus_configurations
|
68
|
+
load_telegraf(scenario)
|
66
69
|
|
67
70
|
begin
|
68
71
|
@active_configurators.compact.each do |configurator|
|
69
72
|
configurator.instance(skip_teardown: true)
|
70
73
|
end
|
71
74
|
|
72
|
-
|
73
|
-
.const_get(args.shift)
|
74
|
-
.perform(*args)
|
75
|
+
scenario.perform(*args)
|
75
76
|
ensure
|
76
77
|
@active_configurators.compact.each(&:teardown)
|
77
78
|
end
|
@@ -100,6 +101,18 @@ module Gitlab
|
|
100
101
|
end.compact
|
101
102
|
end
|
102
103
|
|
104
|
+
# Start telegraf agent for metrics collection
|
105
|
+
#
|
106
|
+
# Do not load when running against external instance
|
107
|
+
#
|
108
|
+
# @param [Class] scenario
|
109
|
+
# @return [void]
|
110
|
+
def self.load_telegraf(scenario)
|
111
|
+
return if scenario <= Scenario::Test::Instance::DeploymentBase || scenario == Scenario::Test::Instance::Any
|
112
|
+
|
113
|
+
@active_configurators << Component::Telegraf.new
|
114
|
+
end
|
115
|
+
|
103
116
|
def self.load_omnibus_configurations
|
104
117
|
# OmnibusConfiguration::Test => --test
|
105
118
|
# OmnibusConfiguration::HelloThere => --hello_there
|
@@ -142,16 +142,12 @@ module Gitlab
|
|
142
142
|
end
|
143
143
|
|
144
144
|
def variables
|
145
|
-
|
146
|
-
|
147
|
-
ENV_VARIABLES.each do |name, attribute|
|
145
|
+
ENV_VARIABLES.each_with_object({}) do |(name, attribute), vars|
|
148
146
|
# Variables that are overridden in the environment take precedence
|
149
147
|
# over the defaults specified by the QA runtime.
|
150
148
|
value = env_var_name_if_defined(name) || send(attribute) # rubocop:disable GitlabSecurity/PublicSend
|
151
149
|
vars[name] = value if value
|
152
150
|
end
|
153
|
-
|
154
|
-
vars
|
155
151
|
end
|
156
152
|
|
157
153
|
def debug?
|
@@ -179,15 +175,7 @@ module Gitlab
|
|
179
175
|
end
|
180
176
|
|
181
177
|
def pipeline_from_project_name
|
182
|
-
|
183
|
-
if env_var_value_if_defined('TOP_UPSTREAM_SOURCE_JOB').to_s.start_with?('https://ops.gitlab.net')
|
184
|
-
'staging-orchestrated'
|
185
|
-
else
|
186
|
-
QA::Runtime::Env.default_branch
|
187
|
-
end
|
188
|
-
else
|
189
|
-
ci_project_name
|
190
|
-
end
|
178
|
+
ci_project_name.to_s.start_with?('gitlab-qa') ? QA::Runtime::Env.default_branch : ci_project_name
|
191
179
|
end
|
192
180
|
|
193
181
|
def run_id
|
@@ -314,6 +302,10 @@ module Gitlab
|
|
314
302
|
enabled?(env_var_value_if_defined('TEST_LICENSE_MODE'), default: false)
|
315
303
|
end
|
316
304
|
|
305
|
+
def qa_export_test_metrics?
|
306
|
+
enabled?(env_var_value_if_defined('QA_EXPORT_TEST_METRICS'), default: true)
|
307
|
+
end
|
308
|
+
|
317
309
|
private
|
318
310
|
|
319
311
|
def enabled?(value, default: true)
|
data/lib/gitlab/qa/version.rb
CHANGED
data/lib/gitlab/qa.rb
CHANGED
@@ -99,6 +99,7 @@ module Gitlab
|
|
99
99
|
autoload :MailHog, 'gitlab/qa/component/mail_hog'
|
100
100
|
autoload :Jira, 'gitlab/qa/component/jira'
|
101
101
|
autoload :PostgreSQL, 'gitlab/qa/component/postgresql'
|
102
|
+
autoload :Telegraf, 'gitlab/qa/component/telegraf'
|
102
103
|
end
|
103
104
|
|
104
105
|
module Support
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-qa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitLab Quality
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -256,6 +256,7 @@ files:
|
|
256
256
|
- lib/gitlab/qa/component/specs.rb
|
257
257
|
- lib/gitlab/qa/component/staging.rb
|
258
258
|
- lib/gitlab/qa/component/staging_ref.rb
|
259
|
+
- lib/gitlab/qa/component/telegraf.rb
|
259
260
|
- lib/gitlab/qa/docker/command.rb
|
260
261
|
- lib/gitlab/qa/docker/engine.rb
|
261
262
|
- lib/gitlab/qa/docker/shellout.rb
|