├── images └── BF.30635756.1.jpg ├── Dockerfile ├── README.md ├── loadbalancer.yaml ├── index.html ├── hello-nginx.conf ├── service.yaml ├── Jenkinsfile └── game-2048.yaml /images/BF.30635756.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndersonJo/jenkins-tutorial/main/images/BF.30635756.1.jpg -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:mainline-alpine 2 | RUN rm /etc/nginx/conf.d/* 3 | ADD hello-nginx.conf /etc/nginx/conf.d/ 4 | ADD index.html /usr/share/nginx/html/ 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Jenkins Tutorial 3 | 4 | ## Introduction 5 | 6 | I am Anderson 7 | 8 | 1. Hello 9 | 2. World 10 | 11 | 추가적인 개발! 12 | 더 추가적인 개발 13 | 더더더더 추가적인 개발 14 | -------------------------------------------------------------------------------- /loadbalancer.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: nginx-service-loadbalancer 5 | spec: 6 | type: LoadBalancer 7 | selector: 8 | app: nginx 9 | ports: 10 | - protocol: TCP 11 | port: 80 12 | targetPort: 80 13 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Hello World - Nginx Docker 6 | 7 | 8 |

9 | Hello World - 조창민 Anderson ㅎ라하하하하 10 | 젠킨스 업데이트 후 11 | 젠킨스 하하하하하하하하하~ 123456789 12 | 추가추가추 13 |

14 | 15 | 16 | -------------------------------------------------------------------------------- /hello-nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | 4 | root /usr/share/nginx/html; 5 | try_files /index.html =404; 6 | 7 | expires -1; 8 | 9 | sub_filter_once off; 10 | sub_filter 'server_hostname' ''; 11 | sub_filter 'server_address' ':'; 12 | sub_filter 'server_url' ''; 13 | sub_filter 'server_date' ''; 14 | sub_filter 'request_id' ''; 15 | } 16 | -------------------------------------------------------------------------------- /service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: nginx-deployment 5 | labels: 6 | app: nginx 7 | spec: 8 | replicas: 2 9 | selector: 10 | matchLabels: 11 | app: nginx 12 | template: 13 | metadata: 14 | labels: 15 | app: nginx 16 | spec: 17 | containers: 18 | - name: nginx 19 | image: 998902534284.dkr.ecr.ap-northeast-2.amazonaws.com/jenkins-ecr:IMAGE_VERSION # ECS Container 로 수정 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 80 23 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | REGION = 'ap-northeast-2' 2 | EKS_API = 'https://4F9DFA86946EDE8E354DB0CEFF618BAD.yl4.ap-northeast-2.eks.amazonaws.com' 3 | EKS_CLUSTER_NAME='Jenkins-EKS-Cluster' 4 | EKS_NAMESPACE='default' 5 | EKS_JENKINS_CREDENTIAL_ID='kubectl-deploy-credentials' 6 | ECR_PATH = '998902534284.dkr.ecr.ap-northeast-2.amazonaws.com' 7 | ECR_IMAGE = 'jenkins-ecr' 8 | AWS_CREDENTIAL_ID = 'jenkins-aws-credentials' 9 | 10 | node { 11 | stage('Clone Repository'){ 12 | checkout scm 13 | } 14 | stage('Docker Build'){ 15 | // Docker Build 16 | docker.withRegistry("https://${ECR_PATH}", "ecr:${REGION}:${AWS_CREDENTIAL_ID}"){ 17 | image = docker.build("${ECR_PATH}/${ECR_IMAGE}", "--network=host --no-cache .") 18 | } 19 | } 20 | stage('Push to ECR'){ 21 | docker.withRegistry("https://${ECR_PATH}", "ecr:${REGION}:${AWS_CREDENTIAL_ID}"){ 22 | image.push("v${env.BUILD_NUMBER}") 23 | } 24 | } 25 | stage('CleanUp Images'){ 26 | sh""" 27 | docker rmi ${ECR_PATH}/${ECR_IMAGE}:v$BUILD_NUMBER 28 | docker rmi ${ECR_PATH}/${ECR_IMAGE}:latest 29 | """ 30 | } 31 | stage('Deploy to K8S'){ 32 | withKubeConfig([credentialsId: "kubectl-deploy-credentials", 33 | serverUrl: "${EKS_API}", 34 | clusterName: "${EKS_CLUSTER_NAME}"]){ 35 | sh "sed 's/IMAGE_VERSION/v${env.BUILD_ID}/g' service.yaml > output.yaml" 36 | sh "aws eks --region ${REGION} update-kubeconfig --name ${EKS_CLUSTER_NAME}" 37 | sh "kubectl apply -f output.yaml" 38 | sh "rm output.yaml" 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /game-2048.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Namespace 4 | metadata: 5 | name: game-2048 6 | --- 7 | apiVersion: apps/v1 8 | kind: Deployment 9 | metadata: 10 | namespace: game-2048 11 | name: deployment-2048 12 | spec: 13 | selector: 14 | matchLabels: 15 | app.kubernetes.io/name: app-2048 16 | replicas: 5 17 | template: 18 | metadata: 19 | labels: 20 | app.kubernetes.io/name: app-2048 21 | spec: 22 | containers: 23 | - image: alexwhen/docker-2048 24 | imagePullPolicy: Always 25 | name: app-2048 26 | ports: 27 | - containerPort: 80 28 | --- 29 | apiVersion: v1 30 | kind: Service 31 | metadata: 32 | namespace: game-2048 33 | name: service-2048 34 | spec: 35 | ports: 36 | - port: 80 37 | targetPort: 80 38 | protocol: TCP 39 | type: NodePort 40 | selector: 41 | app.kubernetes.io/name: app-2048 42 | --- 43 | apiVersion: networking.k8s.io/v1 44 | kind: Ingress 45 | metadata: 46 | namespace: game-2048 47 | name: ingress-2048 48 | annotations: 49 | kubernetes.io/ingress.class: alb 50 | # alb.ingress.kubernetes.io/group.name: game-2048 51 | # alb.ingress.kubernetes.io/healthcheck-path: "/health-check" 52 | alb.ingress.kubernetes.io/scheme: internet-facing 53 | alb.ingress.kubernetes.io/target-type: ip 54 | alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTP":8080}]' 55 | # alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' 56 | # alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' 57 | spec: 58 | defaultBackend: 59 | service: 60 | name: zeppelin-server 61 | port: 62 | number: 80 63 | rules: 64 | - http: 65 | paths: 66 | - path: /* 67 | pathType: ImplementationSpecific 68 | backend: 69 | service: 70 | name: service-2048 71 | port: 72 | number: 80 73 | --------------------------------------------------------------------------------