Shifting to DevOps from Build and release background

·

6 min read

Hello everyone!

Nice to meet you all at Hashnode!

I just wanted to share my journey from working in build and release profile and shifting to DevOps.

In my first few years of my professional career, I was working in Build and release engineer profile. The tools and technologies included were

  • SCM : IBM Rational ClearCase
  • Task Management: IBM Rational ClearQuest
  • CI tool : IBM Rational BuildForge
  • Build tools : Ant
  • Operating system : IBM AIX, windows server 2012

You could imagine these IBM Rational tools were popular earlier. But already the new open source tools started become popular and tools like Jenkins, Git etc are widely adopted.

So it was necessary to start working on new age tools rather than sticking on old ones. In fact this is important for an IT professional.

So let's see what's needed to jump into DevOps space...

Exploring Git :

Screenshot 2021-05-15 at 12.45.23 PM.png image source : attlassian

Source code management is very important to manage project code. Also this takes care of versioning, history and merging code from different developers. Understanding concepts, using basic commands, creating repositories and committing changes..

git clone #clone existing repository
git pull #get changes from remote
git init #initialise current directory
git branch #current branch you are in and work with branches
git status #current status of repo
git config #config git
git add #stage the changes
git commit #commit the changes locally
git push #push the changes to remote repo
git log #see commit history of a repo

Also understanding git branch management is important and it differs from one org to other org.

master branch # contains production code
release branches # contains the individual release changes
features/bugfix branches # contains new feature/prod fix change

Learning a Programming Language

Screenshot 2021-05-15 at 12.48.42 PM.png image source : pypl

I had Java knowledge to build a web application. Also Python seems to be a good fit for any automation that we do in DevOps space apart from the shell scripting knowledge.

Exploring Modern CI/CD Tools

Screenshot 2021-05-15 at 12.55.46 PM.png image source : codegrip

I just explored jenkins.io to setup jenkins in docker container and play with it. Jenkins is most popular CI tools nowadays although there are tons of other tools are in the market like CircleCI, TravisCI, TeamCity, GitlabCI, DroneCI etc..

You can use Jenkins official docker image to run Jenkins server as mentioned in the documentation

Also Jenkins can be used as a CD tool as well.

But you can also learn another CD tool if you like.. GoCD, Spinnaker, Harness etc

Exploring Linux and Networking Fundamentals

Ideally knowledge on Linux is very much required to build a successful career in DevOps.

  • Linux boot process
  • Managing system services
  • Installing web/application servers and other softwares
  • Basic commands (find, sed, lsof, awk, ps, top, free, netstat etc)
  • Understand linux file system
  • shell scripting
  • troubleshooting

Networking basics

  • TCP/IP networking fundamentals
  • SSH, SCP, SFTP
  • HTTP, SSL, TLS, DNS
  • nslookup, host, netstat, dig, traceroute, ping

Exploring Containers and Orchestration Tools

Containers are widely used since its inception and knowledge on the containers is very important. Containers make building and shipping software very easy. It is very lightweight. Docker is most popular container.

When we use containers in production, hundreds of containers are needed to be deployed. Managing them manually is very difficult. Orchestration tools help to manage these automatically and provides service discovery, self-healing, auto-scaling features.

Kubernetes is popular container orchestration tool and it's widely used in this microservices era. Screenshot 2021-05-15 at 1.38.55 PM.png image source : kubernetes.io

Quick link to CKA guide here

Exploring Public Cloud

Screenshot 2021-05-15 at 1.00.51 PM.png image source : metaswitch

AWS is the best choice to get started with and also they provide 1-year free tier which is enough to learn basic concepts and for doing practice. Make sure to terminate the resources as soon as you done practicing.

Fundamentals to learn

  • Compute : EC2, AMIs, ASG, Launch templates
  • Storage : EBS, EFS, S3 etc
  • Networking/Security: VPC, Subnet, Route53, LB, Security groups, ACLs

The above basic concepts are almost same in other clouds as well with little or no difference. Azure, GCP and OracleCloud also some of the other popular cloud providers.

Exploring Infrastructure Provisioning Tool

Screenshot 2021-05-15 at 1.04.16 PM.png image source : terraform

Terraform was the first infrastructure provisioning tool or Infrastructure as code tool that I learnt.

Terraform scripts are written using HCL (Hashicorp Configuration Language)

Structure of a basic terraform project..

main.tf - main file to create some resources
someresource.tf - apart from main.tf you can also organize resource creation in other tf files
variables.tf - declare variables used in other tf files
outputs.tf - Display output such as created instance IP, LoadBalancer name etc

Some important commands

terraform init # used to initialise a working directory
terraform plan # create a plan
terraform apply # Apply the plan, creates the desired resources
terraform destroy # Destroy the resources
terraform refresh # refreshes local state with current resource status
terraform workspace list/select # List and select the correct workspace

You can also learn CloudFormation if you are using AWS as cloud provider. But Terraform is more generic tool and you can use it in any other cloud providers as well in future.

Exploring Configuration Management Tool :

First config management tool I learned was Chef. Chef Infra automates how infrastructure is deployed, configured and maintained..

Screenshot 2021-05-14 at 4.51.52 PM.png image source : chef.io

You'll create cookbooks from chef workstation and upload it to check server. The Chef Client is installed all the nodes which needs to be managed by chef and it configures the nodes to desired state.

But lot of things changed since i stopped using chef.

Screenshot 2021-05-15 at 1.07.19 PM.png image source : ansible

Ansible also another popular tools in configuration management automation area.

Ansible doesn't have any central server but playbooks are managed in control machines(client machines) and changes are pushed to target servers. Also we can do application deployment using Ansible. They do provide zero downtime deployment features and you can customize the deployment as per requirement.

Exploring Monitoring Tools

I also learned about the combination of Telegraf, InfluxDB and Grafana which makes monitoring the infrastructure easy.

  • Telegraf : Binary you can install in each of the nodes to capture metrics and configure it to send them to influxDB
  • InfluxDB : Time-series DB which stores those metrics
  • Grafana : Shows metrics visually via nice dashboards

You can also explore TICK, ELK stack for monitoring..

This is just overview of what basics is required to learn about DevOps. But understanding of the DevOps is also important not just the tools.

I'm going to share more on each of the topics mentioned above and share my journey along the way in coming days.

Don't forget to follow me on twitter..

Thanks,