One Token Expired. Three Pipelines Broke for a Day. Cross-Platform Registry Fix.
One expired token. Three broken pipelines. NuGet packages living in Azure DevOps, CI/CD running in GitLab. The gap between them was killing deployment speed. Every build meant reaching across platforms, hoping credentials still worked. Nobody trusted anything: PAT tokens expiring mid-sprint, CI/CD variables scattered across projects with zero documentation, and developers too scared to touch the NuGet config because last time someone did, three pipelines broke for a full day. The fix was moving everything to GitLab Package Registry - same platform for code, packages, and pipelines - and replacing every personal access token with CI_JOB_TOKEN, which is built-in, scoped, and needs zero rotation. Migrating packages was only half the job. The CI/CD variables were a graveyard: old Azure DevOps PATs nobody remembered creating, duplicate NuGet source URLs with slightly different names, variables nobody could explain. Audited every one, killed the dead ones, consolidated what remained. After that the pipeline flow became dead simple: dotnet restore from GitLab Registry, build and pack, push back. All authenticated with the job token automatically. Credential rotation calendar and…