Otsukai: Simple, and Easy to use deployment application for your servers.
$ git clone https://github.com/mika-f/otsukai
$ cd otsukai
$ go install
Download the binary from the releases page and place it in your $PATH
.
At the first time, you need to create a configuration file.
NOTE The deployment recipe has subset of Ruby, but not run as Ruby.
# default target host, with user
set target: { host: "yuuka.natsuneko.net", user: "ubuntu" }
task :deploy do
if changed(path: "/path/to/docker-compose.yml", from: :last_commit)
# run with sudo
run_with :sudo do
# run docker compose down on remote
run remote: "docker compose down -f /remote/path/to/docker-compose.yml"
# copy file/directory from local (/path/to/docker-compose.yml) to remote (/home/ubuntu/docker-compose.yml)
copy to: :remote, local: "/path/to/docker-compose.yml", remote: "/home/ubuntu/docker-compose.yml"
# run docker compose on remote
run remote: "docker compose up -d -f /remote/path/to/docker-compose.yml"
end
end
end
Then, you can deploy your application by running the following command.
# check syntax before deploy
$ otsukai test --recipe examples/docker-compose/otsukai.rb
# deploy
$ otsukai run --recipe examples/docker-compose/otsukai.rb
# deploy (dry-run)
$ otsukai run --recipe examples/docker-compose/otsukai.rb --dry-run
Set a variable value. Example:
set remote: { host: "yuuka.natsuneko.net", user: "ubuntu" }
set default: :deploy
set app_root: "/usr/local/"
The following variables are specialized:
remote: { host: string, user: string }
timeout: number
(default:10
)
Define a task with name. Example:
# define `deploy` task
task :deploy do
# ...
end
# define `rollback` task
task :rollback do
# ...
end
Check the specified path has changed from specified refs.
changed(path: "/path/to/file", commit_from: :last_commit, commit_to: :head) # returns bool
the commit_from
supports the following args:
:last_commit
: the specified file is changed in last commit:fetch_commit
: the specified file is changed in remote fetched commit (ref:git-rev-parse#FETCH_HEAD
):before_merge
: the specified file is changed in before merged commit (ref:git-rev-parse#ORIG_HEAD
):after_merge
: the specified file is changed in merged commit(s) (ref:git-rev-parse#MERGE_HEAD
)
the commit_to
supports the following args:
- Not Yet Implemented
Copy file/directory between from local/remote to remote/local.
copy(to: :remote, local: "/path/to/file", remote: "/path/to/dest")
copy(to: :local, remote: "/path/to/file", local: "/path/to/dest", is_dir: true)
the to
supports the following args:
:remote
: copy from local to remote:local
: copy from remote to local
the local and remote is path of the file or directory. if the directory is specified, copy recursively.
the is_dir
is required for to: :local
, and default is false
.
Run commands in local/remote.
run(remote: "echo 'Hello, World'")
run(local: "echo 'Hello, World'")
Return true
when the last task is successful.
task :deploy do
# ...
end
hook after: :deploy do
if task_success
run # ...
end
end
This project is licensed under the MIT License - see the LICENSE file for details.