elastic-apm 4.5.0 → 4.6.2

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 (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}"