RocketChat notifications on your CI/CD pipeline
Tags: rocketchat, cicd, go, gitlab
Published: 2018-10-12 16:47:48

---
title: RocketChat notifications on your CI/CD pipeline
published: true
description: How to use RocketChat to follow your CI/CD
tags: RocketChat, CI/CD, GO, Gitlab
cover_image: https://thepracticaldev.s3.amazonaws.com/i/4ls5m6ciydt5175qh4yc.jpg
---
Hey there :)
I'm a big fan of [Rocket.Chat](https://rocket.chat/). Such a big fan that I even wrote [my own REST API wrapper](https://github.com/jadolg/rocketchat_API) to use it with Python and convinced everyone in my company to migrate from Slack. And since I work in a software house we soon started using it for many things. We even have a bot to set up reminders in the organization :)
One thing we love about the work we do is continuous integration. We are a very quality focused team and we like everything to be automated. I want to do `git push` and everything should automagically start building, testing, measuring and deploying and I, of course, want to have notifications on my awesome chat application so my team is also aware of what's going on without even opening our CI tools.
I know there are plenty of CI tools, but one of the more popular in my team is gitlab-ci. I personally switched from jenkins because I loved the way gitlab works all with Docker out of the box and I find the sintax more clear and beautiful, therefore I will write my examples using gitlab-ci notation.
So, you can technically push notifications to RocketChat using only curl, but it will probably be verbose. First, you would have to login into your chat server and save the tokens and then post the message you want, all using, for instance, *curl*.
According to the REST API documentation, you would log in like this
```bash
curl http://localhost:3000/api/v1/login \
     -d "username=myusername&password=mypassword"
```
which will result in a response like this:
```json
{
  "status": "success",
  "data": {
      "authToken": "9HqLlyZOugoStsXCUfD_0YdwnNnunAJF8V47U3QHXSq",
      "userId": "aobEdbYhXfu5hkeqG",
      "me": {
            "_id": "aYjNnig8BEAWeQzMh",
            "name": "Rocket Cat",
            "emails": [
                {
                  "address": "rocket.cat@rocket.chat",
                  "verified": false
                }
            ],
            "status": "offline",
            "statusConnection": "offline",
            "username": "rocket.cat",
            "utcOffset": -3,
            "active": true,
            "roles": [
                "admin"
            ],
            "settings": {
                "preferences": {}
              }
        }
   }
}

```
and you would need to save the values of *authToken* and *userId* to be used to post the message.
Posting the message after this using *curl* is also not difficult:
```bash
curl -H "X-Auth-Token: 9HqLlyZOugoStsXCUfD_0YdwnNnunAJF8V47U3QHXSq" \
     -H "X-User-Id: aobEdbYhXfu5hkeqG" \
     -H "Content-type:application/json" \
     http://localhost:3000/api/v1/chat.postMessage \
     -d '{ "channel": "#general", "text": "This is a test!" }'
```
It should be very easy to make a script with this, but since I wanted to practice some *GO* I decided to make [this application](https://github.com/aleph-engineering/rocketchat-notification) and since I love the way *GO* just works almost everywhere it seemed like a good idea and it was.
So the idea now is a little bit more simple:
You just have to download the released application (or compile it yourself) and executed as shown in the help.
```bash
wget https://github.com/aleph-engineering/rocketchat-notification/releases/download/1.4.1/rocketchat-notification -P /usr/bin/ && chmod +x /usr/bin/rocketchat-notification
```
and
```
rocketchat-notification -c general -u user -p ${ROCKET_PASSWORD} -s https://myserver.rocket.chat -m "hello from terminal"
```
Pretty simple right?
Now let's use it in a sentence :)
On my gitlab-ci (.gitlab-ci.yml on your files) I would do something like this:
First, let's put the password of the user we want to use as an environment variable on gitlab so it is not persisted on our files improving our security:
This is done on our project's settings under CI/CD 
![gitlab_CI](https://thepracticaldev.s3.amazonaws.com/i/kb6mg5y3i3sgzmhilyoc.png)
And let us write in our `.gitlab-ci.yml` something like this:
```yaml
stages:
- test

image: docker:stable-dind

test_nitofication:
  stage: test
  before_script:
  - wget https://github.com/aleph-engineering/rocketchat-notification/releases/download/1.4.1/rocketchat-notification -P /usr/bin/ && chmod +x /usr/bin/rocketchat-notification
  script:
  - rocketchat-notification -c general -u gitlab -p ${ROCKET_PASSWORD} -s https://yourserver.rocket.chat -m "hello from CI"
```
Commit and push your changes and wait for the notification :)
![notification](https://thepracticaldev.s3.amazonaws.com/i/5puovnncfjl7k44wnfhy.png)
Do you want to send the output of a command to your chat? No problem. You can always run rocketchat-notification to read from standard input like this:
```
docker ps | rocketchat-notification -c general -u gitlab -p ${ROCKET_PASSWORD} -s https://yourserver.rocket.chat
```
and using the `-code true` flag your text will appear in a codebox in the chat.
And that's it. I hope you find this interesting and practical and have fun with your Continuous Integration.