“Are you a jobless senior developer in Switzerland seeking to advance your skills in .NET and Azure Cloud? Looking for hands-on experience in CI/CD pipelines and deepening knowledge in parallel and async programming? Want real-world project ideas to effectively utilize cloud resources? Check out this post for advice and resource recommendations to boost your tech expertise and job prospects. #JoblessDeveloper #TechSkills #AzureCloud #NETFramework #CI/CDpipelines #CloudSolutions“
# CI/CD Pipelines
They all work in a similar manner, but I’ll use Azure DevOps (ADO) as my basis here:
* A pipeline has >=1 Stages, which has >=1 Jobs, which has >=1 Tasks.
* Pipelines are defined in a YAML file committed to your git repository (for ADO and GitHub Actions)
* Predefined tasks do “pipeline” stuff, e.g., build a project, copy files, run a script, run some tool. [Here’s an index of available pre-defined tasks.](https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/?view=azure-pipelines&viewFallbackFrom=azure-devops)
* Tasks are grouped into Jobs, Jobs are grouped into Stages
Generally, a production cloud CI/CD for Azure will have a build stage and a deployment stage. Test is usually done during build for unit tests, and during deployment for integration / DVTs (deployment validation tests).
Commonly, builds have tasks that do this sort of thing, roughly in this order:
1. Initialize the build environment with tasks that make tooling available and selected as the default for tech stack.
1. e.g., a task is run to install NuGet (NuGetInstaller@1), that will let you use nuget to restore packages, or UseDotNet to install a specific version of .NET SDK. The last one you install will be the default used by subsequent tasks that depend on .NET.
2. Restore packages by calling the relevant package manager step (e.g. Npm@1 for `npm install`, NuGetCommand for `nuget restore`, or DotNetCoreCLI for `dotnet restore`). **the one you use depends on the tech stack used by the build**
3. Build the projects. For .NET, this is either DotNetCoreCLI, MSBuild, or VSBuild. For NodeJS, it would probably be Npm.
4. Run tests.
5. Publish test results (to ADO)
6. Run security scanning, compliance, etc. tasks. These are for things like malware scanning, credential scanning (don’t want those in your code!), vulnerability scanning, etc.
7. Code signing for runtime security and package distribution
8. Package creation (e.g., NuGet, NPM packages)
9. Package signing
10. Artifact publishing. Artifacts are the “outputs” of your build stage(s).
Your builds may need additional steps, like scripts run between things, etc. It all depends on the project.
Deployments are a whole other topic, but for Azure deployments you’ll be doing steps like:
1. Fetching the build artifacts from the build stage
2. Provision: Running `az cli` or Azure PowerShell scripts to provision Azure Resources (e.g., Storage accounts, VMs, Service Fabric clusters, Cosmos DB accounts, etc.)
3. Uploading build artifacts to a storage account so it’s accessible to the deployment tasks.
3. Deploy: Running `az cli` or Azure PowerShell scripts to deploy the application packages to their VM, SF cluster, App Service, etc.
# Deepening .NET Knowledge
The best advice I have is to first learn the latest released C# (12.0 at post time) language features, then carefully read through open-sourced complex projects like https://github.com/dotnet/aspnetcore. I, personally, learn much more **doing** than researching, though. If you want a doable solo project that will exercise and grow your .NET and cloud capabilities, you might consider building a multi-region, highly-available API service that leverages storage, a database tech (Cosmos DB is in demand in Azure-land), an eventing tech (Event Hubs, for example), Key Vault, Managed Identities, a cluster hosting tech stack (Kubernetes or Service Fabric), and an edge security / caching layer like Azure Front Door with WAF.
The most important skills to have right this moment are a deep familiarity with security best practices (zero-trust/credential-free, managed identities, RBAC, PIM), general coding problem solving and design skills, and, to be honest extensive familiarity of what services are offered in Azure and what each one does.
Hope that helps a little.