Thursday, June 9, 2022

Work Life: Retrospective on Learning Azure DevOps Pipeline and Release (primarily a C# developer)

I am a very lazy learner. By this, I mean more like lazy-loading in software development. I read as little as possible before trying to implement something.

Due to this, my learning of Azure DevOps Pipeline and Release was quite frustrating. To guesstimate, the experience probably took me about a week to get something to work with some ability to customize to external needs.

Pipeline vs Release

I still do not have a clear picture of this in my head. The things I read have not been fully digested and not similar to my experience with them.

My current view is that the pipeline is an ability for me the ability to use a temporary virtual machine to "download", build, and create an artifact.

I use Release to get that artifact and deploy it to the target systems.

A small question mark in my mind is that pipeline could be used to deploy and release can also be used to build. Using them separately above is still much easier.

Learning so many new technologies

By new, I mean things I have not learned for example bash. Bash has been around a long, long time but I haven't ever needed bash although a bit similar to dos command. I know extremely limited knowledge of dos command besides navigating around and getting user or system info.

Because I am a windows guy, I was using a windows VM. I was using bash on windows. I did not realize this was a problem when I was trying examples which were mostly designed around Linux. I admit that I didn't know bash was primarily a Linux thing. So after a lot of time in-part because it took me a while to learn about the Linux part, I changed the VM to Linux which then magically everything started to work properly.

The hardest part of using Windows bash was moving files around. Because Windows uses a drive letter, the copy was confused on what to do with the drive letter. It sometimes used the letter as a folder so it could not find the files. I probably didn't use it correctly.

I also had to learn YAML. Although pretty simple on the format, it was difficult to understand how this was used. It was edited in Azure so part of my mind was thinking this was executed in Azure. After a lot of troubleshooting, it finally dawned on my that this is mostly triggered from GitHub because GitHub has to send the trigger to the pipeline. So things like why the trigger branch only works on the branch the YAML file is on is important.

I was still in the process of learning GitHub and how to use it with Visual Studio while trying to train developers on branching (I also do not understand why I am the person responsible for this as a release manager). There was just so many variables in my knowledge that it was rather frustrating to figure out where the problem is.

Troubleshooting

Part of learning so many new techs is troubleshooting them. I spent hours just figuring out that spaces are important in bash. An equal sign requires no spaces around it when assigning. Then it needs spaces for comparing.

Learning which variables are part of DevOps system versus variables of the language or VM system. I really just tried copy/paste but understand where my system variables are used with code variables was taxing my brain.

Time Constraints

Would it have been better if I just sat down and read each tech first? Probably not. I would probably still be learn all the capabilities of bash and nothing else. Was there a better way to handle this still?

I definitely admit that I am very cheap. I tried to lean on colleagues but they lack the expertise even in their own fields so I have very little resource within my company. It was also very, very difficult to get someone's time to just look at my problem or teach me the technology. I spent so many evenings just reading on things just to solve seemingly simple problems like getting just the changed files in git.

I actually asked a friend if he knows anyone about the technology and offered to pay (with my personal funds) to help me with my work. I figured this was the fastest way to learn as they would know what I need to know and what I didn't need to know yet.

Ended up I couldn't find anything and my friend being curious as he was assisted me with at least the bash portion enough so that I can figure a piece of my problem. Amazingly that was enough stability for me to complete the whole project.


No comments:

Post a Comment