elastic-apm 4.5.0 → 4.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/.jenkins_exclude.yml +94 -37
  3. data/.ci/.jenkins_framework.yml +4 -3
  4. data/.ci/.jenkins_main_framework.yml +4 -0
  5. data/.ci/.jenkins_ruby.yml +1 -1
  6. data/.ci/.jenkins_ruby_benchmarks.yml +6 -0
  7. data/.ci/Jenkinsfile +46 -36
  8. data/.ci/docker/jruby/11-jdk/Dockerfile +8 -3
  9. data/.ci/docker/jruby/12-jdk/Dockerfile +5 -2
  10. data/.ci/docker/jruby/13-jdk/Dockerfile +5 -2
  11. data/.ci/docker/jruby/7-jdk/Dockerfile +6 -3
  12. data/.ci/docker/jruby/8-jdk/Dockerfile +8 -3
  13. data/.ci/docker/jruby/README.md +1 -1
  14. data/.ci/docker/jruby/run.sh +33 -9
  15. data/.ci/docker/jruby/test.sh +17 -2
  16. data/.ci/jobs/apm-agent-ruby-mbp.yml +1 -1
  17. data/.ci/snapshoty.yml +34 -0
  18. data/.ci/update-specs.yml +108 -0
  19. data/.github/PULL_REQUEST_TEMPLATE.md +5 -5
  20. data/.github/workflows/update-specs.yml +30 -0
  21. data/.pre-commit-config.yaml +2 -2
  22. data/CHANGELOG.asciidoc +55 -1
  23. data/CONTRIBUTING.md +3 -3
  24. data/Gemfile +15 -4
  25. data/README.md +1 -1
  26. data/Rakefile +4 -4
  27. data/bench/report.rb +1 -1
  28. data/docker-compose.yml +6 -0
  29. data/docs/api.asciidoc +2 -2
  30. data/docs/configuration.asciidoc +7 -5
  31. data/docs/introduction.asciidoc +3 -3
  32. data/docs/log-correlation.asciidoc +1 -1
  33. data/docs/upgrading.asciidoc +1 -1
  34. data/elastic-apm.gemspec +3 -2
  35. data/lib/elastic_apm/central_config.rb +5 -0
  36. data/lib/elastic_apm/config/server_info.rb +50 -0
  37. data/lib/elastic_apm/config.rb +25 -4
  38. data/lib/elastic_apm/error.rb +2 -1
  39. data/lib/elastic_apm/error_builder.rb +1 -0
  40. data/lib/elastic_apm/instrumenter.rb +4 -2
  41. data/lib/elastic_apm/metadata/system_info/container_info.rb +4 -3
  42. data/lib/elastic_apm/metadata/system_info.rb +1 -1
  43. data/lib/elastic_apm/metrics.rb +1 -4
  44. data/lib/elastic_apm/span/context/links.rb +32 -0
  45. data/lib/elastic_apm/span/context/service.rb +55 -0
  46. data/lib/elastic_apm/span/context.rb +19 -3
  47. data/lib/elastic_apm/span.rb +3 -0
  48. data/lib/elastic_apm/span_helpers.rb +2 -2
  49. data/lib/elastic_apm/spies/elasticsearch.rb +11 -1
  50. data/lib/elastic_apm/spies/faraday.rb +13 -4
  51. data/lib/elastic_apm/spies/mongo.rb +5 -12
  52. data/lib/elastic_apm/spies/racecar.rb +77 -0
  53. data/lib/elastic_apm/spies/redis.rb +1 -1
  54. data/lib/elastic_apm/spies/sequel.rb +9 -0
  55. data/lib/elastic_apm/spies/sns.rb +1 -1
  56. data/lib/elastic_apm/spies/sqs.rb +1 -0
  57. data/lib/elastic_apm/trace_context/tracestate.rb +4 -2
  58. data/lib/elastic_apm/trace_context.rb +1 -1
  59. data/lib/elastic_apm/transport/base.rb +1 -3
  60. data/lib/elastic_apm/transport/connection/http.rb +9 -3
  61. data/lib/elastic_apm/transport/serializers/span_serializer.rb +25 -0
  62. data/lib/elastic_apm/version.rb +1 -1
  63. data/lib/elastic_apm.rb +1 -0
  64. metadata +32 -9
  65. data/.ci/.jenkins_master_framework.yml +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c396bc981217532f2d6775de89e9a2aa7a1bcd501100588bbd700d0f4f2eb590
4
- data.tar.gz: 94f859585a09fc99f02a4bbd261193e0ed1f74bdb9463968692a16f277b1e4f0
3
+ metadata.gz: f7c28585ab44cfdb7a4eb8c32b8dd60e1ecb10c091357c25a6b13f35a0fe2ffc
4
+ data.tar.gz: 3aad55a03f8c2a4d824ea09731be304e7712ee306dc4e585c5cc29ba11e25413
5
5
  SHA512:
6
- metadata.gz: ae66a68c4651f695361b2028bf76132e8bc257fc141d3ad2872786bbab10b8e19bc3609a84478de53e56ad0c15695ad7debbcf62c4af8997833d0cf7cc7f6d23
7
- data.tar.gz: c6b9fd6f80de4139cac0dd040e45d56f869eb2ff8b3db38df376e898490b8c2a5523a9bb3f1ba73a8583356ae5647ec67835b994597dc3db8d72c62ee506794f
6
+ metadata.gz: eb6480a61567bd000e5325e12702c46882a42a9c452a60bd7af997b7138b076cd332d853f101b694af30d120bdd3b48f1b911feb6ecf12e94cdfc58ba096855c
7
+ data.tar.gz: e626d4a1cb9370780d764385585fb4c4025d612a84b7ef36ae0525f6d6f6a83ddf7d5aa670ccf2610bf10f9e2c2d9a87f2f97818cc9e8de27153c3a85cd34875
@@ -1,27 +1,31 @@
1
1
  exclude:
2
- # Ruby 2.3
3
- # Only includes rails-5.2, sinatra-2.0
4
- - RUBY_VERSION: ruby:2.3
2
+ # Ruby 2.4
3
+ # Only test on rails-5.2, sinatra-1.4
4
+ - RUBY_VERSION: ruby:2.4
5
+ FRAMEWORK: rails-7.0
6
+ - RUBY_VERSION: ruby:2.4
5
7
  FRAMEWORK: rails-6.1
6
- - RUBY_VERSION: ruby:2.3
8
+ - RUBY_VERSION: ruby:2.4
7
9
  FRAMEWORK: rails-6.0
8
- - RUBY_VERSION: ruby:2.3
10
+ - RUBY_VERSION: ruby:2.4
9
11
  FRAMEWORK: rails-4.2
10
- - RUBY_VERSION: ruby:2.3
11
- FRAMEWORK: sinatra-1.4
12
- - RUBY_VERSION: ruby:2.3
13
- FRAMEWORK: grape-1.5
14
- - RUBY_VERSION: ruby:2.3
15
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.0
16
- - RUBY_VERSION: ruby:2.3
12
+ - RUBY_VERSION: ruby:2.4
13
+ FRAMEWORK: sinatra-2.2
14
+ - RUBY_VERSION: ruby:2.4
15
+ FRAMEWORK: grape-1.6
16
+ - RUBY_VERSION: ruby:2.4
17
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.0
18
+ - RUBY_VERSION: ruby:2.4
17
19
  FRAMEWORK: rails-main
18
- - RUBY_VERSION: ruby:2.3
19
- FRAMEWORK: sinatra-master
20
- - RUBY_VERSION: ruby:2.3
20
+ - RUBY_VERSION: ruby:2.4
21
+ FRAMEWORK: sinatra-main
22
+ - RUBY_VERSION: ruby:2.4
21
23
  FRAMEWORK: grape-master
22
24
 
23
25
  # rails-4.2 exclusions
24
- # Only test on ruby 2.6, 2.5, 2.4, 2.3
26
+ # Only test on ruby 2.6, 2.5, 2.4
27
+ - RUBY_VERSION: ruby:3.1
28
+ FRAMEWORK: rails-4.2
25
29
  - RUBY_VERSION: ruby:3.0
26
30
  FRAMEWORK: rails-4.2
27
31
  - RUBY_VERSION: ruby:2.7
@@ -35,6 +39,8 @@ exclude:
35
39
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-8-jdk
36
40
  FRAMEWORK: rails-4.2
37
41
  # sinatra-1.4 exclusions
42
+ - RUBY_VERSION: ruby:3.1
43
+ FRAMEWORK: sinatra-1.4
38
44
  - RUBY_VERSION: ruby:3.0
39
45
  FRAMEWORK: sinatra-1.4
40
46
  - RUBY_VERSION: ruby:2.7
@@ -55,7 +61,11 @@ exclude:
55
61
  - RUBY_VERSION: ruby:2.4
56
62
  FRAMEWORK: rails-6.0
57
63
 
58
- # Only test rails master on ruby 2.7 and ruby 3.0
64
+ # Only test rails main on ruby 3.1
65
+ - RUBY_VERSION: ruby:3.0
66
+ FRAMEWORK: rails-main
67
+ - RUBY_VERSION: ruby:2.7
68
+ FRAMEWORK: rails-main
59
69
  - RUBY_VERSION: ruby:2.6
60
70
  FRAMEWORK: rails-main
61
71
  - RUBY_VERSION: ruby:2.5
@@ -71,21 +81,39 @@ exclude:
71
81
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-8-jdk
72
82
  FRAMEWORK: rails-main
73
83
 
74
- # Only test sinatra master on ruby 2.7 and ruby 3.0
84
+ # Only test rails 7.0 on ruby >= 2.7
75
85
  - RUBY_VERSION: ruby:2.6
76
- FRAMEWORK: sinatra-master
86
+ FRAMEWORK: rails-7.0
77
87
  - RUBY_VERSION: ruby:2.5
78
- FRAMEWORK: sinatra-master
88
+ FRAMEWORK: rails-7.0
79
89
  - RUBY_VERSION: ruby:2.4
80
- FRAMEWORK: sinatra-master
90
+ FRAMEWORK: rails-7.0
81
91
  - RUBY_VERSION: jruby:9.2
82
- FRAMEWORK: sinatra-master
92
+ FRAMEWORK: rails-7.0
83
93
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-13-jdk
84
- FRAMEWORK: sinatra-master
94
+ FRAMEWORK: rails-7.0
85
95
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
86
- FRAMEWORK: sinatra-master
96
+ FRAMEWORK: rails-7.0
87
97
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-8-jdk
88
- FRAMEWORK: sinatra-master
98
+ FRAMEWORK: rails-7.0
99
+
100
+ # Only test sinatra main on ruby 2.7 and ruby 3.1
101
+ - RUBY_VERSION: ruby:3.0
102
+ FRAMEWORK: sinatra-main
103
+ - RUBY_VERSION: ruby:2.6
104
+ FRAMEWORK: sinatra-main
105
+ - RUBY_VERSION: ruby:2.5
106
+ FRAMEWORK: sinatra-main
107
+ - RUBY_VERSION: ruby:2.4
108
+ FRAMEWORK: sinatra-main
109
+ - RUBY_VERSION: jruby:9.2
110
+ FRAMEWORK: sinatra-main
111
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-13-jdk
112
+ FRAMEWORK: sinatra-main
113
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
114
+ FRAMEWORK: sinatra-main
115
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-8-jdk
116
+ FRAMEWORK: sinatra-main
89
117
 
90
118
  # Only test grape master on ruby 2.7 and ruby 3.0
91
119
  - RUBY_VERSION: ruby:2.6
@@ -104,31 +132,60 @@ exclude:
104
132
  FRAMEWORK: grape-master
105
133
 
106
134
  # grape 1.5 doesn't support ruby 3.0
135
+ - RUBY_VERSION: ruby:3.1
136
+ FRAMEWORK: grape-1.6
137
+ - RUBY_VERSION: ruby:3.1
138
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
139
+ - RUBY_VERSION: ruby:3.1
140
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
107
141
  - RUBY_VERSION: ruby:3.0
108
- FRAMEWORK: grape-1.5
142
+ FRAMEWORK: grape-1.6
109
143
  - RUBY_VERSION: ruby:3.0
110
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.1
144
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
111
145
 
112
- # only test ruby 3.0 with rails 6.0 and rails 6.1
146
+ # only test ruby >= 3.0 with rails 6.0 and rails 6.1
147
+ - RUBY_VERSION: ruby:3.1
148
+ FRAMEWORK: rails-5.2
149
+ - RUBY_VERSION: ruby:3.1
150
+ FRAMEWORK: rails-5.1
113
151
  - RUBY_VERSION: ruby:3.0
114
152
  FRAMEWORK: rails-5.2
115
153
  - RUBY_VERSION: ruby:3.0
116
154
  FRAMEWORK: rails-5.1
117
155
 
118
156
  # Unsupported
157
+ # Ruby 2.6
158
+ - RUBY_VERSION: ruby:2.6
159
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
119
160
  - RUBY_VERSION: ruby:2.6
120
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.1
161
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
162
+ # Ruby 2.5
121
163
  - RUBY_VERSION: ruby:2.5
122
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.1
164
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
165
+ - RUBY_VERSION: ruby:2.5
166
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
167
+ # Ruby 2.4
168
+ - RUBY_VERSION: ruby:2.4
169
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
123
170
  - RUBY_VERSION: ruby:2.4
124
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.1
125
- - RUBY_VERSION: ruby:2.3
126
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.1
171
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
172
+ # JRuby 9.2
127
173
  - RUBY_VERSION: jruby:9.2
128
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.1
174
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
175
+ - RUBY_VERSION: jruby:9.2
176
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
177
+ # JRuby 9.2-13-jdk
178
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-13-jdk
179
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
129
180
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-13-jdk
130
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.1
181
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
182
+ # JRuby 9.2-11-jdk
131
183
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
132
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.1
184
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
185
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
186
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
187
+ # JRuby 9.2-8-jdk
188
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-8-jdk
189
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
133
190
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-8-jdk
134
- FRAMEWORK: grape-1.5,sinatra-2.0,rails-6.1
191
+ FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
@@ -1,12 +1,13 @@
1
1
  FRAMEWORK:
2
+ - rails-7.0
2
3
  - rails-6.1
3
4
  - rails-6.0
4
5
  - rails-5.2
5
6
  - rails-4.2
6
7
 
7
- - sinatra-2.0
8
+ - sinatra-2.2
8
9
  - sinatra-1.4
9
10
 
10
- - grape-1.5
11
+ - grape-1.6
11
12
 
12
- - grape-1.5,sinatra-2.0,rails-6.1
13
+ - grape-1.6,sinatra-2.2,rails-6.1
@@ -0,0 +1,4 @@
1
+ FRAMEWORK:
2
+ #- rails-main
3
+ - sinatra-main
4
+ - grape-master
@@ -1,8 +1,8 @@
1
1
  RUBY_VERSION:
2
+ - ruby:3.1
2
3
  - ruby:3.0
3
4
  - ruby:2.7
4
5
  - ruby:2.6
5
- - ruby:2.5
6
6
  - ruby:2.4
7
7
  - jruby:9.2
8
8
  - docker.elastic.co/observability-ci/jruby:9.2-13-jdk
@@ -0,0 +1,6 @@
1
+ RUBY_VERSION:
2
+ - ruby:3.1
3
+ - ruby:3.0
4
+ - ruby:2.7
5
+ - ruby:2.6
6
+ - jruby:9.2
data/.ci/Jenkinsfile CHANGED
@@ -21,12 +21,11 @@ pipeline {
21
21
  CODECOV_SECRET = 'secret/apm-team/ci/apm-agent-ruby-codecov'
22
22
  DOCKER_REGISTRY = 'docker.elastic.co'
23
23
  DOCKER_SECRET = 'secret/apm-team/ci/docker-registry/prod'
24
- GITHUB_CHECK_ITS_NAME = 'Integration Tests'
25
- ITS_PIPELINE = 'apm-integration-tests-selector-mbp/master'
26
24
  RELEASE_SECRET = 'secret/apm-team/ci/apm-agent-ruby-rubygems-release'
27
25
  OPBEANS_REPO = 'opbeans-ruby'
28
26
  REFERENCE_REPO = '/var/lib/jenkins/.git-references/apm-agent-ruby.git'
29
27
  SLACK_CHANNEL = '#apm-agent-ruby'
28
+ RUBY_DOCKER_TAG = 'ruby:2.6'
30
29
  }
31
30
  options {
32
31
  timeout(time: 2, unit: 'HOURS')
@@ -42,7 +41,7 @@ pipeline {
42
41
  issueCommentTrigger("(${obltGitHubComments()}|^run benchmark tests)")
43
42
  }
44
43
  parameters {
45
- booleanParam(name: 'Run_As_Master_Branch', defaultValue: false, description: 'Allow to run any steps on a PR, some steps normally only run on master branch.')
44
+ booleanParam(name: 'Run_As_Main_Branch', defaultValue: false, description: 'Allow to run any steps on a PR, some steps normally only run on main branch.')
46
45
  booleanParam(name: 'bench_ci', defaultValue: true, description: 'Enable run benchmarks.')
47
46
  }
48
47
  stages {
@@ -71,7 +70,7 @@ pipeline {
71
70
  expression { return env.ONLY_DOCS == "false" }
72
71
  anyOf {
73
72
  not { changeRequest() }
74
- expression { return params.Run_As_Master_Branch }
73
+ expression { return params.Run_As_Main_Branch }
75
74
  }
76
75
  }
77
76
  }
@@ -115,32 +114,44 @@ pipeline {
115
114
  }
116
115
  }
117
116
  }
118
- stage('Master Tests frameworks') {
117
+ stage('Main Tests frameworks') {
119
118
  options { skipDefaultCheckout() }
120
119
  steps {
121
- catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE', message: "The tests for the master framework have failed. Let's warn instead.") {
122
- runTests('.ci/.jenkins_master_framework.yml')
120
+ catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE', message: "The tests for the main framework have failed. Let's warn instead.") {
121
+ runTests('.ci/.jenkins_main_framework.yml')
123
122
  }
124
123
  }
125
124
  }
126
- stage('Integration Tests') {
127
- agent none
128
- when {
129
- beforeAgent true
130
- anyOf {
131
- changeRequest()
132
- expression { return !params.Run_As_Master_Branch }
125
+ }
126
+ }
127
+ stage('Publish snapshot packages') {
128
+ options { skipDefaultCheckout() }
129
+ environment {
130
+ PATH = "${env.WORKSPACE}/.local/bin:${env.WORKSPACE}/bin:${env.PATH}"
131
+ BUCKET_NAME = 'oblt-artifacts'
132
+ DOCKER_REGISTRY = 'docker.elastic.co'
133
+ DOCKER_REGISTRY_SECRET = 'secret/observability-team/ci/docker-registry/prod'
134
+ GCS_ACCOUNT_SECRET = 'secret/observability-team/ci/snapshoty'
135
+ }
136
+ when { branch 'main' }
137
+ steps {
138
+ withGithubNotify(context: 'Publish snapshot packages') {
139
+ deleteDir()
140
+ unstash 'source'
141
+ dir(env.BASE_DIR) {
142
+ script {
143
+ docker.image(env.RUBY_DOCKER_TAG).inside() {
144
+ sh(label: 'install build system', script: 'gem install rake yard rspec')
145
+ sh(label: 'create gem', script: 'rake build')
146
+ }
147
+ snapshoty(
148
+ bucket: env.BUCKET_NAME,
149
+ gcsAccountSecret: env.GCS_ACCOUNT_SECRET,
150
+ dockerRegistry: env.DOCKER_REGISTRY,
151
+ dockerSecret: env.DOCKER_REGISTRY_SECRET
152
+ )
133
153
  }
134
154
  }
135
- steps {
136
- githubNotify(context: "${env.GITHUB_CHECK_ITS_NAME}", description: "${env.GITHUB_CHECK_ITS_NAME} ...", status: 'PENDING', targetUrl: "${env.JENKINS_URL}search/?q=${env.ITS_PIPELINE.replaceAll('/','+')}")
137
- build(job: env.ITS_PIPELINE, propagate: false, wait: true,
138
- parameters: [ string(name: 'INTEGRATION_TEST', value: 'Ruby'),
139
- string(name: 'BUILD_OPTS', value: "--ruby-agent-version ${env.GIT_BASE_COMMIT} --ruby-agent-version-state ${env.GIT_BUILD_CAUSE} --ruby-agent-repo ${env.CHANGE_FORK?.trim() ?: 'elastic'}/${env.REPO} --opbeans-ruby-agent-branch ${env.GIT_BASE_COMMIT}"),
140
- string(name: 'GITHUB_CHECK_NAME', value: env.GITHUB_CHECK_ITS_NAME),
141
- string(name: 'GITHUB_CHECK_REPO', value: env.REPO),
142
- string(name: 'GITHUB_CHECK_SHA1', value: env.GIT_BASE_COMMIT) ])
143
- }
144
155
  }
145
156
  }
146
157
  }
@@ -150,11 +161,11 @@ pipeline {
150
161
  beforeAgent true
151
162
  allOf {
152
163
  anyOf {
153
- branch 'master'
164
+ branch 'main'
154
165
  branch "\\d+\\.\\d+"
155
166
  branch "v\\d?"
156
167
  tag pattern: 'v\\d+.*', comparator: "REGEXP"
157
- expression { return params.Run_As_Master_Branch }
168
+ expression { return params.Run_As_Main_Branch }
158
169
  expression { return env.GITHUB_COMMENT?.contains('benchmark tests') }
159
170
  }
160
171
  expression { return params.bench_ci }
@@ -162,13 +173,13 @@ pipeline {
162
173
  }
163
174
  stages {
164
175
  stage('Clean Workspace') {
165
- agent { label 'metal' }
176
+ agent { label 'microbenchmarks-pool' }
166
177
  steps {
167
178
  echo "Cleaning Workspace"
168
179
  }
169
180
  post {
170
181
  always {
171
- cleanWs()
182
+ cleanWs(notFailBuild: true)
172
183
  }
173
184
  }
174
185
  }
@@ -183,7 +194,7 @@ pipeline {
183
194
  unstash 'source'
184
195
  dir("${BASE_DIR}"){
185
196
  script {
186
- def versions = readYaml(file: ".ci/.jenkins_ruby.yml")
197
+ def versions = readYaml(file: ".ci/.jenkins_ruby_benchmarks.yml")
187
198
  def benchmarkTask = [:]
188
199
  versions['RUBY_VERSION'].each{ v ->
189
200
  benchmarkTask[v] = runBenchmark(v)
@@ -199,7 +210,6 @@ pipeline {
199
210
  stage('Release') {
200
211
  options { skipDefaultCheckout() }
201
212
  environment {
202
- RUBY_DOCKER_TAG = 'ruby:2.6'
203
213
  HOME = '/var/lib/jenkins'
204
214
  }
205
215
  when {
@@ -256,11 +266,12 @@ pipeline {
256
266
  (retry 10 curl --silent --show-error --fail -I https://rubygems.org/gems/elastic-apm/versions/${env.VERSION})
257
267
  """
258
268
  dir("${OPBEANS_REPO}"){
259
- git credentialsId: 'f6c7695a-671e-4f4f-a331-acdce44ff9ba',
260
- url: "git@github.com:elastic/${OPBEANS_REPO}.git"
269
+ git(credentialsId: 'f6c7695a-671e-4f4f-a331-acdce44ff9ba',
270
+ url: "git@github.com:elastic/${OPBEANS_REPO}.git",
271
+ branch: 'main')
261
272
  // It's required to transform the tag value to the gem version
262
273
  sh script: ".ci/bump-version.sh ${env.VERSION}", label: 'Bump version'
263
- // The opbeans pipeline will trigger a release for the master branch
274
+ // The opbeans pipeline will trigger a release for the main branch
264
275
  gitPush()
265
276
  // The opbeans pipeline will trigger a release for the release tag
266
277
  gitCreateTag(tag: "${env.BRANCH_NAME}")
@@ -282,7 +293,7 @@ pipeline {
282
293
  */
283
294
  def runBenchmark(version){
284
295
  return {
285
- node('metal'){
296
+ node('microbenchmarks-pool'){
286
297
  // Transform the versions like:
287
298
  // - docker.elastic.co/observability-ci/jruby:9.2-12-jdk to jruby-9.2-12-jdk
288
299
  // - jruby:9.1 to jruby-9.1
@@ -298,8 +309,6 @@ def runBenchmark(version){
298
309
  }
299
310
  try{
300
311
  sh """./spec/scripts/benchmarks.sh "${version}" "${REFERENCE_REPO}" """
301
- } catch(e){
302
- throw e
303
312
  } finally {
304
313
  archiveArtifacts(
305
314
  allowEmptyArchive: true,
@@ -307,6 +316,7 @@ def runBenchmark(version){
307
316
  onlyIfSuccessful: false)
308
317
  sendBenchmarks(file: "benchmark-${transformedVersion}.bulk",
309
318
  index: "benchmark-ruby", archive: true)
319
+ cleanWs(notFailBuild: true)
310
320
  }
311
321
  }
312
322
  }
@@ -410,7 +420,7 @@ def convergeCoverage() {
410
420
 
411
421
  def prepareRelease(Closure body){
412
422
  dir("${env.BASE_DIR}"){
413
- docker.image("${env.RUBY_DOCKER_TAG}").inside('-v ${REFERENCE_REPO}:${REFERENCE_REPO} -v /etc/passwd:/etc/passwd -v ${HOME}/.ssh:${HOME}/.ssh') {
423
+ docker.image(env.RUBY_DOCKER_TAG).inside('-v ${REFERENCE_REPO}:${REFERENCE_REPO} -v /etc/passwd:/etc/passwd -v ${HOME}/.ssh:${HOME}/.ssh') {
414
424
  withEnv(["HOME=${env.WORKSPACE}/${env.BASE_DIR ?: ''}"]) {
415
425
  rubygemsLogin.withApi(secret: "${env.RELEASE_SECRET}") {
416
426
  withGitRelease(credentialsId: '2a9602aa-ab9f-4e52-baf3-b71ca88469c7-UserAndToken') {
@@ -6,11 +6,11 @@ RUN apt-get update \
6
6
  && rm -rf /var/lib/apt/lists/*
7
7
 
8
8
  ENV JRUBY_VERSION 9.2.16.0
9
- ENV JRUBY_SHA256 9199707712c683c525252ccb1de5cb8e75f53b790c5b57a18f6367039ec79553
10
9
 
11
10
  RUN mkdir -p /opt/jruby \
11
+ && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz.sha256 -o /tmp/jruby.sha256 \
12
12
  && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz -o /tmp/jruby.tar.gz \
13
- && echo "$JRUBY_SHA256 */tmp/jruby.tar.gz" | sha256sum -c - \
13
+ && echo "$(cat /tmp/jruby.sha256) */tmp/jruby.tar.gz" | sha256sum -c - \
14
14
  && tar -zx --strip-components=1 -f /tmp/jruby.tar.gz -C /opt/jruby \
15
15
  && update-alternatives --install /usr/local/bin/ruby ruby /opt/jruby/bin/jruby 1
16
16
 
@@ -25,7 +25,9 @@ RUN mkdir -p /opt/jruby/etc \
25
25
  } >> /opt/jruby/etc/gemrc
26
26
 
27
27
  # install bundler, gem requires bash to work
28
- RUN gem install bundler rake net-telnet xmlrpc tzinfo-data
28
+ # https://github.com/rubygems/rubygems/issues/2534#issuecomment-448843746
29
+ RUN gem update --system --conservative || (gem i "rubygems-update:~>2.7" --no-document && update_rubygems) \
30
+ && gem install bundler:2.3.26 rake net-telnet xmlrpc tzinfo-data
29
31
 
30
32
  # install things globally, for great justice
31
33
  # and don't create ".bundle" in all our apps
@@ -38,4 +40,7 @@ ENV PATH $BUNDLE_BIN:$PATH
38
40
  RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" \
39
41
  && chmod 777 "$GEM_HOME" "$BUNDLE_BIN"
40
42
 
43
+ RUN useradd -rm -d /home/jruby -u 1001 jruby
44
+ USER jruby
45
+ WORKDIR /home/jruby
41
46
  CMD [ "irb" ]
@@ -6,11 +6,11 @@ RUN apt-get update \
6
6
  && rm -rf /var/lib/apt/lists/*
7
7
 
8
8
  ENV JRUBY_VERSION 9.3.1.0
9
- ENV JRUBY_SHA256 9199707712c683c525252ccb1de5cb8e75f53b790c5b57a18f6367039ec79553
10
9
 
11
10
  RUN mkdir -p /opt/jruby \
11
+ && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz.sha256 -o /tmp/jruby.sha256 \
12
12
  && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz -o /tmp/jruby.tar.gz \
13
- && echo "$JRUBY_SHA256 */tmp/jruby.tar.gz" | sha256sum -c - \
13
+ && echo "$(cat /tmp/jruby.sha256) */tmp/jruby.tar.gz" | sha256sum -c - \
14
14
  && tar -zx --strip-components=1 -f /tmp/jruby.tar.gz -C /opt/jruby \
15
15
  && update-alternatives --install /usr/local/bin/ruby ruby /opt/jruby/bin/jruby 1
16
16
 
@@ -38,4 +38,7 @@ ENV PATH $BUNDLE_BIN:$PATH
38
38
  RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" \
39
39
  && chmod 777 "$GEM_HOME" "$BUNDLE_BIN"
40
40
 
41
+ RUN useradd -rm -d /home/jruby -u 1001 jruby
42
+ USER jruby
43
+ WORKDIR /home/jruby
41
44
  CMD [ "irb" ]
@@ -6,11 +6,11 @@ RUN apt-get update \
6
6
  && rm -rf /var/lib/apt/lists/*
7
7
 
8
8
  ENV JRUBY_VERSION 9.3.1.0
9
- ENV JRUBY_SHA256 9199707712c683c525252ccb1de5cb8e75f53b790c5b57a18f6367039ec79553
10
9
 
11
10
  RUN mkdir -p /opt/jruby \
11
+ && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz.sha256 -o /tmp/jruby.sha256 \
12
12
  && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz -o /tmp/jruby.tar.gz \
13
- && echo "$JRUBY_SHA256 */tmp/jruby.tar.gz" | sha256sum -c - \
13
+ && echo "$(cat /tmp/jruby.sha256) */tmp/jruby.tar.gz" | sha256sum -c - \
14
14
  && tar -zx --strip-components=1 -f /tmp/jruby.tar.gz -C /opt/jruby \
15
15
  && update-alternatives --install /usr/local/bin/ruby ruby /opt/jruby/bin/jruby 1
16
16
 
@@ -38,4 +38,7 @@ ENV PATH $BUNDLE_BIN:$PATH
38
38
  RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" \
39
39
  && chmod 777 "$GEM_HOME" "$BUNDLE_BIN"
40
40
 
41
+ RUN useradd -rm -d /home/jruby -u 1001 jruby
42
+ USER jruby
43
+ WORKDIR /home/jruby
41
44
  CMD [ "irb" ]
@@ -2,15 +2,15 @@ FROM openjdk:7-jdk
2
2
 
3
3
  RUN apt-get update \
4
4
  && apt-get install -y libc6-dev --no-install-recommends \
5
- && apt-get install -y gcc \
5
+ && apt-get install --force-yes -y gcc \
6
6
  && rm -rf /var/lib/apt/lists/*
7
7
 
8
8
  ENV JRUBY_VERSION 9.3.1.0
9
- ENV JRUBY_SHA256 6a22f7bf8fef1a52530a9c9781a9d374ad07bbbef0d3d8e2af0ff5cbead0dfd5
10
9
 
11
10
  RUN mkdir -p /opt/jruby \
11
+ && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz.sha256 -o /tmp/jruby.sha256 \
12
12
  && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz -o /tmp/jruby.tar.gz \
13
- && echo "$JRUBY_SHA256 */tmp/jruby.tar.gz" | sha256sum -c - \
13
+ && echo "$(cat /tmp/jruby.sha256) */tmp/jruby.tar.gz" | sha256sum -c - \
14
14
  && tar -zx --strip-components=1 -f /tmp/jruby.tar.gz -C /opt/jruby \
15
15
  && update-alternatives --install /usr/local/bin/ruby ruby /opt/jruby/bin/jruby 1
16
16
 
@@ -38,4 +38,7 @@ ENV PATH $BUNDLE_BIN:$PATH
38
38
  RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" \
39
39
  && chmod 777 "$GEM_HOME" "$BUNDLE_BIN"
40
40
 
41
+ RUN useradd -rm -d /home/jruby -u 1001 jruby
42
+ USER jruby
43
+ WORKDIR /home/jruby
41
44
  CMD [ "irb" ]
@@ -6,11 +6,11 @@ RUN apt-get update \
6
6
  && rm -rf /var/lib/apt/lists/*
7
7
 
8
8
  ENV JRUBY_VERSION 9.2.14.0
9
- ENV JRUBY_SHA256 9199707712c683c525252ccb1de5cb8e75f53b790c5b57a18f6367039ec79553
10
9
 
11
10
  RUN mkdir -p /opt/jruby \
11
+ && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz.sha256 -o /tmp/jruby.sha256 \
12
12
  && curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz -o /tmp/jruby.tar.gz \
13
- && echo "$JRUBY_SHA256 */tmp/jruby.tar.gz" | sha256sum -c - \
13
+ && echo "$(cat /tmp/jruby.sha256) */tmp/jruby.tar.gz" | sha256sum -c - \
14
14
  && tar -zx --strip-components=1 -f /tmp/jruby.tar.gz -C /opt/jruby \
15
15
  && update-alternatives --install /usr/local/bin/ruby ruby /opt/jruby/bin/jruby 1
16
16
 
@@ -25,7 +25,9 @@ RUN mkdir -p /opt/jruby/etc \
25
25
  } >> /opt/jruby/etc/gemrc
26
26
 
27
27
  # install bundler, gem requires bash to work
28
- RUN gem install bundler rake net-telnet xmlrpc tzinfo-data
28
+ # https://github.com/rubygems/rubygems/issues/2534#issuecomment-448843746
29
+ RUN gem update --system --conservative || (gem i "rubygems-update:~>2.7" --no-document && update_rubygems) \
30
+ && gem install bundler:2.3.26 rake net-telnet xmlrpc tzinfo-data
29
31
 
30
32
  # install things globally, for great justice
31
33
  # and don't create ".bundle" in all our apps
@@ -38,4 +40,7 @@ ENV PATH $BUNDLE_BIN:$PATH
38
40
  RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" \
39
41
  && chmod 777 "$GEM_HOME" "$BUNDLE_BIN"
40
42
 
43
+ RUN useradd -rm -d /home/jruby -u 1001 jruby
44
+ USER jruby
45
+ WORKDIR /home/jruby
41
46
  CMD [ "irb" ]
@@ -12,7 +12,7 @@ To build the images run
12
12
 
13
13
  You can set your own docker registry with the flag `--registry x.y.z/org`
14
14
 
15
- You can exclude what images can be built with the flag `--exclude jdk-7`
15
+ You can exclude what images can be built with the flag `--exclude jdk-7`. Multiple usages of `--exclude` are accepted.
16
16
 
17
17
  ## Test
18
18
 
@@ -1,5 +1,10 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
+ set -o pipefail
4
+
5
+ # 7-jdk is excluded by default. See https://github.com/elastic/apm-agent-ruby/pull/1367#issuecomment-1437228929
6
+ EXCLUDE=("7-jdk")
7
+
3
8
  while (( "$#" )); do
4
9
  case "$1" in
5
10
  -r|--registry)
@@ -7,7 +12,7 @@ while (( "$#" )); do
7
12
  shift 2
8
13
  ;;
9
14
  -e|--exclude)
10
- EXCLUDE=$2
15
+ EXCLUDE+=("$2")
11
16
  shift 2
12
17
  ;;
13
18
  -a|--action)
@@ -28,12 +33,13 @@ while (( "$#" )); do
28
33
  esac
29
34
  done
30
35
 
36
+ function convert_exclude_opts() {
37
+ for val in "${EXCLUDE[@]}"; do
38
+ printf "! -path \"./%s/*\" " $val
39
+ done
40
+ }
31
41
 
32
- if [ -n "$EXCLUDE" ] ; then
33
- search=$(find . -path ./$EXCLUDE -prune -o -name 'Dockerfile' -print)
34
- else
35
- search=$(find . -name 'Dockerfile' -print)
36
- fi
42
+ search=$(bash -c "find . -name 'Dockerfile' $(convert_exclude_opts) -print")
37
43
 
38
44
  function report {
39
45
  if [ $1 -eq 0 ] ; then
@@ -43,7 +49,18 @@ function report {
43
49
  fi
44
50
  }
45
51
 
52
+ function max {
53
+ if [ "$1" -gt "$2" ]; then
54
+ echo "$1"
55
+ else
56
+ echo "$2"
57
+ fi
58
+ }
59
+
46
60
  echo "${ACTION} docker images"
61
+
62
+ EXIT_CODE=0
63
+
47
64
  for i in ${search}; do
48
65
  jdk_image=$(basename `dirname "$i"`)
49
66
  jdk_version=$(echo "$jdk_image" | cut -d'-' -f1)
@@ -63,11 +80,18 @@ for i in ${search}; do
63
80
 
64
81
  if [ "${ACTION}" == "build" ] ; then
65
82
  docker build --tag "${name}" -< $i >> output.log 2>&1
66
- report $? "${name}"
83
+ result=$?
84
+ report $result "${name}"
67
85
  elif [ "${ACTION}" == "push" ] ; then
68
86
  docker push "${name}" >> output.log 2>&1
69
- report $? "${name}"
87
+ result=$?
88
+ report $result "${name}"
70
89
  else
71
90
  ./test.sh "${name}" $jdk_version
91
+ result=$?
72
92
  fi
73
- done
93
+
94
+ EXIT_CODE=$(max $EXIT_CODE $result)
95
+ done
96
+
97
+ exit "${EXIT_CODE}"