EKS CI/CD環境の実装(1)


n/a.環境


Github,jenkins,argoCDを用いてCI/CD環境のEKS構築を行った.
CIの場合はGithub->Jenkins->AWS ECRです.
CDの場合はargoCD->AWS EKSを使用して行います.
筆者の構成環境はvmware-ubuntu-dockerで行います.

CIの実装


1.Jenkinsのインストール


Dokrojenkinsをダウンロードします.
sudo docker run -itd --name jenkins -p 8080:8080 -p 50000:50000 -v /docker/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Seoul -u root jenkins/jenkins:latest

2.Jenkins容器にDocker、Kustomizeを取り付ける

  • Docker:Docker in Dockerが必要です.△しかし、安全上の理由から、埠頭側はこのようなことをお勧めしません.
  • Kustomize:クーバーネス構成をカスタマイズするツール
  • # docker 시작 명령어, 종료 명령어
    docker start (컨테이너 이름 or ID 앞부분)
    docker stop (컨테이너 이름 or ID 앞부분)
    
    # Jenkins container 접속 명령어  
    docker exec -it jenkins bash 
    
    # docker 설치 명령어  
    curl -fsSL get.docker.com -o get-docker.sh 
    sh get-docker.sh 
    
    # 확인 명령어 
    docker ps 
    
    # kustomize 설치 명령어  
    curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash 
    mv kustomize /usr/local/bin 
    kustomize version 

    ここまでkustomizeにインストールされていました.

    3.ECRの作成


    AWS ECR>をクリックしてリポジトリを作成し、そのまま作成します.

    作成が完了したら、作成したリポジトリのURLをコピーします.

    4.Jenkins環境の構成


    Jenkinsの環境を構成するには、Sever IP:8080接続を使用します.
    Jenkinsの初期パスワードはcatコマンドで探せばいいです.筆者にとって、/var/jenkins home/secrets/initialAdminPasswordのパスにあります.
    cat /var/jenkins_home/secrets/initialAdminPassword
    Jenkinsの画面で、Deshboard->Jenkins管理->プラグインマネージャからdocker-build-step、docker-plugin、docker-pipeline、AWS ECRをダウンロードします.


    Jenkinsが使用する認証情報を登録します.
    Deshboard->jenkins管理->管理資格証明に移動します.

    Globalをクリックし、左側のAdd Creationsをクリックすると、次の画面が出力されます.

    kindをAWS証明書に変更し、IDは任意に指定できます.アクセスキー、SecretKeyはECRポリシー付きAWS IAMのアクセスキーと秘密鍵を入力すればよい.
    もう一度この仕事をして、今度はGithubの資格名に近づくためです.
    - kind : Username with password
    - Username : github name
    - password : github password
    - ID : 임의 지정하면 된다.

    5. Jenkinsfile


    Jenkinsfileを作成します.Vscodeを開き、ファイル名をJenkinsfileとします.その後の作り方は正式な書類を参考にした方が良いでしょう.
    node {   
         // git 연동
         stage('Clone repository') { 
             checkout scm
         }     
         
         // 도커 이미지 build
         stage('Build image') { 
             app = docker.build("YOUR ECR URL")
         }
         
         // ecr repo 에 도커 이미지 push 
         stage('Push image') {  
             sh 'rm -f ~/.dockercfg ~/.docker/config.json || true'
             
             docker.withRegistry('YOUR_REGISTRY', 'YOUR_CREDENTIAL'){
                 app.push("${env.BUILD_NUMBER}")
             }         
         }
    
         // updated docker image 태그를 git push 
         stage('Deploy') { 
             // 사전 준비
             sh("""
                git config --global user.name "Your Name"
                git config --global user.email "[email protected]"
                git checkout -B master
             """)
             
         }
              
    }
    このようにコード生成ファイルを記述します.他に必要なところがあれば、公式ドキュメントやグーグルで追加することができます.

    6. Dockerfile

    FROM ubuntu:18.04
    
    RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
    
    RUN apt upgrade -y && apt-get update -y && apt-get install nginx -y
    
    RUN echo "/ndaemon off;" >> /etc/nginx/nginx.conf
    
    CMD ["nginx"]
    
    EXPOSE 80
    ドッキングファイルは、非常に簡単なnginxを実行するファイルから構成されています.

    7.github repoを作成しjenkinsをバインドする


    githubに移動したら、レジストリを作成し、Dockerfileを最初のファイルにアップロードします.gitコマンドは後で整理します.

    Githubにアップしたら今Jenkinsに行きます
    新規生成でpipelineを選択

    Advance Project Optionsに移動し、DefinitionをSCMに変更すると、SCMはGitおよび次のGITリポジトリURLと事前に作成した証明書を選択します.

    gitに設定されているbranchとjenkinsfileの位置を指定すると終了します.

    8.確認


    確認したら、「Bulid Now」をクリックして自動的に生成します.


    これでCiは終わり、現在CDもCiCDが完成しています.