채널톡 아이콘

Jenkins를 이용한 CI/CD Pipeline 구축

본 강의는 클라우드 네이티브 애플리케이션을 구성하는 4가지 핵심 요소(MSA, CI/CD, DevOps, Container) 중 하나인 CI(Continuous Integration, 지속적인 통합)과 CD(Continuous Deployment, 지속적인 배포) 파이프라인에 대한 다루는 강의입니다. 본 강의를 통해 CI/CD 도구인 Jenkins를 이용하여 로컬 환경과 클라우드 환경에 자신만의 자동화 파이프라인을 구축하고, 배포하는 데에 필요한 과정을 이해하고 실습해 볼 수 있습니다.

새소식

5 개

  • Dowon Lee님의 프로필 이미지

    안녕하세요, 이도원입니다.

    "Jenkins를 이용한 CI/CD Pipeline 구축" 강의와 "DevOps를 위한 Docker 가상화 기술 (Private Harbor Registry)" 강의에서는 원할한 Docker 컨테이너 실행을 위해 DinD (Docker in Docker) 방식으로 실습 환경을 구축하여 예제를 실행하고 있습니다.

    다만, Windows와 MacOS 환경이 각각 다르고, MacOS의 경우 Intel chip, Apple chip에 따라 구성해야 하는 도커 이미지가 달라집니다. 해당 이미지에서는 SSH 서버와 Docker 엔진이 설치 되어 있도록 구성하여, 실습 시, 여러 도커 컨테이너가 필요할 경우에 사용이 용이하도록 구성하였는데, 수강생 분들의 환경에 모두 맞도록 제작하는것에는 무리가 있는 것도 사실입니다. 그래도, 최대한 일반적인 환경에서는 무리없이 실습 할 수 있도록 도커 이미지를 업데이트 하려고 하고 있습니다.

    최근에 MacOS Apple chip에서 사용하는 docker-server:m1 이미지를 이용하여 실습 시, 아래와 같은 오류 등으로 실습이 안되는 오류가 확인 되었습니다.

    exec /docker-entrypoint.sh: invalid argument

    여러 경로로 확인해 보고 수정도 해 보았는데, MacOS Apple chip에서 사용하는 arm64 아키텍처에 Docker 컨테이너에 도커 엔진을 설치하여 사용하는 DinD 방식에서 오류가 발생되는 것 같습니다. (오류 메시지나 로그가 없어 원인을 찾는 것에는 한계가 있네요)

    해당 이미지로는 해결하기가 어렵다고 판단되어, 아래와 같이 Ubuntu 베이스에 SSH + Docker 엔진을 설치한 버전을 다시 빌드하여 배포 했습니다.

    https://hub.docker.com/repository/docker/edowon0623/docker-server/general

    위에서 발생한 문제 등은 모두 해소 되었음을 확인했습니다. Ubuntn 에서는 Docker 서비스를 기동하기 위해 아래 명령어를 먼저 실행해 주시고 실습하시면 되겠습니다.

    service start docker

    앞으로도 DinD 문제 등과 같이 실습에 관련 된 이슈가 확인되는대로 업데이트 된 실습 환경을 제공하도록 하겠습니다.

    다음 주가 연휴네요. 저 개인적으로 多事多難 했던 2024년이었습니다만, 새로운 마음으로 새로운 한해를 시작하도록 하겠습니다. 올해는 더 좋은 강의로 자주 찾아 뵙도록 하겠습니다. 새해 福 받이 받으세요.

    감사합니다.

    0
  • Dowon Lee님의 프로필 이미지

    ** ansible-server에서 windows의 K8s로의 테스트 시 참조

    ansible-server를 이용하영 Windows에 설치한 docker-desktop의 Kubernetes에 접속을 하여 테스트를 진행할 경우 아래 내용을 확인해 보시기 바랍니다.

    ansible-server에서 ssh-copy-id 명령어를 이용하여 windows에 id_rsa.pub 키 파일의 내용을 복사하려고 할 때, 정상적인 키 파일의 내용이 아닌, ECHO~ 라는 문자열이 삽이되어 버리는 경우가 있습니다. 이럴 경우는 ssh-copy-id 명령어 대신, 해당 id_rsa.pub 키 파일의 내용을 직접 복사해서 사용하셔야 합니다. 어떤 방법을 사용하던 결과로는 windows의 .ssh 폴더에 있는 authorized_keys 파일에 ansible-server에서 생성한 id_rsa.pub 키 파일의 내용이 저장되어 있으면 됩니다. 이 때 주의하실 점은, ansible-server에 로그인 한 계정과 windows 서버에 로그인하는 계정이 일치해야 하며, 해당 계정은 windows에서 관리자 권한을 가지고 있어야, docker나 kubectl 등의 명령어를 사용하는데 오류가 발생하지 않습니다. 요약하면 Windows에 로그인하는 계정과 동일한 계정명으로 ansible-server의 계정을 생성후, 키를 복사해야 합니다. 이러한 과정이 번거로우시면, ssh 접속할 때 인증 없이 접속하기 위해 ssh-copy-id 명령어를 사용하는 것이니, 이부분은 그대로 암호를 입력하면서 진행하고, ansible-playbook에서는 ansible의 hosts파일에 windows 접속 정보를 기록하여 사용하시면, playbook 실행시에는 문제없이 진행할 수 있습니다.

    아래에 실행 과정에 대해 설명한 내용을 참조하시기 바랍니다.

    • Windows OS (docker-desktop 설치, Kubernetes 실행, IP: 192.168.0.7)

    • docker-server (도커 컨테이너, IP: 172.17.0.3)

    • ansible-server (도커 컨테이너, Ansible 설치, IP: 172.17.0.4)

    1. 먼저 ansible-server에서 생성한 id_rsa.pub 키를 docker-server에 ssh-copy-id 명령어를 이용하여 복사합니다. docker-server의 키를 복사해서 ssh가 암호 없이 접속 되는 것을 확인해 보실 수도 있습니다.

    windows_ansible_step1.png

     

    1. ansible-server의 id_rsa.pub 키를 windows 서버에 복사합니다. (아래 이미지는 docker-server로 되어 있지만, ansible-server에서 진행하시면 됩니다). 다만, id_rsa.pub 키를 생성할 때의 계정과 windows의 openssh에 접속 할 계정이 동일해야 해여, 해당 windows 계정은 docker나 kubectl 명령어를 실행할 수 있는 관리자 권한을 가지고 있어야 합니다. 이 때, ssh-copy-id 명령어를 사용하여 id_rsa.pub 키 복사를 시도하면, Windows의 authorized_keys 파일에 id_rsa.pub 키의 내용이 복사되는 것이 아니라, ECHO~ 라는 문자열이 복사되어 버리는 경우가 있는데, 이럴 경우에는 해당 키를 직접 COPY-PASTE 방식으로 Windows의 authorized_keys 파일에 복사해 넣으시면 됩니다. (만약 authorized_keys 파일에 windows에 없다면, 파일도 직접 생성하시면 됩니다)

    windows_ansible_step2.png

     

    1. id_rsa.pub 키를 복사하는 작업을 하기 전에, 아래 4)번과 같이 windows에서 ssh 명령어를 이용하여 windows 서버에 접속이 되는지 확인해 보시기 바랍니다. (openssh가 설치되어 있지 않다면 설치하시기 바랍니다.)

    windows_ansible_step3.png

     

    1. 이번에는 ansible-server에서 직접 ssh 명령어로 Windows의 openssh 서버에 접속하는 테스트를 해 보시기 바랍니다.

    windows_ansible_step4.png

     

    1. 위의 2번에서 설명드린 것 처럼 id_rsa.pub 키를 복사할 때는 id_rsa.pub 키가 Windows의 계정과 동일한 계정으로 생성해야 하는데, 이 과정이 번거로우시면, 아래와 같이, ansible의 hosts 파일에 windows 접속 정보를 기록하여 사용하시기를 권장드립니다. 어차피 ssh 명령어를 이용하여 직접 접속을 시도하는 경우보다는 ansible 명령어를 이용하여 처리하는 경우가 더 많을 것이기 때문에, ssh-copy-id 작업을 진행하지 않고 직접 ansible hosts 파일에 접속 정보를 저장하여 사용하도록 합니다. 이 부분에서 ansible_user, ansible_password 항목에 Windows 접속 계정 정보 (저는 관리자 권한을 가지고 있는 사용자 계정 정보와 암호를 입력했습니다)를 저정하시면 됩니다. ansible hosts 파일 정보를 완성하였다면 ,다음 ansible 명령어를 이용하여 ping 모듈이 정상적으로 실행되는지 확인해 보시기 바랍니다.

      • ansible windows -m in_ping -u [windows 계정]

    windows_ansible_step5.png

     

    1. ansible-playbook 실행에 앞서, windows에 K8s의 manifest 파일이 저장되어 있는 위치를 확인하고, kubectl 명령어를 이용하여 Kubernetes의 리소스들을 확인해 봅니다. 아래 예제에서는 K8s의 Service 목록을 확인하고 있으며, 기본으로 생성되는 서비스외 사용자가 생성한 서비스는 보이지 않는 것을 확인하고 있습니다.

    windows_ansible_step6.png

     

    1. ansible-server에서 playbook 파일의 내용을 확인합니다. windows에 명령어를 전달할 것이기 때문에, 아래 예제와 같이 win_command 명령어를 사용하고 (MacOS의 경우 command 명령어를 사용) 실행하고자 하는 manifest 파일의 위치를 절대경로로 명시해 줍니다. playbook 파일을 실행하여 실행된 결과를 확인해 보실 수 있습니다.

    windows_ansible_step7.png

     

    1. 마지막으로 windows에서 실행한 리소스가 정상적으로 반영되었는지, kubectl 명령어를 이용하여 확인해 보실 수 있습니다.

    windows_ansible_step8.png

     

    위 내용에 대해 추가 질문사항 있으시면 질문 게시판에 글 남겨주시기 바랍니다.

    해당 문제가 고민하셨던 분들께 도움이 되었으면 좋겠습니다.

    감사합니다.

    0
  • Dowon Lee님의 프로필 이미지

    안녕하세요, 이도원입니다.

    "Jenkins를 이용한 CI/CD Pipeline 구축" 강의를 진행하면서, 실습 환경 구성에 어려움을 겪는 분들이 많아 VM으로 환경 구성을 다루는 부분에 대한 강의를 별도로 제작하여 공유하게 되었습니다. 실습 환경은 Windows 및 MacOS (Intell chip) 사용자 분들이 기존의 Docker + SSH 환경이 아니라, VirtualBox를 이용한 환경으로 VM을 구성해 보실 수 있도록 하였습니다. VM에 설치 된 Docker를 이용하여, 조금이라도 수월하게 실습 환경을 구성하였으니, 참고해 주시기 바랍니다.

    감사합니다.

    0
  • Dowon Lee님의 프로필 이미지

    안녕하세요, 이도원입니다.

    먼저 강의에 관시믈 가져주신 분들께 감사의 인사 드립니다.

    본 강의는 실습이 기본으로 함께되어야 하는 강의입니다. 특히 Jenkins 및 Tomcat이나 Docker 서버는 직접 설치하고 실습해 보시는 것을 추천드립니다.

    안타깝께도, 일부 수강생분들(특히, Windows)이 실습을 진행하기 위해 필요한 환경 구축에 어려움이 있다고 글을 남겨주셨습니다. 모든 환경에 대해 테스트해 보지 못했지만, 저희로써는 구축할 수 있는 여러 환경을 준비하여 테스트하고 관련 리소스 및 스크립트를 공유해 드렸는데, 해결 되지 못한 수강생분들께는 죄송하다는 말씀을 드립니다.

    앞서 공유해 드린, 질문답변 및 추가 영상등을 통해 Windows + SSH + Dokcer 환경에서의 실습 가이드를 제공해 드렸는데, 추가해 확인 된 사항이 있어 공유해 드립니다.

    • Windows) SSH 서버 (with 도커) 실행 명령어 (방법1)

      • docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:latest /usr/sbin/init

    • Windows) SSH 서버 (with 도커) 실행 명령어 (방법2, 위 명령어로 실행되지 않을 경우)

      • docker run -itd --name docker-server -p 10022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock edowon0623/docker:latest /usr/sbin/init

    저희가 테스트한 일부 Windows PC에서는 아래 실습 방법이 모두 정상 작동되었는데, 최근 구입한 Windows PC(WSL2 설치)에서 실습1번에 오류가 있음을 확인하였습니다. 현재 파악한 오류의 원인은 WSL2에서 iptables의 생성과정에서 아래와 같은 오류가 발생하는 거였는데, 여러 정보를 찾아서 해결해 봐도 저희가 작성한 이미지에서는 정상적으로 작동되지 않아서, 임시로 iptables의 기능을 빼고 이미지를 작성하여 테스트 해 보니, 현재까지는 큰 문제없이 실습이 가능하다고 판단되어 해당 이미지와 Dockerfile 공유해 드립니다.

    https://hub.docker.com/r/edowon0623/docker/tags -> docker pull edowon0623/docker:no_iptables

    https://github.com/joneconsulting/docker-files

    따라서, Windows 환경에서 Dind 방식 (실습 스크리브 방법1)으로 Docker 서벗가 기동되지 않으시면, 아래 명령어를 이용하여 실습해 보시기 바랍니다.

    • Windows) SSH 서버 (with 도커) 실행 명령어 (방법3)

      • docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:no_iptables /usr/sbin/init

    물론, 해당 Docker 컨테이너를 기동하신 다음에, SSH 접속 후, systemctl start docker 명령어를 실행해 주셔야 Docker 서버가 기동됩니다.

    다시 한번, 강의에 관심을 가져 주셔서 감사드리면, 더 좋은 콘텐츠를 가지고 새로운 강의도 준비하도록 하겠습니다.

    감사합니다.

    0
  • Dowon Lee님의 프로필 이미지

    안녕하세요, 이도원입니다. 

    Jenkins를 이용한 CI/CD Pipline 구축 강의에서 Nodejs로 작성 된 애플리케이션을 배포하는 방법에 대해 강의자료를 추가하였습니다. 해당 콘텐츠를 지난 9월부터 요청하셨는데, 많지도 않은 분량이었음에도 이제서야 업로드 해드립니다. 자료가 너무 늦게 업로드 되어 죄송합니다. 

    Nodejs 애플리케이션을 PM2라는 Process Manager를 통해 기동하면서, 이것을 Docker 이미지로 배포하고 실행하는 과정에 대해 설명하고 있습니다. 부족한 자료이지만 필요하신 분들에게 조금이라도 도움이 되기를 바라며, 추가 질문사항 있으신 부분은 게시판에 글 남겨주시기 바랍니다. 최근에 프로젝트 마감으로 바로바로 확인하지 못하고 있는데, 가능하면 빠르게 확인하고 답변드리도록 하겠습니다. 

    https://www.inflearn.com/course/%EC%A0%A0%ED%82%A8%EC%8A%A4-ci-cd-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8/unit/138551

    남은 2022년 한해 무탈하게 잘 마무리하시고, 하시는 일 모두 잘 성취하시길 바랍니다. 

    감사합니. 

    1

월 ₩17,600

5개월 할부 시

₩88,000