aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: f80bd350a56a049e045cb862d9a538344d3c77a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# Simple CI

The simplest pseudo-Continuous Integration tool I could conceive

This does not have a web UI
This does not have error reporting
This does not require docker

This is just a script which is intended to be run by cron, or some
other mechanism, and it will just check a git repository, update if
there's a change, and then run a command within this directory.

This can be a deployment command (making this a CD, not CI) or it can
be kicking off a test suite, or it can be whatever you want.

## The reason
I have a small VPS, I wanted it to deploy a static site when I pushed
a change to a live branch. I could have used a post-receive hook on
the server, but the repository is currently within a docker container,
something I intend to change at some point. I am sure I could change
it, but I just wanted a solution. I couldn't find anything that just
did the bare minimum I wanted without bells and whistles, so I wrote
one.

## Configuration
Within simpleci.sh there are two variables:
* `JOB_DIR` - sets the location for jobs
* `WORKSPACE_DIR` - sets the location that simpleci will use for local
  copies
  
These default to being 'jobs' and 'workspaces' within the simpleci
directory, but can be changed.

## Jobs
Jobs are names of projects which can be run. These are stored within
`JOB_DIR`. These are a simple file with up to three pieces of
information:
* `REPO` - the repository to monitor
* `BRANCH` - the branch to monitor [live]
* `COMMAND` - the command to run within the directory [make publish]

## Running
It is possible to run simpleci manually
`/path/to/simpleci.sh` - this will check for any updates in any of the
jobs, and run them where required
`/path/to/simpleci.sh JOB1 [JOB1 [JOB3 ..]].` - this will force-run
specific jobs, regardless if there is an update or not.

The job names are the filenames within `JOB_DIR`.
eg
`/path/to/simpleci.sh example`

It is also possible to add to cron to run it periodically. 
eg
`*/30 * * * * /path/to/simpleci.sh >> /path/to/simpleci.log 2>&1`