Compare commits
	
		
			26 Commits
		
	
	
		
			2aadba7822
			...
			jenkins-ar
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					831cb06f33 | ||
| 
						 | 
					6333f7eb70 | ||
| 
						 | 
					49ae3a7bf3 | ||
| 
						 | 
					0230b19a87 | ||
| 
						 | 
					0778b8cee6 | ||
| 
						 | 
					33c1f1d10c | ||
| 
						 | 
					e1b24c52fe | ||
| 
						 | 
					0b59103e6c | ||
| 
						 | 
					ecdf32a90d | ||
| 
						 | 
					933c71fce7 | ||
| 
						 | 
					24597b22f7 | ||
| 
						 | 
					7d10b29160 | ||
| 
						 | 
					41b7f2e959 | ||
| 
						 | 
					a4b07ad984 | ||
| 
						 | 
					9017f29d7a | ||
| 
						 | 
					161c03960a | ||
| 
						 | 
					d0bd5f8332 | ||
| 
						 | 
					949e6c235d | ||
| 
						 | 
					7cd408950f | ||
| 
						 | 
					739da302fd | ||
| 
						 | 
					e7bc2a962d | ||
| 
						 | 
					698fa9e1d1 | ||
| 
						 | 
					edc669507c | ||
| 
						 | 
					87994b727f | ||
| 
						 | 
					ebbad36f96 | ||
| 
						 | 
					9f9086b0d6 | 
							
								
								
									
										32
									
								
								.jenkins/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.jenkins/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
FROM debian:bookworm-slim
 | 
			
		||||
 | 
			
		||||
# Zapobiega interaktywnym promptom
 | 
			
		||||
ENV DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
# Instalacja zależności systemowych
 | 
			
		||||
RUN apt-get update && apt-get install -y \
 | 
			
		||||
    ca-certificates \
 | 
			
		||||
    curl \
 | 
			
		||||
    gnupg \
 | 
			
		||||
    lsb-release \
 | 
			
		||||
    apt-transport-https \
 | 
			
		||||
    software-properties-common \
 | 
			
		||||
    unzip \
 | 
			
		||||
    bash \
 | 
			
		||||
    && rm -rf /var/lib/apt/lists/*
 | 
			
		||||
 | 
			
		||||
# Instalacja Azure CLI
 | 
			
		||||
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
 | 
			
		||||
 | 
			
		||||
# Instalacja kubectl (najświeższa stabilna wersja)
 | 
			
		||||
RUN curl -sLo /usr/local/bin/kubectl https://dl.k8s.io/release/v1.33.1/bin/linux/amd64/kubectl \
 | 
			
		||||
    && chmod +x /usr/local/bin/kubectl
 | 
			
		||||
 | 
			
		||||
# Instalacja kubelogin
 | 
			
		||||
RUN curl -sLo /tmp/kubelogin.zip https://github.com/Azure/kubelogin/releases/latest/download/kubelogin-linux-amd64.zip \
 | 
			
		||||
    && unzip -j /tmp/kubelogin.zip -d /usr/local/bin \
 | 
			
		||||
    && chmod +x /usr/local/bin/kubelogin \
 | 
			
		||||
    && rm /tmp/kubelogin.zip
 | 
			
		||||
 | 
			
		||||
# Domyślna komenda po starcie kontenera
 | 
			
		||||
CMD ["bash"]
 | 
			
		||||
							
								
								
									
										86
									
								
								.jenkins/Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								.jenkins/Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
pipeline {
 | 
			
		||||
    agent {
 | 
			
		||||
        kubernetes {
 | 
			
		||||
            yamlFile '.jenkins/podTemplate.yaml'
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    environment {
 | 
			
		||||
        RESOURCE_GROUP = 'tst-aks-rg'
 | 
			
		||||
        CLUSTER_NAME   = 'build'
 | 
			
		||||
        DEPLOY_FILES   = 'namespace.yaml secret-store.yaml deploy.yaml ingress.yaml'
 | 
			
		||||
        NAMESPACE      = 'user-microservice'
 | 
			
		||||
        DEPLOYMENT     = 'api'
 | 
			
		||||
        CLIENT_ID      = 'c302726f-fafb-4143-94c1-67a70975574a'
 | 
			
		||||
    }
 | 
			
		||||
    stages {
 | 
			
		||||
        stage('Checkout') {
 | 
			
		||||
            steps {
 | 
			
		||||
                container('kubectl') {
 | 
			
		||||
                    checkout scm
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        stage('Login to Azure & Get Kubeconfig') {
 | 
			
		||||
            steps {
 | 
			
		||||
                container('kubectl') {
 | 
			
		||||
                    sh '''
 | 
			
		||||
                        az login --identity --client-id ${CLIENT_ID}
 | 
			
		||||
                        az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --overwrite-existing
 | 
			
		||||
                        kubelogin convert-kubeconfig -l azurecli
 | 
			
		||||
                    '''
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        stage('Apply Kubernetes Resources') {
 | 
			
		||||
            steps {
 | 
			
		||||
                container('kubectl') {
 | 
			
		||||
                    script {
 | 
			
		||||
                        def files = DEPLOY_FILES.tokenize()
 | 
			
		||||
                        for (file in files) {
 | 
			
		||||
                            sh "kubectl apply -f ${file}"
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        stage('Verify Deployment') {
 | 
			
		||||
            steps {
 | 
			
		||||
                container('kubectl') {
 | 
			
		||||
                    script {
 | 
			
		||||
                        // Waiting until all pods reach "ready" status
 | 
			
		||||
                        sh '''
 | 
			
		||||
                            echo "Waiting for deployment rollout..."
 | 
			
		||||
                            kubectl rollout status deployment/$DEPLOYMENT -n $NAMESPACE --timeout=60s
 | 
			
		||||
                        '''
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        stage('Health Check') {
 | 
			
		||||
            steps {
 | 
			
		||||
                container('kubectl') {
 | 
			
		||||
                    script {
 | 
			
		||||
                        // Check if app is healthy
 | 
			
		||||
                        def ingressUrl = "https://user-microservice.marcin00.pl/health"
 | 
			
		||||
                        sh """
 | 
			
		||||
                            echo "Checking app health ${ingressUrl}..."
 | 
			
		||||
                            for i in {1..30}; do
 | 
			
		||||
                                if curl -sf $ingressUrl; then
 | 
			
		||||
                                    echo "Health check OK"
 | 
			
		||||
                                    exit 0
 | 
			
		||||
                                else
 | 
			
		||||
                                    echo "Health check failed. Retry \$i..."
 | 
			
		||||
                                    sleep 5
 | 
			
		||||
                                fi
 | 
			
		||||
                            done
 | 
			
		||||
                            echo "Health check failed."
 | 
			
		||||
                            exit 1
 | 
			
		||||
                        """
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								.jenkins/podTemplate.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								.jenkins/podTemplate.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Pod
 | 
			
		||||
metadata:
 | 
			
		||||
  labels:
 | 
			
		||||
    some-label: jenkins-agent
 | 
			
		||||
spec:
 | 
			
		||||
  containers:
 | 
			
		||||
  - name: kubectl
 | 
			
		||||
    image: marcin00.azurecr.io/azure-cli-kubectl:latest
 | 
			
		||||
    command:
 | 
			
		||||
    - cat
 | 
			
		||||
    tty: true
 | 
			
		||||
    volumeMounts:
 | 
			
		||||
    - name: workspace-volume
 | 
			
		||||
      mountPath: /home/jenkins/agent
 | 
			
		||||
 | 
			
		||||
  volumes:
 | 
			
		||||
  - name: workspace-volume
 | 
			
		||||
    emptyDir: {}
 | 
			
		||||
 | 
			
		||||
  nodeSelector:
 | 
			
		||||
    kubernetes.io/os: linux
 | 
			
		||||
 | 
			
		||||
  restartPolicy: Never
 | 
			
		||||
							
								
								
									
										34
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							@@ -1,34 +0,0 @@
 | 
			
		||||
pipeline {
 | 
			
		||||
    agent any
 | 
			
		||||
    stages {
 | 
			
		||||
        stage('Checkout') {
 | 
			
		||||
            steps {
 | 
			
		||||
                checkout scm
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        stage('Get credentials to Cluster') {
 | 
			
		||||
            steps {
 | 
			
		||||
                sh '''
 | 
			
		||||
                az login --identity
 | 
			
		||||
                az aks get-credentials --resource-group tst-aks-rg --name edu
 | 
			
		||||
                kubelogin convert-kubeconfig -l azurecli
 | 
			
		||||
                '''
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        stage('Apply to Cluster') {
 | 
			
		||||
            steps {
 | 
			
		||||
                sh '''
 | 
			
		||||
                kubectl apply -f namespace.yaml
 | 
			
		||||
                kubectl apply -f secret-store.yaml
 | 
			
		||||
                kubectl apply -f deploy.yaml
 | 
			
		||||
                kubectl apply -f ingress.yaml
 | 
			
		||||
                '''
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    post {
 | 
			
		||||
        cleanup {
 | 
			
		||||
            sh 'rm -f ~/.kube/config || true'
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -81,7 +81,7 @@ spec:
 | 
			
		||||
    spec:
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: api
 | 
			
		||||
          image: marcin00.azurecr.io/user-microservice:76a351710fffe2be1ae10471bc1a2f511f481126
 | 
			
		||||
          image: marcin00.azurecr.io/user-microservice:dedd162bb5375ece91f4c98c3a06029f38b409b4
 | 
			
		||||
          ports:
 | 
			
		||||
            - containerPort: 80
 | 
			
		||||
          env:
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ metadata:
 | 
			
		||||
  name: deployer-binding
 | 
			
		||||
subjects:
 | 
			
		||||
- kind: User
 | 
			
		||||
  name: daabce80-f745-413f-8377-00472517521c
 | 
			
		||||
  name: f91aef65-7d2a-4df8-a884-e33b05d54a31
 | 
			
		||||
  apiGroup: rbac.authorization.k8s.io
 | 
			
		||||
roleRef:
 | 
			
		||||
  kind: ClusterRole
 | 
			
		||||
 
 | 
			
		||||
@@ -24,8 +24,8 @@ spec:
 | 
			
		||||
  parameters:
 | 
			
		||||
    usePodIdentity: "false"
 | 
			
		||||
    useVMManagedIdentity: "true"
 | 
			
		||||
    userAssignedIdentityID: "0c2780e4-8594-4aab-8f1a-8a19f71924bd" # client_id of the user-assigned managed identity
 | 
			
		||||
    clientID: "0c2780e4-8594-4aab-8f1a-8a19f71924bd"               # client_id of the user-assigned managed identity
 | 
			
		||||
    userAssignedIdentityID: "f91aef65-7d2a-4df8-a884-e33b05d54a31" # client_id of the user-assigned managed identity
 | 
			
		||||
    clientID: "f91aef65-7d2a-4df8-a884-e33b05d54a31"               # client_id of the user-assigned managed identity
 | 
			
		||||
    keyvaultName: "dev-aks"
 | 
			
		||||
    objects:  |
 | 
			
		||||
      array:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user