Is there a similar DevOps tool to fabric with JavaScript as its scripting language? I'm specifically interested in the remote execution side.

Most of the tools I've found rely on python (e.g fabric) or Ruby (e.g. Capistrano, Chef). However, in my team we don't use these languages for anything else. While these languages may be great, they are not as universal as JavaScript in the web development industry.

I mention fabric because it's ideal for what I want except that I have minimal python skills (sadly).

  • 2
    To what fabric are you referring? Could be get a link? Is this MySQL Fabric? It's ideal for "what you want" but what do you want? – James Shewey May 19 '17 at 16:44
  • 2
    @JamesShewey I've updated my post. fabfile.org. Thx – Henry May 21 '17 at 0:07

Shipit is what you are looking for.

Shipit is an automation engine and a deployment tool written for node / iojs.

Shipit was built to be a Capistrano alternative for people who don't know ruby, or who experienced some issues with it. If you want to write tasks in JavaScript and enjoy the node ecosystem, Shipit is also for you.

You can automate anything with Shipit but most of the time you will want to deploy your project using the Shipit deploy task.


Fabric (and Capistrano, presumably the unnamed Ruby tool you came across) are a bit unusual in that they're task runners with extra features for easily running tasks on remote hosts. I'm not aware of any other popular tools that do exactly the same thing, but depending on your needs there are a few other options that may work for you.

Grunt and Gulp are the foremost task runners in the Javascript ecosystem. While not designed specifically to deploy software, they both have plugin-based systems that allow you do this, and you'll find plenty of articles of people using either one to do so. For instance, this tutorial uses the grunt-ssh plugin to integrate ssh with grunt, while this one relies on gulp-rsync.

Using task runners to deploy code tends to be an approach favored by developers who are wearing an ops hat. When you ask an operations engineer, they're more likely to suggest hacking this behavior into a configuration tool. This can take many forms (for instance, packaging your app into an rpm or deb, then installing it like any other software), but I'm going to focus on what I think would be the simplest and most direct method for you.

Ansible is ostensibly a configuration management tool, but it really shines at task orchestration, which I would define as "running a set of actions across a set of servers". The official documentation is a good place to get started, but to give you an idea of what this might look like, you might have a playbook (a YAML file that defines a set of tasks) like this:

- hosts: webservers
    - name: update code checkout
        repo: ssh://git@github.com/mylogin/hello.git
        dest: /var/www
        version: master

    - name: restart webserver
      command: restart-command-you-run

When you run this file with ansible-playbook, it will look up your host list (as simple as an ini file, but can also be a dynamic list written in any programming language) to determine what servers exist and what groups they're in, and then run the defined tasks on the servers that you tell it to.

Now, you specified that you wanted to stay in the Javascript ecosystem. However, while Ansible is a new thing for you, it doesn't have all the complexities of another programming language, since configurations are written in YAML. It will also allow you to do much much more later, and unlike several of its competitors, uses ssh to communicate, so there's very little setup involved (nothing to install on the remote machines).

  • 1
    Very helpful thanks. (and yes I was referring to Capistrano - I've updated my post) – Henry Jun 3 '17 at 21:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.