Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rabbit CI

Avatar for Theron Boerner Theron Boerner
April 25, 2015
110

Rabbit CI

Avatar for Theron Boerner

Theron Boerner

April 25, 2015
Tweet

Transcript

  1. Rabbit CI by Theron Boerner You know this presentation will

    be good because the text is right-aligned.
  2. the practice, in software engineering, of merging all developer working

    copies with a shared mainline several times a day. Wikipedia says: “ ”
  3. Overly Simplified Explanation of Continuous Integration Magic Code Box Developer

    Developer CI Server Jeff because Wikipedia is too technical.
  4. CI Server 2 + 2 = 4 1 ÷ 0

    = NaN working…
  5. 2 + 2 = 4 1 ÷ 0 = NaN

    CI Server working…
  6. 2 + 2 = 4 1 ÷ 0 = NaN

    CI Server working…
  7. 2 + 2 = 4 1 ÷ 0 = NaN

    1 ÷ 0 should = NaN. Got 42 instead. CI Server working…
  8. 2 + 2 = 4 1 ÷ 0 = NaN

    CI Server Build Failed
  9. CI Server 2 + 2 = 4 1 ÷ 0

    = NaN working…
  10. 2 + 2 = 4 1 ÷ 0 = NaN

    CI Server working…
  11. 2 + 2 = 4 1 ÷ 0 = NaN

    CI Server working…
  12. 2 + 2 = 4 1 ÷ 0 = NaN

    CI Server working…
  13. 2 + 2 = 4 1 ÷ 0 = NaN

    CI Server Build Passed
  14. Jenkins Slow Terrible UI Configuration almost 100% through GUIs Very

    buggy “Job” vs “Project” model Too complex It contains the soul of Satan.
  15. A CI System with no* compromises. Rabbit CI is made

    of multiple components that follow the UNIX philosophy of “Make each program do one thing well.”
  16. Goals Fast Jenkins takes ~500ms to render a page. Rabbit

    CI’s goal is to be at least <200ms.
  17. Goals Better Config Builds should be configured through a file

    in the project’s directory. GUI based configs are not versioned, are slower to modify, and are not blessed by St. IGNUcius.
  18. Goals SOA Service Oriented Architecture. It’s the phrase that Marketing

    uses instead of UNIX philosophy (“Make each program do one thing well.”) so that they do not associate with UNIX and in turn St. IGNUcius (Saint of the Free Software Foundation).
  19. Goals More The other goals are incredibly technical and quite

    boring. Instead let’s move on to slides with charts and lines and other cool things.
  20. Backend Postgresql(Database) Redis (Queue) Magic Code Box “I need you

    to run the tests and create files for Windows, Mac, and Linux” Frontend Worker
  21. Redis (Queue) Worker “Do I need to work?” Worker Worker

    Worker Worker Worker “Do I need to work?” “Do I need to work?” “Do I need to work?” “Do I need to work?” “Do I need to work?”
  22. Backend Written in Elixir which runs on the Erlang VM.

    This allows very good scaling and powerful distributed computing.
  23. Workers The Linux worker is written in Go and has

    a small footprint. Workers can be written in any language.
  24. Config Extractor Written in Rust and run by a Linux

    worker. Attempts to download using the fastest (but least reliable) methods first and then fall back to universal methods.
  25. [info] POST /queue [info] Processing by Rabbitci.QueueController.create/2 Parameters: %{"branch" =>

    "master", "commit" => "eccee02ec18a36bcb2615b8c86d401b0618738c2", "format" => "json", "repo" => "[email protected]:rabbit-ci/example-project.git"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."repo" = $1) ["[email protected]:rabbit-ci/example-project.git"] (0.9ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (1.0ms) [debug] SELECT b0."build_number" FROM "builds" AS b0 WHERE (b0."branch_id" = $1) ORDER BY b0."build_number" DESC LIMIT 1 [2] (2.4ms) [debug] SELECT b0."build_number" FROM "builds" AS b0 WHERE (b0."branch_id" = $1) AND (b0."build_number" = $2) LIMIT 1 [2, 64] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "builds" ("branch_id", "build_number", "commit", "finish_time", "inserted_at", "start_time", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [2, 64, "eccee02ec18a36bcb 2615b8c86d401b0618738c2", nil, {{2015, 4, 22}, {17, 46, 55, 0}}, nil, {{2015, 4, 22}, {17, 46, 55, 0}}] (0.6ms) [debug] COMMIT [] (12.6ms) Trigger a build
  26. [info] POST /queue [info] Processing by Rabbitci.QueueController.create/2 Parameters: %{"branch" =>

    "master", "commit" => "eccee02ec18a36bcb2615b8c86d401b0618738c2", "format" => "json", "repo" => "[email protected]:rabbit-ci/example-project.git"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."repo" = $1) ["[email protected]:rabbit-ci/example-project.git"] (0.9ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (1.0ms) [debug] SELECT b0."build_number" FROM "builds" AS b0 WHERE (b0."branch_id" = $1) ORDER BY b0."build_number" DESC LIMIT 1 [2] (2.4ms) [debug] SELECT b0."build_number" FROM "builds" AS b0 WHERE (b0."branch_id" = $1) AND (b0."build_number" = $2) LIMIT 1 [2, 64] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "builds" ("branch_id", "build_number", "commit", "finish_time", "inserted_at", "start_time", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [2, 64, "eccee02ec18a36bcb 2615b8c86d401b0618738c2", nil, {{2015, 4, 22}, {17, 46, 55, 0}}, nil, {{2015, 4, 22}, {17, 46, 55, 0}}] (0.6ms) [debug] COMMIT [] (12.6ms) Trigger a build Find latest build’s build number
  27. [info] POST /queue [info] Processing by Rabbitci.QueueController.create/2 Parameters: %{"branch" =>

    "master", "commit" => "eccee02ec18a36bcb2615b8c86d401b0618738c2", "format" => "json", "repo" => "[email protected]:rabbit-ci/example-project.git"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."repo" = $1) ["[email protected]:rabbit-ci/example-project.git"] (0.9ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (1.0ms) [debug] SELECT b0."build_number" FROM "builds" AS b0 WHERE (b0."branch_id" = $1) ORDER BY b0."build_number" DESC LIMIT 1 [2] (2.4ms) [debug] SELECT b0."build_number" FROM "builds" AS b0 WHERE (b0."branch_id" = $1) AND (b0."build_number" = $2) LIMIT 1 [2, 64] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "builds" ("branch_id", "build_number", "commit", "finish_time", "inserted_at", "start_time", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [2, 64, "eccee02ec18a36bcb 2615b8c86d401b0618738c2", nil, {{2015, 4, 22}, {17, 46, 55, 0}}, nil, {{2015, 4, 22}, {17, 46, 55, 0}}] (0.6ms) [debug] COMMIT [] (12.6ms) Trigger a build Create new build record
  28. [info] POST /queue [info] Processing by Rabbitci.QueueController.create/2 Parameters: %{"branch" =>

    "master", "commit" => "eccee02ec18a36bcb2615b8c86d401b0618738c2", "format" => "json", "repo" => "[email protected]:rabbit-ci/example-project.git"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."repo" = $1) ["[email protected]:rabbit-ci/example-project.git"] (0.9ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (1.0ms) [debug] SELECT b0."build_number" FROM "builds" AS b0 WHERE (b0."branch_id" = $1) ORDER BY b0."build_number" DESC LIMIT 1 [2] (2.4ms) [debug] SELECT b0."build_number" FROM "builds" AS b0 WHERE (b0."branch_id" = $1) AND (b0."build_number" = $2) LIMIT 1 [2, 64] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "builds" ("branch_id", "build_number", "commit", "finish_time", "inserted_at", "start_time", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [2, 64, "eccee02ec18a36bcb 2615b8c86d401b0618738c2", nil, {{2015, 4, 22}, {17, 46, 55, 0}}, nil, {{2015, 4, 22}, {17, 46, 55, 0}}] (0.6ms) [debug] COMMIT [] (12.6ms) Trigger a build Queue Config File Extraction
  29. [info] POST /config_extraction [info] Processing by Rabbitci.ConfigExtractionController.create/2 Parameters: %{"branch" =>

    "master", "build_number" => "64", "commit" => "eccee02ec18a36bcb2615b8c86d401b0618738c2", "format" => "json", "repo" => "[email protected]:rabbit-ci/ example-project.git"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."repo" = $1) ["[email protected]:rabbit-ci/example-project.git"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "config_files" ("build_id", "inserted_at", "raw_body", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "{\"scripts\":[{\"name\":\"main\",\"d escription\":\"Main script\",\"commands\":[\"echo 'cool, it works!'\",\"touch somefile.txt\",\"ls\", \"echo $VAR_1\",\"echo $ANOTHER_VAR\"]},{\"name\":\"saybacon\",\"description\":\"This script says bacon\ ",\"commands\":[\"echo bacon\"]},{\"name\":\"script_vars\",\"description\":\"demonstrates vars scoped to a script\",\"commands\":[\"echo $ANOTHER_VAR\",\"echo $SOMETHING_ELSE\"],\"ENV\":{\"SOMETHING_ELSE\ ":\"Hello\",\"ANOTHER_VAR\":\"This overrides the global var\"}}],\"ENV\":{\"VAR_1\":\"This is VAR_1.\", \"ANOTHER_VAR\":\"This is another variable\"}}", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.6ms) [debug] COMMIT [] (6.2ms) Upload Config
  30. [info] POST /config_extraction [info] Processing by Rabbitci.ConfigExtractionController.create/2 Parameters: %{"branch" =>

    "master", "build_number" => "64", "commit" => "eccee02ec18a36bcb2615b8c86d401b0618738c2", "format" => "json", "repo" => "[email protected]:rabbit-ci/ example-project.git"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."repo" = $1) ["[email protected]:rabbit-ci/example-project.git"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "config_files" ("build_id", "inserted_at", "raw_body", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "{\"scripts\":[{\"name\":\"main\",\"d escription\":\"Main script\",\"commands\":[\"echo 'cool, it works!'\",\"touch somefile.txt\",\"ls\", \"echo $VAR_1\",\"echo $ANOTHER_VAR\"]},{\"name\":\"saybacon\",\"description\":\"This script says bacon\ ",\"commands\":[\"echo bacon\"]},{\"name\":\"script_vars\",\"description\":\"demonstrates vars scoped to a script\",\"commands\":[\"echo $ANOTHER_VAR\",\"echo $SOMETHING_ELSE\"],\"ENV\":{\"SOMETHING_ELSE\ ":\"Hello\",\"ANOTHER_VAR\":\"This overrides the global var\"}}],\"ENV\":{\"VAR_1\":\"This is VAR_1.\", \"ANOTHER_VAR\":\"This is another variable\"}}", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.6ms) [debug] COMMIT [] (6.2ms) Upload Config Find build
  31. [info] POST /config_extraction [info] Processing by Rabbitci.ConfigExtractionController.create/2 Parameters: %{"branch" =>

    "master", "build_number" => "64", "commit" => "eccee02ec18a36bcb2615b8c86d401b0618738c2", "format" => "json", "repo" => "[email protected]:rabbit-ci/ example-project.git"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."repo" = $1) ["[email protected]:rabbit-ci/example-project.git"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "config_files" ("build_id", "inserted_at", "raw_body", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "{\"scripts\":[{\"name\":\"main\",\"d escription\":\"Main script\",\"commands\":[\"echo 'cool, it works!'\",\"touch somefile.txt\",\"ls\", \"echo $VAR_1\",\"echo $ANOTHER_VAR\"]},{\"name\":\"saybacon\",\"description\":\"This script says bacon\ ",\"commands\":[\"echo bacon\"]},{\"name\":\"script_vars\",\"description\":\"demonstrates vars scoped to a script\",\"commands\":[\"echo $ANOTHER_VAR\",\"echo $SOMETHING_ELSE\"],\"ENV\":{\"SOMETHING_ELSE\ ":\"Hello\",\"ANOTHER_VAR\":\"This overrides the global var\"}}],\"ENV\":{\"VAR_1\":\"This is VAR_1.\", \"ANOTHER_VAR\":\"This is another variable\"}}", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.6ms) [debug] COMMIT [] (6.2ms) Upload Config Create new config_file record
  32. b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" =

    $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "config_files" ("build_id", "inserted_at", "raw_body", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "{\"scripts\":[{\"name\":\"main\",\"d escription\":\"Main script\",\"commands\":[\"echo 'cool, it works!'\",\"touch somefile.txt\",\"ls\", \"echo $VAR_1\",\"echo $ANOTHER_VAR\"]},{\"name\":\"saybacon\",\"description\":\"This script says bacon\ ",\"commands\":[\"echo bacon\"]},{\"name\":\"script_vars\",\"description\":\"demonstrates vars scoped to a script\",\"commands\":[\"echo $ANOTHER_VAR\",\"echo $SOMETHING_ELSE\"],\"ENV\":{\"SOMETHING_ELSE\ ":\"Hello\",\"ANOTHER_VAR\":\"This overrides the global var\"}}],\"ENV\":{\"VAR_1\":\"This is VAR_1.\", \"ANOTHER_VAR\":\"This is another variable\"}}", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.6ms) [debug] COMMIT [] (6.2ms) Upload Config Queue builds for each “script” which is a step such as test, or build.
  33. [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] Processing by Rabbitci.BuildController.config/2

    Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT c0."id", c0."raw_body", c0."build_id", c0."inserted_at", c0."updated_at" FROM "config_files" AS c0 WHERE (c0."build_id" IN ($1)) 'O' (0.7ms) Worker fetches config
  34. [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] Processing by Rabbitci.BuildController.config/2

    Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT c0."id", c0."raw_body", c0."build_id", c0."inserted_at", c0."updated_at" FROM "config_files" AS c0 WHERE (c0."build_id" IN ($1)) 'O' (0.7ms) Worker fetches config Find build
  35. [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] Processing by Rabbitci.BuildController.config/2

    Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT c0."id", c0."raw_body", c0."build_id", c0."inserted_at", c0."updated_at" FROM "config_files" AS c0 WHERE (c0."build_id" IN ($1)) 'O' (0.7ms) Worker fetches config Get config file
  36. [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] Processing by Rabbitci.BuildController.config/2

    Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT c0."id", c0."raw_body", c0."build_id", c0."inserted_at", c0."updated_at" FROM "config_files" AS c0 WHERE (c0."build_id" IN ($1)) 'O' (0.7ms) Worker fetches config Return a version of the config file that contains changes such as merging local and global environment variables and adding in Rabbit CI specific variables.
  37. [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.config/2 Parameters: %{"branch_name" =>

    "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.6ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.6ms) [debug] SELECT c0."id", c0."raw_body", c0."build_id", c0."inserted_at", c0."updated_at" FROM "config_files" AS c0 WHERE (c0."build_id" IN ($1)) 'O' (0.6ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.6ms) [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "saybacon"} Pipelines: [:api] [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (6.6ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "scripts" ("build_id", "inserted_at", "name", "status", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "main", "running", {{2015, 4, 22 }, {17, 46, 57, 0}}] (0.5ms) [debug] COMMIT [] (6.0ms) [debug] BEGIN [] (0.5ms) [debug] INSERT INTO "logs" ("inserted_at", "script_id", "stdio", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === R unning command: echo cool, it works!\n", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.7ms) [debug] COMMIT [] (7.4ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (26.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.8ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.8ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.9ms) [debug] BEGIN [] (0.3ms) [debug] INSERT INTO "scripts" ("build_id", "inserted_at", "name", "status", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "saybacon", "running", {{2015, 4 , 22}, {17, 46, 57, 0}}] (0.7ms) [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] COMMIT [] (0.8ms) [debug] BEGIN [] (0.2ms) [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.7ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.7ms) [debug] INSERT INTO "logs" ("inserted_at", "script_id", "stdio", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 7, "--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === R unning command: echo bacon\n", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.9ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.6ms) [debug] COMMIT [] (0.5ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.5ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (1.0ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.5ms) [debug] COMMIT [] (0.4ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "saybacon"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.5ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) '\a' (0.4ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 7, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo bacon\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m bacon\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 52] (0.3ms) [debug] COMMIT [] (0.3ms) [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.4ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.3ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n", {{2015, 4, 2 2}, {17, 46, 57, 0}}, 51] (0.5ms) [debug] COMMIT [] (0.4ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.config/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.6ms) [debug] SELECT c0."id", c0."raw_body", c0."build_id", c0."inserted_at", c0."updated_at" FROM "config_files" AS c0 WHERE (c0."build_id" IN ($1)) 'O' (0.6ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.5ms) [debug] BEGIN [] (0.3ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.3ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "script_vars"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.4ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "scripts" ("build_id", "inserted_at", "name", "status", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "script_vars", "running", {{2015 , 4, 22}, {17, 46, 57, 0}}] (0.4ms) [debug] COMMIT [] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "logs" ("inserted_at", "script_id", "stdio", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 8, "--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === R unning command: echo $ANOTHER_VAR\n", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.3ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.5ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.5ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.6ms) [debug] BEGIN [] (0.3ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.4ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "script_vars"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.4ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.3ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) '\b' (0.5ms) [debug] BEGIN [] (0.3ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 8, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo $ANOTHER_VAR\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m This overrides the global var\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 53] (0.5ms) [debug] COMMIT [] (0.4ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.3ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.5ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $VAR_1\n", {{2015, 4, 22}, { 17, 46, 57, 0}}, 51] (0.6ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "script_vars"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.5ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.5ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) '\b' (0.5ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 8, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo $ANOTHER_VAR\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m This overrides the global var\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $SOMETHING_ELSE\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 53] (0.3ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.8ms) [debug] BEGIN [] (0.4ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $VAR_1\n--> 2015/04/22 12:46 :57 \e[32mstdout\e[0m This is VAR_1.\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.6ms) [debug] COMMIT [] (0.6ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "script_vars"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.7ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) '\b' (0.4ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 8, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo $ANOTHER_VAR\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m This overrides the global var\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $SOMETHING_ELSE\n-- > 2015/04/22 12:46:57 \e[32mstdout\e[0m Hello\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 53] (0.5ms) [debug] COMMIT [] (0.6ms) [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.4ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.3ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.3ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $VAR_1\n--> 2015/04/22 12:46 :57 \e[32mstdout\e[0m This is VAR_1.\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $ANOTHER_VAR\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.4ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.4ms) [debug] BEGIN [] (0.4ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $VAR_1\n--> 2015/04/22 12:46 :57 \e[32mstdout\e[0m This is VAR_1.\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $ANOTHER_VAR\n--> 2015/04/22 12:46:58 \e[32mstdout\e[0m This is another variable\n", {{2015, 4, 22 }, {17, 46, 57, 0}}, 51] (0.7ms) [debug] COMMIT [] (0.8ms) Real-time* log uploading
  38. [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.config/2 Parameters: %{"branch_name" =>

    "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.6ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.6ms) [debug] SELECT c0."id", c0."raw_body", c0."build_id", c0."inserted_at", c0."updated_at" FROM "config_files" AS c0 WHERE (c0."build_id" IN ($1)) 'O' (0.6ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.6ms) [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "saybacon"} Pipelines: [:api] [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (6.6ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "scripts" ("build_id", "inserted_at", "name", "status", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "main", "running", {{2015, 4, 22 }, {17, 46, 57, 0}}] (0.5ms) [debug] COMMIT [] (6.0ms) [debug] BEGIN [] (0.5ms) [debug] INSERT INTO "logs" ("inserted_at", "script_id", "stdio", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === R unning command: echo cool, it works!\n", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.7ms) [debug] COMMIT [] (7.4ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (26.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.8ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.8ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.9ms) [debug] BEGIN [] (0.3ms) [debug] INSERT INTO "scripts" ("build_id", "inserted_at", "name", "status", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "saybacon", "running", {{2015, 4 , 22}, {17, 46, 57, 0}}] (0.7ms) [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] COMMIT [] (0.8ms) [debug] BEGIN [] (0.2ms) [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.7ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.7ms) [debug] INSERT INTO "logs" ("inserted_at", "script_id", "stdio", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 7, "--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === R unning command: echo bacon\n", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.9ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.6ms) [debug] COMMIT [] (0.5ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.5ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (1.0ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.5ms) [debug] COMMIT [] (0.4ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "saybacon"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.5ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) '\a' (0.4ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 7, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo bacon\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m bacon\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 52] (0.3ms) [debug] COMMIT [] (0.3ms) [info] GET /projects/ExampleProject/branches/master/builds/64/config [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.4ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.3ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n", {{2015, 4, 2 2}, {17, 46, 57, 0}}, 51] (0.5ms) [debug] COMMIT [] (0.4ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.config/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.6ms) [debug] SELECT c0."id", c0."raw_body", c0."build_id", c0."inserted_at", c0."updated_at" FROM "config_files" AS c0 WHERE (c0."build_id" IN ($1)) 'O' (0.6ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.5ms) [debug] BEGIN [] (0.3ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.3ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "script_vars"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.4ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "scripts" ("build_id", "inserted_at", "name", "status", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [79, {{2015, 4, 22}, {17, 46, 57, 0}}, "script_vars", "running", {{2015 , 4, 22}, {17, 46, 57, 0}}] (0.4ms) [debug] COMMIT [] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] INSERT INTO "logs" ("inserted_at", "script_id", "stdio", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 8, "--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === R unning command: echo $ANOTHER_VAR\n", {{2015, 4, 22}, {17, 46, 57, 0}}] (0.3ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.5ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.5ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.6ms) [debug] BEGIN [] (0.3ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.4ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "script_vars"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.4ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.3ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) '\b' (0.5ms) [debug] BEGIN [] (0.3ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 8, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo $ANOTHER_VAR\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m This overrides the global var\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 53] (0.5ms) [debug] COMMIT [] (0.4ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.3ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.5ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $VAR_1\n", {{2015, 4, 22}, { 17, 46, 57, 0}}, 51] (0.6ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "script_vars"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.5ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.5ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) '\b' (0.5ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 8, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo $ANOTHER_VAR\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m This overrides the global var\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $SOMETHING_ELSE\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 53] (0.3ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.6ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.8ms) [debug] BEGIN [] (0.4ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $VAR_1\n--> 2015/04/22 12:46 :57 \e[32mstdout\e[0m This is VAR_1.\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.6ms) [debug] COMMIT [] (0.6ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "script_vars"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.7ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.5ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) '\b' (0.4ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 8, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo $ANOTHER_VAR\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m This overrides the global var\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $SOMETHING_ELSE\n-- > 2015/04/22 12:46:57 \e[32mstdout\e[0m Hello\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 53] (0.5ms) [debug] COMMIT [] (0.6ms) [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.4ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.3ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.3ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.4ms) [debug] BEGIN [] (0.2ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $VAR_1\n--> 2015/04/22 12:46 :57 \e[32mstdout\e[0m This is VAR_1.\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $ANOTHER_VAR\n", {{2015, 4, 22}, {17, 46, 57, 0}}, 51] (0.4ms) [debug] COMMIT [] (0.3ms) [info] PUT /projects/ExampleProject/branches/master/builds/64/log [info] Processing by Rabbitci.BuildController.log_put/2 Parameters: %{"branch_name" => "master", "build_number" => "64", "format" => "json", "project_name" => "ExampleProject", "script" => "main"} Pipelines: [:api] [debug] SELECT p0."id", p0."name", p0."repo", p0."inserted_at", p0."updated_at" FROM "projects" AS p0 WHERE (p0."name" = $1) ["ExampleProject"] (0.5ms) [debug] SELECT b0."id", b0."name", b0."exists_in_git", b0."project_id", b0."inserted_at", b0."updated_at" FROM "branches" AS b0 WHERE ((b0."name" = $1) AND (b0."project_id" = $2)) ["master", 2] (0.4ms) [debug] SELECT b0."id", b0."build_number", b0."start_time", b0."finish_time", b0."commit", b0."branch_id", b0."inserted_at", b0."updated_at" FROM "builds" AS b0 WHERE ((b0."branch_id" = $1) AND (b0."build _number" = $2)) [2, 64] (0.4ms) [debug] SELECT s0."id", s0."status", s0."name", s0."build_id", s0."inserted_at", s0."updated_at" FROM "scripts" AS s0 WHERE (s0."build_id" IN ($1)) ORDER BY s0."build_id" 'O' (0.4ms) [debug] SELECT l0."id", l0."stdio", l0."script_id", l0."inserted_at", l0."updated_at" FROM "logs" AS l0 WHERE (l0."script_id" IN ($1)) [6] (0.4ms) [debug] BEGIN [] (0.4ms) [debug] UPDATE "logs" SET "inserted_at" = $1, "script_id" = $2, "stdio" = $3, "updated_at" = $4 WHERE "id" = $5 RETURNING "id" [{{2015, 4, 22}, {17, 46, 57, 0}}, 6, "--> 2015/04/22 12:46:57 \e[32mstdout\e [0m === Running command: echo cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m cool, it works!\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: touch somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: ls\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m somefile.txt\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $VAR_1\n--> 2015/04/22 12:46 :57 \e[32mstdout\e[0m This is VAR_1.\n--> 2015/04/22 12:46:57 \e[32mstdout\e[0m === Running command: echo $ANOTHER_VAR\n--> 2015/04/22 12:46:58 \e[32mstdout\e[0m This is another variable\n", {{2015, 4, 22 }, {17, 46, 57, 0}}, 51] (0.7ms) [debug] COMMIT [] (0.8ms) Real-time* log uploading Logs are uploaded
  39. ›❯ curl "http://localhost:4000/projects/ExampleProject/branches/master/builds/64/log" --> Begin script_vars log --> 2015/04/22 12:46:57

    stdout === Running command: echo $ANOTHER_VAR --> 2015/04/22 12:46:57 stdout This overrides the global var --> 2015/04/22 12:46:57 stdout === Running command: echo $SOMETHING_ELSE --> 2015/04/22 12:46:57 stdout Hello --> End script_vars log --> Begin saybacon log --> 2015/04/22 12:46:57 stdout === Running command: echo bacon --> 2015/04/22 12:46:57 stdout bacon --> End saybacon log --> Begin main log --> 2015/04/22 12:46:57 stdout === Running command: echo cool, it works! --> 2015/04/22 12:46:57 stdout cool, it works! --> 2015/04/22 12:46:57 stdout === Running command: touch somefile.txt --> 2015/04/22 12:46:57 stdout === Running command: ls --> 2015/04/22 12:46:57 stdout somefile.txt --> 2015/04/22 12:46:57 stdout === Running command: echo $VAR_1 --> 2015/04/22 12:46:57 stdout This is VAR_1. --> 2015/04/22 12:46:57 stdout === Running command: echo $ANOTHER_VAR --> 2015/04/22 12:46:58 stdout This is another variable --> End main log
  40. ›❯ curl "http://localhost:4000/projects/ExampleProject/branches/master/builds/64/log"| gsed - r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" --> Begin script_vars

    log --> 2015/04/22 12:46:57 stdout === Running command: echo $ANOTHER_VAR --> 2015/04/22 12:46:57 stdout This overrides the global var --> 2015/04/22 12:46:57 stdout === Running command: echo $SOMETHING_ELSE --> 2015/04/22 12:46:57 stdout Hello --> End script_vars log --> Begin saybacon log --> 2015/04/22 12:46:57 stdout === Running command: echo bacon --> 2015/04/22 12:46:57 stdout bacon --> End saybacon log --> Begin main log --> 2015/04/22 12:46:57 stdout === Running command: echo cool, it works! --> 2015/04/22 12:46:57 stdout cool, it works! --> 2015/04/22 12:46:57 stdout === Running command: touch somefile.txt --> 2015/04/22 12:46:57 stdout === Running command: ls --> 2015/04/22 12:46:57 stdout somefile.txt --> 2015/04/22 12:46:57 stdout === Running command: echo $VAR_1 --> 2015/04/22 12:46:57 stdout This is VAR_1. --> 2015/04/22 12:46:57 stdout === Running command: echo $ANOTHER_VAR --> 2015/04/22 12:46:58 stdout This is another variable --> End main log
  41. ›❯ wkhtmltopdf example.html example.pdf openLoading pages (1/6) Counting pages (2/6)

    Resolving links (4/6) Loading headers and footers (5/6) Printing pages (6/6) Done
  42. wget -O /dev/null 0.02s user 0.00s system 3% cpu 0.581

    total ~580ms to download the config
  43. Credits Color palette: whatamidoingwrong? by JJean_Jeznn @deadprogram Advisor @holman Typeface

    and good presentation desig Christopher Nolan Because he’s the director this slide deserves, but not the one it needs right now. So we’ll reference him. Because he can take it. Because he’s not a Director. He’s a silent artist, a watchful advisor, a Dark Knight. <- What? BWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA MMMMMMMMMMM BWAAAAAAAAAAAAAAAAAMMMMM. QUANTUM DATA PORTAL ENERGY. BWWWWWWWWWWAMMMMMMMMMMMM. Icons made by Freepik from www.flaticon.com is licensed by CC BY 3.0