gitlab-qa 7.20.0 → 7.21.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|