Shifting to DevOps from Build and release background
Tags: devops, cloud, containers, kubernetes
Published: 2021-05-15 10:29:03

Hello everyone!

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

![image source : attlassian](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4f18ahtoudlwez2czd7e.png)

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

![image source : pypl](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bsa7a25uiai6ku1qw49o.png)

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

![image source : codegrip](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k739046rrliip4p02a2h.png)


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.

![image source : kubernetes.io](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v5b8a2a8rxvfybuajorh.png)

Kubernetes is popular container orchestration tool and it's widely used in this microservices era.

### Exploring public cloud

![image source : metaswitch](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l8uy57xtspyi1xnendwn.png)

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

![image source : terraform](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bqmo8r5l9gdbp9k7misv.png)

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..

![image source : chef.io](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l5a6gxcayeyv0sod4c6y.png)

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.

![image source : ansible](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1yvauidul14pizu9ptsr.png)

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](https://twitter.com/PShasthri)..

Thanks,