evrone-ci-worker 0.2.0.pre6 → 0.2.0.pre7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 936dd2f15a8805413c5d7196e7938143f679d72d
4
- data.tar.gz: 5768e2127ecdd746f7711458cb3d3c6ca216390c
3
+ metadata.gz: ba149d203da6b56c937f41a88383bb540a8b3ed9
4
+ data.tar.gz: c2bf30caa9440aea2bac789e394a66f6d7bb242b
5
5
  SHA512:
6
- metadata.gz: 4cc36f04fe8731092f25741647ebe3564eb1f822f94c6f6e21b11882b3e4e80661e706d443ccb7a5ca8601e126394c61ace6e79739f6a45f96e7f903290c829d
7
- data.tar.gz: 2931e17494ea2195ca6e9f54c9e38238529ced0ac15526718bc4a63b1fed29e078980ce1c3da1368122e608ea5220205866f91761b03a344e0b230164c7908ff
6
+ metadata.gz: 82023a7a3429c6014f128af9e2bdf3978bf752a315f013bf3ba20ed52bc9df7bb1bf2bd08c4a3e06ca4688c12908a2c7c088d3d33bf3a122141a60905ba9e4db
7
+ data.tar.gz: d31bfbfc8bbcaa00399433df688aef5380683ca88bdbf9f41c81fa216ee65bd34be8efa364846be9fa9aa3aaacf885eaa1aaee6c120bd069e0846b471fe48d7e
data/docker/Dockerfile CHANGED
@@ -13,5 +13,3 @@ ADD ./sv-enable /usr/local/bin/sv-enable
13
13
  # run bootstrap
14
14
  ADD ./bootstrap.sh /tmp/bootstrap.sh
15
15
  RUN /tmp/bootstrap.sh && rm /tmp/bootstrap.sh
16
-
17
- ENTRYPOINT ["/usr/bin/runsvdir", "-P", "/etc/service"]
data/docker/bootstrap.sh CHANGED
@@ -48,6 +48,10 @@ apt-get install -qy openssh-server
48
48
  mkdir -p /var/run/sshd
49
49
  sv-gen ssh "/usr/sbin/sshd -D -e"
50
50
 
51
+ # install syslog
52
+ apt-get install -qy rsyslog
53
+ sv-gen rsyslogd "/usr/sbin/rsyslogd -c5 -n" root
54
+
51
55
  # install postgresql
52
56
  apt-get install -qy postgresql-9.1 postgresql-contrib-9.1
53
57
  echo "local all all trust" > /etc/postgresql/9.1/main/pg_hba.conf
@@ -83,10 +87,12 @@ ln -sf /usr/local/$(basename $PH_PKG .tar.bz2)/bin/phantomjs /usr/local/bin
83
87
 
84
88
  # add ruby
85
89
  apt-get install -qy rbenv rbenv-2.0.0-p195 rbenv-1.9.3-p448 rbenv-2.0.0-p247 rbenv-1.9.3-p392
90
+ apt-get install -qy ruby1.8 ruby1.8-dev rubygems # 1.8.7
86
91
  env RBENV_VERSION=2.0.0-p247 rbenv exec gem install bundler --no-ri --no-rdoc
87
92
  env RBENV_VERSION=2.0.0-p195 rbenv exec gem install bundler --no-ri --no-rdoc
88
93
  env RBENV_VERSION=1.9.3-p448 rbenv exec gem install bundler --no-ri --no-rdoc
89
94
  env RBENV_VERSION=1.9.3-p392 rbenv exec gem install bundler --no-ri --no-rdoc
95
+ env RBENV_VERSION=system rbenv exec gem install bundler --no-ri --no-rdoc
90
96
  rbenv rehash
91
97
 
92
98
  apt-get -qy clean autoremove
@@ -95,3 +101,4 @@ sv-enable postgresql
95
101
  sv-enable ssh
96
102
  sv-enable mysql
97
103
  sv-enable redis-server
104
+ sv-enable rsyslogd
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency 'evrone-ci-common', "= #{Evrone::CI::Worker::VERSION}"
22
22
  spec.add_runtime_dependency 'evrone-ci-message', "= #{Evrone::CI::Worker::VERSION}"
23
- spec.add_runtime_dependency 'evrone-common-amqp', '~> 0.1.1'
23
+ spec.add_runtime_dependency 'evrone-common-amqp', '~> 0.2.4'
24
24
  spec.add_runtime_dependency 'docker-api', '= 1.5.4'
25
25
  spec.add_runtime_dependency 'hashr', '= 0.0.22'
26
26
 
@@ -1,5 +1,6 @@
1
1
  require 'optparse'
2
2
  require 'evrone/common/amqp'
3
+ require 'evrone/ci/common/env_file'
3
4
 
4
5
  module Evrone
5
6
  module CI
@@ -8,6 +9,7 @@ module Evrone
8
9
 
9
10
  include Helper::Config
10
11
  include Helper::Logger
12
+ include Common::EnvFile
11
13
 
12
14
  def initialize
13
15
  @options = {}
@@ -16,8 +18,6 @@ module Evrone
16
18
  end
17
19
 
18
20
  def run
19
- logger.warn "spawn inside #{config.path_prefix}"
20
-
21
21
  trap('INT') {
22
22
  Thread.new do
23
23
  Evrone::Common::AMQP.shutdown
@@ -40,27 +40,17 @@ module Evrone
40
40
  opts.on("-p", "--path PATH", "Working directory, default current directory") do |v|
41
41
  @options[:path_prefix] = v.to_s
42
42
  end
43
- opts.on("-c", "--config FILE", "Path to configuration file") do |v|
44
- read_configuration v
43
+ opts.on("-c", "--config FILE", "Path to configuration file, default /etc/evrone/ci") do |v|
44
+ @options[:config] = v
45
45
  end
46
46
  end.parse!
47
47
 
48
+ read_env_file @options.delete(:config)
49
+
48
50
  @options.each_pair do |k,v|
49
51
  config.public_send("#{k}=", v)
50
52
  end
51
53
  end
52
-
53
- def read_configuration(file)
54
- file = File.expand_path(file)
55
- buf = File.read(file)
56
-
57
- buf.split("\n").each do |line|
58
- puts line
59
- env, value = line.split("=").map(&:strip)
60
- ENV[env] = value
61
- end
62
- end
63
-
64
54
  end
65
55
  end
66
56
  end
@@ -26,7 +26,7 @@ module Evrone
26
26
 
27
27
  docker: {
28
28
  remote_dir: "/home/ci",
29
- init: %w{ /usr/local/bin/runsvdir -P /etc/service },
29
+ init: %w{ /usr/bin/runsvdir -P /etc/service },
30
30
  image: "ci",
31
31
 
32
32
  ssh: {
@@ -8,17 +8,19 @@ module Evrone
8
8
  include Evrone::Common::AMQP::Consumer
9
9
 
10
10
  exchange 'ci.jobs'
11
- queue 'ci.worker.jobs.generic'
11
+ queue 'ci.worker.jobs'
12
12
  ack true
13
13
 
14
14
  model Message::PerformJob
15
15
 
16
16
  def perform(message)
17
- job = Job.new message
18
- number = Thread.current[:consumer_id] || 0
19
- path_prefix = "/tmp/.test/job.#{number}"
20
- Worker.perform(job, path_prefix)
21
- ack!
17
+ Worker.logger.tagged self.class.consumer_id do
18
+ job = Job.new message
19
+ number = Thread.current[:consumer_id] || 0
20
+ path_prefix = "/tmp/.test/job.#{number}"
21
+ Worker.perform(job, path_prefix)
22
+ ack!
23
+ end
22
24
  end
23
25
 
24
26
  end
@@ -1,54 +1,3 @@
1
- require 'evrone/common/amqp'
1
+ require 'evrone/ci/common/amqp'
2
2
 
3
- module Evrone::CI::Worker::AMQP
4
-
5
- Base = Struct.new("Subscribing", :app) do
6
- include Evrone::CI::Worker::Helper::Logger
7
-
8
- def consumer_name
9
- Thread.current[:consumer_name]
10
- end
11
-
12
- def consumer_id
13
- Thread.current[:consumer_id]
14
- end
15
-
16
- def consumer_tag
17
- consumer_id ? "#{consumer_name.split('::').last} #{consumer_id}" : consumer_name
18
- end
19
- end
20
-
21
- class Subscribing < Base
22
- def call(env)
23
- logger.tagged(consumer_tag) do
24
- logger.warn "subsribing #{env[:exchange].name}"
25
- rs = app.call env
26
- logger.warn "shutdown"
27
- rs
28
- end
29
- end
30
- end
31
-
32
- class Recieving < Base
33
- def call(env)
34
- logger.warn "payload recieved #{env[:payload].inspect[0...60]}..."
35
- rs = app.call env
36
- logger.warn "commit message"
37
- rs
38
- end
39
- end
40
- end
41
-
42
- Evrone::Common::AMQP.configure do |c|
43
- c.subscribing do
44
- use Evrone::CI::Worker::AMQP::Subscribing
45
- end
46
-
47
- c.recieving do
48
- use Evrone::CI::Worker::AMQP::Recieving
49
- end
50
-
51
- c.content_type = 'application/x-protobuf'
52
- c.logger = nil
53
- c.url = Evrone::CI::Worker.config.amqp_url
54
- end
3
+ Evrone::CI::Common::AMQP.setup(Evrone::CI::Worker.logger, url: Evrone::CI::Worker.config.amqp_url)
@@ -39,7 +39,7 @@ module Evrone
39
39
  open_ssh(host, "ci", ssh_options) do |ssh|
40
40
  begin
41
41
  env.ssh = ssh
42
- logger.tagged "SSH" do
42
+ logger.tagged "ssh" do
43
43
  yield
44
44
  end
45
45
  end
@@ -57,7 +57,7 @@ module Evrone
57
57
  env.container_gateway ||= env.container.json['NetworkSettings']['Gateway']
58
58
  env.docker_repo_dir = Pathname.new(config.docker.remote_dir).join(env.job.message.name)
59
59
 
60
- logger.tagged "DOCKER #{env.container.id}" do
60
+ logger.tagged "docker #{env.container.id}" do
61
61
  begin
62
62
  logger.info "start container"
63
63
  sleep 3
@@ -7,9 +7,7 @@ module Evrone
7
7
  include Helper::Logger
8
8
 
9
9
  def call(env)
10
- matrix_key = env.job.message.matrix_keys.join(" ")
11
-
12
- logger.tagged("JOB #{env.job.message.id}.#{env.job.message.job_id} #{matrix_key}") do
10
+ logger.tagged("job #{env.job.message.id}.#{env.job.message.job_id}") do
13
11
  logger.info "starting job"
14
12
  rs = app.call env
15
13
  logger.info "done job"
@@ -1,4 +1,5 @@
1
1
  require 'evrone/ci/message'
2
+ require 'evrone/ci/common/error_notifier'
2
3
 
3
4
  module Evrone
4
5
  module CI
@@ -22,6 +23,7 @@ module Evrone
22
23
  rescue Exception => e
23
24
  env.job.add_to_output("\n\nERROR: #{e.inspect}\n")
24
25
  logger.error("ERROR: #{e.inspect}\n BACKTRACE:\n#{e.backtrace.map{|i| " #{i}" }.join("\n")}")
26
+ Common::ErrorNotifier.notify(e)
25
27
  end
26
28
 
27
29
  msg = "\nDone. Your build exited with %s.\n"
@@ -1,7 +1,7 @@
1
1
  module Evrone
2
2
  module CI
3
3
  module Worker
4
- VERSION = "0.2.0.pre6"
4
+ VERSION = "0.2.0.pre7"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evrone-ci-worker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.pre6
4
+ version: 0.2.0.pre7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Galinsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-08 00:00:00.000000000 Z
11
+ date: 2013-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evrone-ci-common
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.0.pre6
19
+ version: 0.2.0.pre7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.0.pre6
26
+ version: 0.2.0.pre7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: evrone-ci-message
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.0.pre6
33
+ version: 0.2.0.pre7
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.0.pre6
40
+ version: 0.2.0.pre7
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: evrone-common-amqp
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 0.1.1
47
+ version: 0.2.4
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.1.1
54
+ version: 0.2.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: docker-api
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -212,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
212
  version: 1.3.1
213
213
  requirements: []
214
214
  rubyforge_project:
215
- rubygems_version: 2.0.2
215
+ rubygems_version: 2.1.9
216
216
  signing_key:
217
217
  specification_version: 4
218
218
  summary: ci worker