Posted on Leave a comment

remote: TF401019: The Git repository with name or identifier does not exist or you do not have permissions for the operation you are attempting.

Recently from a new devops project I tried to checkout an external repository from another devops project and I got a failure. In more detail I was working on a new pipeline on devops project B and I was trying to fetch a repository from azure devops project A.

remote: TF401019: The Git repository with name or identifier does not exist or you do not have permissions for the operation you are attempting.

Searching it further I realized that the error was the job scope. In order to resolve I disabled the job scope for the current project (the one from which I run the pipeline – project B).

After disabling “Limit job authorization scope to current project for non release pipelines” then I was able to get a successful checkout for the external repository.

Posted on Leave a comment

Install azure cli using Powershell – silent mode

Az cli is a very important tool that one devops engineer may need to install on systems. You can perform a silent install on a windows machine using the powershell below:

$msiFilePath = "azure-cli.msi"
Invoke-WebRequest https://aka.ms/installazurecliwindows -OutFile $msiFilePath
             
$MSIArguments = @(
    "/i"
    ('"{0}"' -f $msiFilePath)
    "/qn"
    "/norestart"
)               
Start-Process "msiexec.exe" -ArgumentList $MSIArguments -Wait -NoNewWindow
Remove-Item -Path $msiFilePath  -Force

By running the powershell the download procedure will begin.

When the installation finishes you can locate it under installed programs:

https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-windows?tabs=azure-cli

Posted on 1 Comment

Install Azure DevOps agent using powershell

With Azure devops you can create incredible automations. But in many cases you will need first to install the azure devops agent in order to run your tasks. Using the below powershell you can automate the installation of an azure devops agent.

New-Item "C:\agent" -itemType Directory
cd "C:\agent"
$url = "https://dev.azure.com/YOUR_ORG"
$token = "PAT_TOKEN"
$auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$token"))

$package = Invoke-RestMethod "$url/_apis/distributedtask/packages/agent?platform=win-x64&$`top=1" -Headers @{Authorization = "Basic $auth"}

$fileName = $package.value[0].fileName;
$downloadUrl = $package.value[0].downloadUrl;
    

Invoke-WebRequest -UseBasicParsing $downloadUrl -OutFile agent.zip
Expand-Archive -Force agent.zip -DestinationPath .
Remove-Item -Force agent.zip


.\config.cmd --unattended --replace --acceptTeeEula --work work --url https://dev.azure.com/YOUR_ORG --pool YOUR_POOL_NAME --auth pat --token $token --runAsService --runAsAutoLogon --windowsLogonAccount USER --windowsLogonPassword USER_PASSWORD
.\run.cmd

During the installation you may notice a problem for the powershell task to write on the log file.

Nevertheless the agent will be installed successfully.

Posted on Leave a comment

kubectl commands cheat sheet for daily kubernetes administration

This is a cheat sheet for basic k8s commands that one k8s administrator can use daily.

Apply a YAML definition on k8s-cluster:

kubectl apply -f pod.yaml

Apply a definition on specific namespace:

Kubectl apply -f kati.yml -n namespacename

Create a new namespace:

kubectl create ns namespacename

Set k8s cluster context:

kubectl config use-context geralexgr-aks

Get k8s cluster context:

kubectl config view

Create a deployment:

kubectl create deployment new-app --image=hello-world:latest

Delete a deployment:

kubectl delete deployment nginx -n nginx

Describe a service:

Kubectl describe service/myservice

Get logs for pod:

Kubectl logs pod-123

Get cluster namespaces:

kubectl get namespace

Set active namespace:

kubectl config set-context --current --namespace nginx

Delete a pod:

kubectl delete pod nginx-pod

Scale a deployment:

kubectl scale --replicas=5 deployment/deploymentname

Get pods with labels:

kubectl get pods --show-labels

Get cluster scoped resources:

kubectl api-resources