Automating project setup using Slack and NodeJS
One of the most tedious parts of a developer's or project manager's life is setting up a new project, you have to:
- Create your git repository (we use bitbucket here at Technology Studio towers)
- Create azurewebsites to deploy your dev and live sites to
- Create a teamcity project, integrate git and add your builds
- Create a Slack room (more about that below)
We love using Slack for our internal messaging (OK, OK, for sending memes to each other) so we wondered how we could integrate project setup with Slack. The advantage of this approach is that anybody could do it (it doesn't rely on a developer or someone with knowledge of the above services), all of our tooling and integration is in one place and it's self documented.
We had a number of integration options when considering how to do this through Slack:
- A custom plugin
- Slash commands
We decided to use Slash commands as we can setup multiple commands under the same configured integration, we're all accustomed to using such commands for things like Hangouts and Giphy, and it's quick and easy to get an integration setup. A slash command has two elements:
- The command - a command is made up of two parts - the command name and further text
- A URL - a URL that is requested when somebody runs the slash command.
Our project setup slash command looks a bit like this:
/project-setup [ProjectName] [Services (azure,bitbucket,slack,teamcity)]
It takes in two commands:
ProjectName- The name of the new project, this is used for the Azure website names, the Bitbucket repo name, the Slack channel name and the Teamcity project.
Services- A comma delimited list of the services to setup:
Where the wild things live
They live in a Node script hosted on azure in case you're wondering.
We're just interested in the
token so we can make sure the request is from Slack and the
text so we can pull out the two arguments specified above.
The script takes the two arguments from the Slash command and uses different npm packages and webservices to do the wild things. Below are a list of the tools/webservices we used for each service:
- We set up the azure websites using the azure-asm-website npm package.
- Bitbucket have an awesome REST APIthat we consumed using the request npm package.
- Slack have an equally nice API that we bearly scratched the service of
- Teamcity have an API with a mind blogging amount of documentation
We'll be blogging in further detail about these tasks in the near future.
We would have loved to have setup our JIRA project and Confluence space but their API doesn't currently allow for this.
What else are we missing? Get in touch and let us know.
Header image via imgflip.com/memegenerator.