Skip to content
This repository has been archived by the owner on Mar 19, 2024. It is now read-only.

Writing Jobs

Andrew De Ponte edited this page Jan 25, 2014 · 5 revisions

Preflight check

If you have not already created your octopusci skeleton by running octopusci-skel, you should do so now in order for your /etc/octopusci folder to be created with some boilerplate.

The /etc/octopusci folder

Your /etc/octopusci folder has a config.yml file and a jobs folder. The config file has a projects section (the other sections are out of the scope of this document). Each project object defined in this section has a few attributes such as name, owner, in addition to an oddly named attribute called job_klass.

What is job_klass?

The job_klass attribute specified for each project in your /etc/octopusci/config.yml file is how octopusci-tentacles knows what Ruby code to execute when a job appears in Octopusci's queue. For our purposes lets say we have this entry in our /etc/octopusci/config.yml:

...
projects:
  - { name: myproj, owner: keyvan, job_klass: MyprojRSpecBuildLocal, repo_uri: 'git@github.com:me/myproj', default_email: me@email.com }
...

Now when myproj lands in the queue, octopusci-tentacles will expect the Ruby files in /etc/octopusci/jobs/ to have declared a class called MyprojRSpecBuildLocal. Important this class is supposed to subclass Octopusci::Job.

The class should be defined in some file within /etc/octopusci/jobs

So we'll create the file now to contain our new class to match the job_klass attribute. Create it at /etc/octopusci/jobs/myproj_rspec_build_local.rb

class MyprojRSpecBuildLocal < Octopusci::Job
  def self.run(job_rec)
    context "RSpec Tests (commit)" do
      run_shell_cmd!("STAGE=#{job_rec['stage']} pwd && source .rvmrc && bundle install && env && bundle exec motion-specwrap 2>&1", true)
    end
  end
end

Of course that last example is contrived and only shows a couple things in the DSL.

The Octopusci::Job DSL

  • context - similar to RSpec's context. It can be used to separate out a certain set of tasks from others (e.g. RSpec testS vs Cucumber tests)

  • run_shell_cmd! - Use this to execute shell commands. You may optionally pass a 2nd argument of true or false. A true value will ensure a cd into the temporary project job directory before the command is executed.

To discover more of the DSL, explore Octopusci::Job