DEV Community

Cover image for How I have created my own technological survey with node.js and Gitlab CI/CD.
jenoH
jenoH

Posted on

3 2

How I have created my own technological survey with node.js and Gitlab CI/CD.

Disclaimer: It's my first article, and I'm not yet proud of my English level. Nice read at all !

Hello guys, how are you ? Do you subscribes to newsletters for your daily technological survey and don't read any articles ?

I realized that some time ago. So I have decided to create my own "private" flux of news/articles.

In theory.

The theory is really simple:

  1. We need to find some rss flux of what you want to read.
  2. After this search, we need to make a script who send an email every morning at your favorite email address.
  3. And at the end, you can run this script on a server as a cron or you can also use Gitlab CI/CD.

Notice that I have make the minimum at the moment. We can add more rss flux, and clear articles/news before send an email to improve your technological survey.

Let's code !

I want to improve my javascript level so I have pick this technology, but you can do the same thing with another techno..

I will not explain a lot my code because you can do what you want, and you will probably understand my code easily !

My gitlab repository.

For my example I have take a Reddit rss like this :

let feed = await parser.parseURL('https://www.reddit.com/r/softwaredevelopment/.rss');
Enter fullscreen mode Exit fullscreen mode

Sending email with nodemailer and handlebars.

Sending email with node.js is really simple with nodemailer !
First, we need to define the transport for nodemailer, in my case I have use gmail, but you can take mailgun, or whatever, but gmail is easy to set up.

var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'cronjenoh@gmail.com',
    pass: process.env.MAIL_PASS
  }
});
Enter fullscreen mode Exit fullscreen mode

Next, we have to feed our HTML with our news previously collected on the rss flux.

For that, I have used Handlebars. Handlebars is a simple templating language. It uses a template and an input object to generate HTML or other text formats.

It's working like this :

 readHTMLFile(__dirname + '/email.html', function (err, html) {
    var template = handlebars.compile(html);
    var replacements = {
      posts: posts
    };
    var htmlToSend = template(replacements);
Enter fullscreen mode Exit fullscreen mode

In the htmlToSend variable we have the template with our news. (My repository have an example of an email template).

Running the srcipt as a cron

In my case, I have choose GitLab CI/CD.
GitLab CI/CD is a tool built into GitLab for software development through the continuous methodologies:

  • Continuous Integration (CI)
  • Continuous Delivery (CD)
  • Continuous Deployment (CD)

It's perfect when you need to run a scrips as a cron, it's easy to use.
So, first step, we need to add a .gitlab-ci.yml file in our repository.

default:
  image: node:latest

stages:
  - run

cron run:
  stage: run
  script:
    - npm i
    - node cron.js

Enter fullscreen mode Exit fullscreen mode

The first line is facultive, in fact if we remove this, Gitlab will take the default image for your docker container, but I have decided to take a node image (more coherent with my project).

Second step, we should whrite a stage and a job. In the job we should set the list of actions to setup the project. For a node project, we need to install packages with npm i and run the cron node cron.js.

After that, if you push you will see in CI/CD settings of your project that a pipeline as been created.

Final step, go to your schedules settings in CI/CD and set up your cron, with the target branch, timezone, recurrence ..

And it's done !

I hope you have enjoyed my article, I did it with pleasure ❤️.

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

Top comments (0)

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started