CICD 서버 구성하기(Git - Master)

이정훈·2023년 7월 3일
0

CI/CD

목록 보기
7/11
post-thumbnail
  • 자 Master-Slave는 구성했으니 이제 Git - Master 를 연결해 주자!

1. git repo 준비

  • 우리는 git ignore을 만들지 않을 것이다. 왜? repo를 private로 만들 생각이다. 팀원들 이 외에는 접근이 불가능하다!
  • 그럼 tfstate 는 어디다 저장을 하냐면 Terraform에서 사용할 수 있는 backend s3와 DynamoDB를 사용할 예정이다!
  • 우선 private git repo를 준비한다.

2. token 발급

  • 내 계에서 token을 발급한다. token을 발급한 이후에 물어보는 pw는 token값을 입력해 줘야한다.
  • git hub에 로그인할 때는 토큰값을 사용하지는 않는다!
  • 우측 상단 내 계정 → Settings → 왼쪽 맨 아래 → Developer settings → Personal access tokens → Generate new token
  • repo와 admin:repo_hook 체크


  • 여기서 나오는 token 값은 저장해야한다!

3. Jenkins 설정

  • Dashboard → Jenkins 관리 → Credentials → System → Global credentials (unrestricted) → Add Credentials
  • 2개를 추가할 것이다! token 값, github account

  • (global) → Global credentials (unrestricted) → Add Credentials

3-1 token 값

  • Kind : Secret text
  • Scope : 기본값
  • Secret : github에서 발급 받은 token 값
  • ID : 식별을 위한 값
  • Description : 설명란 패스!

3-2 git account 저장

  • Kind : Username with password
  • Scope : 기본값
  • Username : github 계정
  • Password : github에서 발급 받은 token 값
  • Secret : github에서 발급 받은 token 값
  • ID : 식별을 위한 값
  • Description : 설명란 패스!

4. GitHub add

  • github와 연결 시켜줘야한다!
  • Dashboard → Jenkins 관리 → System

  • GitHub
  • ID : 식별을 위한 값
  • API URl : 기본값
  • Credentials : token에 대한 credential(github-token)을 선택
  • Test conection으로 성공확인!

  • token 값, github account 가 저장된 것을 확인

5. Pipeline 구축

  • 새로운 아이템을 추가해준다.
  • Pipeline 으로 시작
  • ID : 식별을 위한 값

  • git webhook을 이용할 것이니깐!

  • Pipeline에서 설정해줘야한다
  • Definition : Pipeline script from SCM
  • SCM : Git
  • Repository URL : git hub url
  • Credentials : github account을 위해 작성한 credential(github-user account)
  • Branches to build : */main 으로 변경
  • Script Path : Jenkinsfile 을 사용할 것이니깐!

6. 간단한 Terraform 코드 실행

  • Terraform backend 코드를 git에 push해서 만들어 보고자 한다.

6-1 Terraform 코드 및 Jenkinsfile

  • Providers.tf
terraform {
  required_version = ">= 1.0"
}

provider "aws" {
  region = var.aws_region
}
  • terraform-backend.tf
resource "aws_s3_bucket" "cicdddterraform" {

  bucket = "cicdddterraform"

  tags = {
    "Name" = "cicdddterraform"
  }
}

resource "aws_dynamodb_table" "cicdddterraform-tf-lock" {

  depends_on   = [aws_s3_bucket.cicdddterraform]
  name         = "cicdddterraform-tf-lock"
  billing_mode = "PAY_PER_REQUEST"
  hash_key     = "LockID"

  attribute {
    name = "LockID"
    type = "S"
  }

  tags = {
    "Name" = "cicdddterraform-tf-lock"
  }

}
  • variables.th
variable "aws_region" {
  default = "ap-northeast-2"
}
  • Jenkinsfile
  • 이전에 인프라는 Slave01에서 진행하기로 했으니깐 앞쪽에 어디서 진행할 것인지 알려줘 한다!
  • Jenkins 파일에 환경 부분에서 credentials로 우리가 만들 계정의 aws configure을 변수로 지정해서 만들어 줘야 한다.
  • 여기서 중요!! Slave01에서 Terraform 코드가 실행되기 때문에 Slave01에 Terraform이 설치되어 있어야한다.
pipeline {
    agent {
        label 'Slave01'
    }

    parameters {
        string(name: 'environment', defaultValue: 'terraform', description: 'Workspace/environment file to use for deployment')
        booleanParam(name: 'autoApprove', defaultValue: false, description: 'Automatically run apply after generating plan?')
    }

    environment {
        AWS_ACCESS_KEY_ID     = credentials('AWS_ACCESS_KEY_ID')
        AWS_SECRET_ACCESS_KEY = credentials('AWS_SECRET_ACCESS_KEY')
        REGION = credentials('AWS_REGION')
    }

    stages {
        stage('Terraform - Backend') {
            when {
                expression { !params.performDestroy }
            }
            steps {
                dir('terraform-backend') {
                    script {
                        sh 'terraform init -upgrade'
                        sh "terraform validate"
                        sh "terraform plan"
                    }
                }
            }
        }
        stage('Terraform - Backend Apply') {
            when {
                expression { !params.performDestroy }
            }
            steps {
                dir('terraform-backend') {
                    script {
                        sh "terraform apply --auto-approve"
                    }
                }
            }
        }
    }
}

6-2 Jenkinsfile에 사용할 변수

  • token값 만들기 위해 사용했던 곳에서 Add Credentials를 눌러 아래와 같은 값들을 넣어주면 된다.
  • AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_ACCOUNT_ID / AWS_REGION

6-3 Slave01 - Terraform 설치

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
export PATH=$PATH:/path/to/terraform/directory
terraform --version

6-4 git에 push

  • s3, DynamoDB가 만들어졌다!

  • Jenkins가 설치 되어있는 계정과 Terraform backend가 만들 어진 계정은 다른 곳이다.
  • 내가 설정했던 aws configue 값들은 Terraform backend가 만들 어진 계정의 엑세스 값들을 넣어줬고, 권한을 이미 주었기 때문에 작동!
profile
싱숭생숭늉

0개의 댓글