
In modern DevOps practices, automating notifications is crucial for keeping teams informed about the status of CI/CD pipelines. Whether it’s a pipeline success, failure, or a password reset notification, sending emails directly from your GitLab pipeline can save time and improve collaboration. In this blog post, we’ll explore two methods to send email notifications from a GitLab CI/CD pipeline, using Python and ssmtp
. Both methods are generic, secure, and easy to implement.
Why Send Email Notifications from GitLab Pipelines?
Email notifications are a simple yet effective way to keep stakeholders informed about pipeline events. For example:
- Notifying team members about pipeline failures.
- Sending password reset confirmations.
- Alerting about successful deployments or builds.
By automating these notifications, you can reduce manual effort and ensure timely communication.
Method 1: Sending Emails Using Python in GitLab CI/CD
This method uses Python’s smtplib
library to send emails. It’s ideal for teams familiar with Python scripting.
Step-by-Step Implementation
- Define the Pipeline Job:
Create a job in your.gitlab-ci.yml
file to handle email notifications. Use anoraclelinux:8
image and install Python and the required libraries.
notify:
image: oraclelinux:8
variables:
OUTLOOK_EMAIL: "${OUTLOOK_EMAIL}"
OUTLOOK_PASSWORD: "${OUTLOOK_PASSWORD}"
NOTIFICATION_EMAIL: "[email protected]"
script: |
dnf install -y python3 python3-pip
pip3 install secure-smtplib
python3 -c '
import smtplib
from email.message import EmailMessage
import os
msg = EmailMessage()
msg.set_content("Pipeline notification")
msg["Subject"] = "GitLab Pipeline"
msg["From"] = os.environ.get("OUTLOOK_EMAIL")
msg["To"] = os.environ.get("NOTIFICATION_EMAIL")
server = smtplib.SMTP("smtp.office365.com", 587)
server.set_debuglevel(1)
server.starttls()
server.login(os.environ.get("OUTLOOK_EMAIL"), os.environ.get("OUTLOOK_PASSWORD"))
server.send_message(msg)
server.quit()'
- Set Up Environment Variables:
Store sensitive information likeOUTLOOK_EMAIL
andOUTLOOK_PASSWORD
in GitLab’s CI/CD settings under Settings > CI/CD > Variables. This ensures security and avoids hardcoding credentials. - Customize the Email Content:
Modify themsg.set_content()
andmsg["Subject"]
fields to include relevant pipeline details, such as job status, logs, or error messages. - Run the Pipeline:
Trigger the pipeline, and the email will be sent to the specified recipient.
Method 2: Sending Emails Using ssmtp
in GitLab CI/CD
This method uses ssmtp
, a lightweight SMTP client, to send emails. It’s perfect for teams looking for a simple, non-Python-based solution.
Step-by-Step Implementation
- Define the Pipeline Job:
Create a job in your.gitlab-ci.yml
file to handle email notifications. Use adebian:latest
image and installssmtp
.
stages:
- reset_password
- notify_user
reset_password:
stage: reset_password
script:
- echo "oci iam user change-password ..."
- echo "NEW_PASSWORD=$generated_password" >> variables.env
artifacts:
reports:
dotenv: variables.env
notify_user:
stage: notify_user
image: debian:latest
dependencies:
- reset_password
before_script:
- apt-get update && apt-get install -y ssmtp
script:
- |
echo "To: $USER_EMAIL
From: $OUTLOOK_EMAIL
Subject: Password Reset Notification
Your password has been reset to: $NEW_PASSWORD" | ssmtp -v $USER_EMAIL
variables:
SSMTP_ROOT: $OUTLOOK_EMAIL
SSMTP_MAILHUB: smtp.office365.com:587
SSMTP_AUTHUSER: $OUTLOOK_EMAIL
SSMTP_AUTHPASS: $OUTLOOK_PASSWORD
SSMTP_USETLS: "YES"
SSMTP_USESTARTTLS: "YES"
- Set Up Environment Variables:
StoreOUTLOOK_EMAIL
,OUTLOOK_PASSWORD
, andUSER_EMAIL
in GitLab’s CI/CD settings. - Customize the Email Content:
Modify theecho
command in thescript
section to include the desired email content. - Run the Pipeline:
Trigger the pipeline, and the email will be sent to the specified recipient.
Best Practices for Sending Emails from GitLab Pipelines
- Secure Your Credentials:
Always use GitLab’s CI/CD variables to store sensitive information like email credentials. Avoid hardcoding them in your pipeline configuration. - Use TLS Encryption:
Ensure your SMTP server uses TLS encryption (as shown in both methods) to protect email content during transmission. - Test Email Notifications:
Before deploying to production, test your email notifications in a staging environment to ensure they work as expected. - Keep Emails Concise:
Include only essential information in your emails, such as pipeline status, error messages, or reset passwords. - Monitor Email Delivery:
Set up logging or monitoring to track email delivery failures and troubleshoot issues promptly.
Conclusion
Sending email notifications from GitLab CI/CD pipelines is a powerful way to keep your team informed and automate communication. Whether you prefer using Python or ssmtp
, both methods are easy to implement and highly customizable. By following the steps and best practices outlined in this guide, you can streamline your DevOps workflows and ensure timely notifications for critical pipeline events.
Start integrating email notifications into your GitLab pipelines today and experience the benefits of automated communication!