2022. 9. 7. 07:24ใSystem ์์ ์ค/DevOps
์ด ๋ด์ฉ์ ์ธํ๋ฐ - Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ ๋ด์ฉ ์
๋๋ค.
ํด๋น ๋ด์ฉ์ Code ๋ด์ฉ์ ์ด ๊ณณ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
๐ ๋ชฉ์ฐจ
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - ์๋ํ ๋๊ตฌ์ ์ฌ์ฉ
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Jenkins + Infrastructure as Code ์์ ์ฐ๋
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Jenkins + Ansible + Kubernetes ์์ ์ฐ๋
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Advenced Jenkins ์ฌ์ฉ โ - Pipeline
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Advenced Jenkins ์ฌ์ฉ โก - SonarQube
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Advenced Jenkins ์ฌ์ฉ โข - Multi Nodes
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - ์์ฉ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๋ฐฐํฌํ๊ธฐ
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - ๋ถ๋ก
๐ Jenkins์ Infrastructure as Code (IaC) ์ฐ๋
๐ฝ ๊ฐ์
๐ฆ ์๊ฐ
Infrastructure as Code (IaC)๋ ์ฝ๋ํ ์ธํ๋ผ๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ, ์๋ ํ๋ก์ธ์ค๊ฐ ์๋ ์ฝ๋๋ฅผ ํตํด ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๊ณ , ํ๋ก๋น์ ๋ํ๋ ๊ฒ์ ๋งํด์.
IaC๋ฅผ ์ด์ฉํ๋ฉด ์ธํ๋ผ ์ฌ์์ ๋ด์ ๊ตฌ์ฑ ํ์ผ์ด ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๊ตฌ์ฑ์ ํธ์งํ๊ณ , ๋ฐฐํฌํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๊ฒ ๋ฉ๋๋ค.
๋ํ, ๋งค๋ฒ ๋์ผํ ํ๊ฒฝ์ ํ๋ก๋น์ ๋ํ๋๋ก ๋ณด์ฅํ ์ ์์ด์.
IaC๋ ๊ตฌ์ฑ ์ฌ์์ ์ฝ๋ํ ํ๊ณ , ๋ฌธ์ํ ํจ์ผ๋ก ๊ตฌ์ฑ ๊ด๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๊ตฌ์ฑ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฌธ์ํํ์ง ์๊ณ , ์์๋ก ๋ณ๊ฒฝํ๋ ์ผ์ ๋ง์ ์ ์๋ ์ฅ์ ์ด ์์ด์.
๋ฒ์ ์ ์ด๋ IaC์ ์ค์ํ ๋ถ๋ถ์ด์์. ๋ค๋ฅธ ์ํํธ์จ์ด ์์ค ์ฝ๋ ํ์ผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ตฌ์ฑ ํ์ผ๋ ์์ค ์ ์ด๊ฐ ํ์ํ๋ต๋๋ค. ์ฝ๋๋ก ์ธํ๋ผ๋ฅผ ๋ฐฐํฌํ๋ค๋ ๊ฒ์ ์ธํ๋ผ๋ฅผ ๋ชจ๋์ ๊ตฌ์ฑ ์์๋ก ๋ถํํ๊ณ , ์๋ํ๋ฅผ ํตํด ๋ค์ํ ๋ฐฉ์์ผ๋ก ๊ฒฐํฉํ ์ ์๋ค๋ ๋ป์ด์์.
IaC๋ก ์ธํ๋ผ ํ๋ก๋น์ ๋์ ์๋ํํ๊ฒ ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๊ฑฐ๋, ๋ฐฐํฌํ ๋๋ง๋ค ๊ฐ๋ฐ์๊ฐ ์ง์ ์๋ฒ, ์ด์์ฒด์ , ์คํ ๋ฆฌ์ง, ๊ธฐํ ์ธํ๋ผ ๊ตฌ์ฑ ์์๋ฅผ ์๋์ผ๋ก ํ๋ก๋น์ ๋ํ๊ณ , ๊ด๋ฆฌํ ํ์๊ฐ ์์ด์ ธ์.
์ด๋ฌํ ์์
์ ์๋์ผ๋ก ์งํํ ์๋ ์๊ณ , Ansible๊ณผ ๊ฐ์ ์๋ํ ํด์ ์ด์ฉํ ์๋ ์์ด์.
1. ์์คํ
, ํ๋์จ์ด ๋๋ ์ธํฐํ์ด์ค์ ๊ตฌ์ฑ์ ๋ณด๋ฅผ ํ์ผ(์คํฌ๋ฆฝํธ)์ ํตํด ๊ด๋ฆฌ ๋ฐ ํ๋ก๋น์ ๋.
2. IT Infrastructure, Bare Metal Server ๋ฑ ๋ฌผ๋ฆฌ ์ฅ๋น ๋ฐ ๊ฐ์ ๋จธ์ ๊ณผ ๊ด๋ จ๋ ๊ตฌ์ฑ ์์ ๊ด๋ฆฌ.
3. ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํตํ ์์ ๊ด๋ฆฌ.
1. Infrastructure as Code(IaC)๋ฅผ ์ฌ์ฉํ๊ธฐ ์
IaC๊ฐ ๋์
๋๊ธฐ ์ด์ ์๋ ๋จ๋ง๊ธฐ(Laptop, Desktop ๋ฑ)์ ํตํด Server๋ฅผ ๊ด๋ฆฌํด์ค์ผ ํด์.
๋ง์ฝ ํน์ Server๋ฅผ ์ฌ์ฉ ๋ชปํ ์ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ฉด ํด๋น Server๋ฅผ ๋ผ์ด๋ด๊ณ , ์๋ก์ด Server๋ฅผ ๋์
ํด์ผ ํด์.
์ด ๋ชจ๋ ์์
์ ํฐ๋ฏธ๋ ๋ฑ์ ์ด์ฉํด์ ์ง์ ์๋์ผ๋ก ํด์ค์ผ ํฉ๋๋ค.
2. Infrastructure as Code(IaC)๋ฅผ ์ฌ์ฉํ๊ธฐ ํ
๋จผ์ Ansible๊ณผ ๊ฐ์ ์ํํธ์จ์ด๋ฅผ ๋์
ํ๊ฒ ๋๋ฉด Ansible๊ณผ Server๋ฅผ ์ฐ๋ ์์ผ์ฃผ๊ณ , Server์ ๋ชฉ๋ก(Inventory)์ Server๋ค์ ๊ด๋ฆฌํจ์ ์์ด ํ์ํ ์์
๋ค์ ์ ์ฐจ๋ฅผ ๋ด์ ๋๋ File (Play Books)๋ฅผ ์ง์ ํด ์ฃผ๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ Server ํ ๋๊ฐ ์ฌ์ฉ ๋ชปํ ์ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ฉด ํด๋น Server๋ฅผ ๋ผ์ด๋ด๊ณ , ๋ค๋ฅธ Server๋ฅผ ๊ตฌ์ถํ์ ๋, ์๋์ผ๋ก ํ์ํ ์ค์ ์ด๋, ํ๊ฒฝ๋ค์ ๊ตฌ์ฑํ ์ ์๊ฒ ํ ์ ์์ด์.
์ฃผ๋ํ๋์ด ๊ณต๋ถํด ๋ณผ Ansible์ Agnet๊ฐ ํ์ ์๋ค๋ ํน์ง์ด ์์ด์.
๊ฐ๊ฐ์ Server์ Python์ด ์ค์น๋์ด ์๋ค๋ฉด Python์ด ๊ฐ์ง๊ณ ์๋ Network Module์ ํตํด ๊ด๋ฆฌ Server์ ํต์ ์ ํ ์ ์๊ฒ ํ ์ ์์ด์.
๐ฝ Ansible
๐ฆ Ansible์ด๋?
1. ์ฌ๋ฌ ๊ฐ์ Server๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ํ๊ฒฝ ๊ตฌ์ฑ ์๋ํ ๋๊ตฌ
โ Configuration Management, Deployment & Orchestration Tool.
โ IT Infrastructure Automatically.
2. Push ๊ธฐ๋ฐ Service
3. Simple, Agentless ๋ฐฉ์
4. Ansible์ ํตํด ํ ์ ์๋ ์ผ
โ ์ค์น : apt-get, yum, homebrew ๋ฑ.
โ File & Script ๋ฐฐํฌ : copy.
โ Download : get_url, git ๋ฑ.
โ ์คํ : shell, task
๐ฆ Ansible ์ค์น
1. Ansible Server ์ค์น (RedHat ๊ธฐ๋ฐ Linux)
yum install ansible
์ ์ ์ค์น ๋ฐ Version ํ์ธ
ansible --version
2. ํ๊ฒฝ ์ค์ ํ์ผ : /etc/ansible/ansible.cfg
3. Ansible์์ ์ ์ํ๋ Host List(๋์ ์๋ฒ ๋ชฉ๋ก) : /etc/ansible/hosts
๊ฐ์์์๋ ๊ฐ์ฌ๋์ด ๊ตฌ์ถํด ๋์ docker Container๊ฐ ์์ด์.
์ฃผ๋ํ๋์ Linux ๊ธฐ๋ฐ์์ ๋์ํ๋ Synology NAS์ Docker๋ฅผ ์ด์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ Image๋ฅผ Pull ๋ฐ๋๋ก ํ ๊ฒ์ด์์.
์์ Image๋ฅผ ๋ฐ์ผ์
จ๋ค๋ฉด Container ๊ธฐ๋์ ์๋์ ๊ฐ์ด ํด ์ฃผ์๋ฉด ๋์.
sudo docker run --privileged -itd -p 20022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/ansible:latest /usr/sbin/init
๊ทธ๋ฐ ๋ค ansible Container๋ก ์ฐ๊ฒฐํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ํด ์ฃผ์๋ฉด ๋์.
ssh root@localhost -p 20022 (or docker exec -it ansible-server bash)
๋ํ ํด๋น Container ์์๋ Docker๊ฐ ์ค์น ๋์ด ์๋๋ฐ, ๊ธฐ๋์ค์ด์ง ์๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ ์์
์ด ํ์ํด์.
์์ 4๋ฒ์งธ ์ค OPTIONS๊ฐ ์๋ ๊ณณ์ --selinux-enabled=false๋ก ์์ ํด ์ฃผ์ธ์.
์ ๋ช
๋ น์ด๋ /etc/sysconfig/docker-storage์์ ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํด์ฃผ๋ ์์
์ด์์.
์์ ๊ฐ์ด Docker๋ฅผ ๊ธฐ๋ํด ์ฃผ๋ฉด ๋์.
๐ก ์ฐธ๊ณ ์ฌํญ
์ต์ด ์ฃผ๋ํ๋์ Sysnology NAS์ Docker๋ฅผ ์ด์ฉํ์ฌ Ubuntu 22.04 LTS Container๋ฅผ ํ๋ ๋ง๋ค์ด ์ฃผ์์ด์.
์ด ๊ณณ์ ssh, net-tools, systemctl๋ฅผ ๋จผ์ ์ค์นํด ์ค๊ฒ์.
Synology NAS์ SSH๋ก ๋ถ์ ๋ค Docker Container๋ฅผ ๋จผ์ ํ์ธ ํด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค ํด๋น Container ID๋ฅผ ํตํด ์ ์ํด ์ค๋๋ค.
Docker๋ฅผ ์ด์ฉํด์ Ubuntu๋ฅผ ์ด์ฉํ ๋, ๋ช ๊ฐ์ง ์ค์นํด์ค์ผ ํ๋ ๊ฒ๋ค์ด ์์ด์.
๊ทธ ๋ด์ฉ์ ๋ํด์๋ ์ด ๊ณณ์ ์ค๋นํด ๋๊ฒ์.
๋ํ, Ubuntu 22.04 LTS์ ansible์ ์ค์นํ๋ ๊ฒ์ ์ด ๊ณณ์ ์ค๋นํด ๋๊ฒ์.
๐ฆ Ansible ์ค์ ๊ณผ ์๋ ๊ณผ์
์ต์ด Docker Host Server์์ ํ์ฌ ๊ตฌ๋์ค์ธ Container์ ์ ๋ณด๋ฅผ ํ์ธํด ๋ณผ๊ฒ์.
์์ ๊ฐ์ด IP ์ ๋ณด๋ ํ์ธํ ์ ์์ด์.
Ansible Container์์ ์๋์ ๊ฐ์ด ๋์ Container ๋ค์ ๋ฑ๋กํด ์ฃผ์์ด์.
๐ฆ Ansible ๊ธฐ๋ณธ ๋ช ๋ น์ด
Ansible์์ ๊ฐ๊ฐ์ ๋์ Server์ SSH๋ฅผ ํตํด์ ์ฐ๊ฒฐ์ด ๋๋๋ก ํด์ผํด์.
์ด ๋, ๋งค๋ฒ ๊ณ์ ์ ์
๋ ฅํ๊ธฐ์๋ ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์ SSH Key๋ฅผ ์์ฑํ ๋ค Ansible Container์์ ๊ฐ๊ฐ์ ๋์ Server์ ๋ฐฐํฌ๋ฅผ ํด์ฃผ๋๋ก ํ ๊ฒ์ด์์.
์์ ๊ฐ์ด Ansible Container์์ ssh Key๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
์์ ๊ฐ์ด Ansible Container์์ ๋์ Server๋ก keygen์ ํตํด ๋ง๋ค์๋ ๊ณต๊ฐํค๋ฅผ ๋์ ์๋ฒ์๊ฒ ์ ๋ฌํด ์ฃผ์์ด์.
์ด๋ฐ ๋ค ssh๋ฅผ ์ ์ํ๋ค๊ณ ํ๋ฉด ์๋์ ๊ฐ์ด ์งํ๋์.
root ๊ณ์ ์ ์ํธ๋ฅผ ๋ฌป์ง ์๊ณ , ๋ฐ๋ก ์ ์๋๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ Ansible Container ์๊ธฐ ์์ ์๊ฒ๋ ์์ ๊ฐ์ด ์์
์ ํด ๋์์ด์.
Ansible Module - ์คํ Option
1. -i (--inventory-file) : ์ ์ฉ ๋ ๋์ Server๋ค์ ๋ํ File ์ ๋ณด.
โ ์ด Options์ ์ด์ฉํ๊ฒ ๋๋ฉด /etc/ansible/hosts๊ฐ ์๋ ์ง์ ํ ์์น์ File์ ์ฝ์ด ์ ์ฉ ๋์ Server ๊ด๋ฆฌ.
2. -m (--mocule-name) : Module ์ ํ.
3. -k (--ask-pass) : ๊ด๋ฆฌ์ ์ํธ ์์ฒญ.
4. -K (--ask-become-pass) : ๊ด๋ฆฌ์ ๊ถํ ์์น.
5. --list-hosts : ์ ์ฉ๋๋ ๋์ Server ๋ชฉ๋ก ์ ๋ณด.
6. ๋ฉฑ๋ฑ์ฑ ํน์ง
โ ๊ฐ์ ์ค์ ์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์๊ณ , ํ๋ฒ๋ง ์ ์ฉ๋๋ ์ฑ์ง.
- ์์:) echo -e "[junyharanggroup]\n172.20.10.22" >> /etc/ansible/hosts
๋ฉฑ๋ฑ์ฑ Test๋ฅผ ์ํด ์์ ๊ฐ์ด echo ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด์ ์์ ๋ด์ฉ์ /etc/ansible/hosts๋ก ์ฝ์
ํด ์ฃผ์์ด์.
์ echo ๋ช
๋ น์ด๋ฅผ ํ๋ฒ ๋ ์คํ ํ ๋ค ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด
๋์ผํ ๊ฐ์ด ๋ ๊ฐ ๋ค์ด๊ฐ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๐ฆ Ansible Module
Ansible Module ๋ฌธ์
์ต์ด Ansible Module์ ํ๋ฒ Test ํด๋ณผ๊ฒ์.
Ansible Container์ ๋ฑ๋ก๋ ๋์ Server๋ค์๊ฒ ๋ชจ๋ ping Test๋ฅผ ํ ์ ์๋ ๋ชจ์ต์ด์์.
์์ 172.17.0.5๋ ssh port๊ฐ ๋ฌ๋ผ์ ๋ฐ์ํ๋ ๋ฌธ์ ์์.
์์ ๋ช
๋ น์ด์์ all์ group์ ์ง์ ํ๋ ๋ถ๋ถ์ด์์. all์ด๋ผ๊ณ ์ฐ๋ฉด ๋ชจ๋ group(/etc/ansible/hosts)์ ์ง์นญํ๋ ๊ฒ์ด์์.
์์ ๊ฐ์ด ํน์ group ์ด๋ฆ์ ๋ฃ์ด์ Test ํด๋ณผ ์ ์์ด์.
์ด๋ฒ์๋ ๊ฐ ๋์ Server์๊ฒ ๋ช
๋ น์ด๋ฅผ ์ ๋ฌํด ๋ณด๋๋ก ํ ๊ฒ์.
free -h ๋ช
๋ น์ด๋ Memory ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ๋ช
๋ น์ด์์.
์์ ๊ฐ์ด ๋์ Server๋ค์ Memory๋ฅผ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ File์ ํ๋ฒ ์ ์กํด ๋ณผ๊ฒ์.
์ต์ด test.txt๋ฅผ touch ๋ช
๋ น์ด๋ก ๋ง๋ค์ด์ฃผ๊ณ , ์์ ๊ฐ์ด ๊ธ์๋ฅผ ์
๋ ฅํด ์ฃผ์์ด์.
๋์ Server์ /tmp์ ์ด๋ค ๋ด์ฉ๋ค์ด ์๋์ง ๋จผ์ ํ์ธํด ์ค๊ฒ์.
ํ์ฌ๋ ์๋ฌด๊ฒ๋ ์์์ ํ์ธํ ์ ์์ด์.
์ ๋ช
๋ น์ด๋ ๋ชจ๋ ๋์ Server๋ค์ group์ File์ ๋ณต์ฌํ ๊ฑด๋ฐ, "ํ์ฌ Directory์ text๋ผ๋ File์ ๊ฐ๊ฐ์ ๋์ Server์ /tmp Directory์ ๋ณต์ฌํด๋ผ" ๋ผ๋ ์๋ฏธ์์.
๋์ Server์ File์ด ๋ค์ด์จ ๊ฑธ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ Program์ ์ค์นํด ๋ณด๋๋ก ํ ๊ฒ์.
๋จผ์ Ubuntu ๋์ Server์ httpd๊ฐ ์ค์น ๋์๋์ง ํ์ธ์ ํด ์ฃผ์์ด์.
๊ทธ๋ฆฌ๊ณ , RedHat Linux ๊ธฐ๋ฐ์ธ Ansible Container๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ธํด ์ฃผ์์ด์.
์์ ๋ช
๋ น์ด๋ yum์ ํตํด์ httpd๋ฅผ ์ค์นํ๋ผ๋ ๋ช
๋ น์ด์์.
Ubuntu์์๋ yum ๋ช
๋ น์ด๊ฐ ๋จน์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ , Ansible Container๋ฅผ CentOS์ด๊ธฐ ๋๋ฌธ์ ์ ์ ์ค์น๊ฐ ๋์๋ค๊ณ ๋์์.
Ansible Container์ httd ๊ฐ ์ ์์ ์ผ๋ก ์ค์น ๋์์ด์!
๐ฆ Ansible Playbook
1. ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ด์ฉ์ ๋ฏธ๋ฆฌ ์์ฑํด ๋์ ํ์ผ
โ ์์ :) ์ค์น, ํ์ผ ์ ์ก, ์๋น์ค ์ฌ์์ ๋ฑ.
โ ์์ :) ๋ค์ ๋์ Server๋ค์ ๋ฐ๋ณต ์์
์ฒ๋ฆฌ ์.
2. Playbook
โ vim {playbook ์ด๋ฆ}.yml ์์ฑ.
โ ansible-playbook {playbook ์ด๋ฆ}.yml
โ cat /etc/ansible/hosts
yaml ํ์์ผ๋ก ์์ ๊ฐ์ด Playbook์ ๋ง๋ค์ด ์ฃผ์์ด์.
๋จผ์ ํด๋น playbook์ ์ด๋ฆ์ name์ผ๋ก ์ง์ ์ ํด ์ฃผ์๊ณ , Host ๋ถ๋ถ์๋ ๋์ Server์ IP๋ฅผ ๋ฃ์์๋ ์๊ณ , /etc/ansible/hosts์ ๋ฑ๋ก๋์ด ์๋ group ์ด๋ฆ์ ๋ฃ์ ์๋ ์๋๋ฐ, ์ฃผ๋ํ๋์ group ์ด๋ฆ์ ๋ฃ์ด์ฃผ์์ด์.
tasks์ ์ด๋ค ์์
์ ํ ๊ฒ์ธ์ง ๋ช
์๋ฅผ ํ ๊ฒ์ธ๋ฐ, ์์
์ด๋ฆ์ name์๋ค๊ฐ ์
๋ ฅํด ์ฃผ๊ณ , ํด๋น ์์
์ ๋์ ์์น๋ฅผ path์ ์ง์ ํด์ฃผ๊ณ , block์ ๋ฐ๋์ |๋ก ์์์ ํด์ฃผ์ด์ผ ํด์. ๊ทธ๋ฆฌ๊ณ , ์์
๋ด์ฉ์ ์์ฑํด ์ฃผ์์ต๋๋ค.
playbook์ ์คํํ๋ ค๊ณ ํ๋๋ ์์ ๊ฐ์ด ๋ฌธ์ ๊ฐ ์๋ค๊ณ ๋์์.
yaml ํ์์ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ๊ต์ฅํ ์ค์ํด์. ๋ค์ฌ์ฐ๊ธฐ ๋ฌธ์ ๋ก ๋ฌธ์ ๊ฐ ์์๋ ๊ฒ์ด์์.
์์ ๊ฐ์ด ์์ ์ ํด์ฃผ๊ณ , ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํด ์ค๊ฒ์.
์์ ๊ฐ์ด playbook์์ ์
๋ ฅํ ๋ด์ฉ์ด ์
๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ ๋ฉฑ๋ฑ์ฑ์ ๋ํด Test ํด๋ณผ๊ฒ์.
๋ค์ ํ๋ฒ playbook์ ๋์์์ผ ๋ณด์์ด์.
๋์ Server์์ ๋ค์ ํ์ธํด ๋ณด๋ฉด ํด๋น ๋ด์ฉ์ด ์ถ๊ฐ๋์ด ์๋ ๊ฒ์ด ์๋๊ณ , ํ๋๋ง ์
๋ ฅ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๋ ๋ค๋ฅธ Test๋ฅผ ์งํํด ๋ณผ๊ฒ์.
์์ ๊ฐ์ด yaml์ ํ๋ ๋ ๋ง๋๋๋ฐ, ์ด๋ฒ์๋ copy๋ฅผ ํตํด ansible์ ~/(home Directory) ์์ sample.txt File์ ๊ฐ๊ฐ์ ๋์ Server๋ค์ /tmp ์์ ๋ณต์ฌํ๊ณ , ํด๋น File์ ์์ ์ฃผ๋ฅผ root๋ก ํ๊ณ , ๊ถํ์ 644(rw-r-r)๋ก ์ฃผ๊ฒ ๋ค๋ ์๋ฏธ์์.
์ด ์ ์ ๋ง๋ค์๋ test.txt File ์ด๋ฆ์ sample.txt๋ก ๋ฐ๊พธ์ด ์ฃผ์์ด์.
๋์ Server์๋ ํ์ฌ sample.txt๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์คํ์ ํ๋๋ฐ, ์์ ๊ฐ์ด ์คํจ๋ฅผ ํ์์ด์.
์๋ฌด๋๋ playbook-sample1์ ์คํ๊ฐ ์๋ ๊ฑฐ ๊ฐ์์
์ด ๋ถ๋ถ์ modE์ E ๋ถ๋ถ์ ์๋ฌธ์๋ก ๋ฐ๊ฟ์ ๋ค์ ์งํํด ๋ณผ๊ฒ์.
์ ์ ์งํ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๋์ Server๋ฅผ ํ์ธํด ๋ณด๋ sample.txt๊ฐ ์๊ธด๊ฑธ ํ์ธํ ์ ์์ด์.
์์ ์ฃผ๋ root์ด๊ณ , 644(rw-r-r)๋ก ๊ถํ์ด ์ ์ฉ ๋์์ด์!
์ด๋ฒ์๋ Program์ ๋ด๋ ค๋ฐ๊ธฐ ํ๋ ์์ ๋ฅผ ์งํํด ๋ณผ๊ฒ์.
์ด๋ฒ์๋ tasks์ name์ด ๋ ๊ฐ๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์์ด์.
์ด ์๋ฏธ๋ ์์
์ ๋ ๊ฐ์ง๋ฅผ ํ๊ฒ ๋ค๋ ์๋ฏธ์์.
๋จผ์ ์ฒซ๋ฒ์งธ ์์
์ /opt/tomcat9 ์ด๋ผ๋ Directory๋ฅผ ๋ง๋๋ ๋ถ๋ถ์ด๊ณ , ๊ถํ์ 755(rwxr-xr-x)๋ฅผ ์ฃผ๊ฒ ๋ค๋ ์๋ฏธ์์.
๊ทธ๋ฆฌ๊ณ , ๋๋ฒ์งธ์์๋ url์์ tar File์ ๋ด๋ ค ๋ฐ์๊ฑด๋ฐ, ๋ฐ์ ์์น๋ /opt/tomcat9 ์ด๋ผ๋ ์๋ฏธ์ด๊ณ , ์ด ์ญ์ ๊ถํ์ 755(rwxr-xr-x)๋ก ํ ๊ฒ์ด๋ผ๋ ๋ป์ด๊ณ , ํด๋น File์ด ์ ์(์, ๋ณ์กฐ ์ฌ๋ถ)์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด checksum์ ์ด์ฉํด์ ํ์ธํ๊ฒ ๋ค๋ ์๋ฏธ์์.
๋จผ์ ๋์ Server์ ํด๋น Directory๊ฐ ์๋์ง ํ์ธํด ๋ณด์์ด์.
๋์ ํ๋๋ ์ฑ๊ณตํ๊ณ ํ๋๋ ์คํจํ์์ด์.
์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋ ๋์ Server์๋ ์์ ๊ฐ์ด tomcat ์ค์น ์์ถ File์ด ์๋ ๊ฒ์ ํ์ธํ์ค ์ ์์ด์.
๐ฝ Ansible๊ณผ Jenkins
๐ฆ ์ฐ๋ํ๊ธฐ
์ด๋ฒ์๋ Jenkins์์ Ansible์ ์ฐ๋ํด ๋ณผ๊ฒ์.
์ต์ด Jenkins ๊ด๋ฆฌ์์ ์์คํ
์ค์ ์ผ๋ก ๋ค์ด๊ฐ ์ค๊ฒ์.
๊ธฐ์กด์ ์ค์ตํ๋ ๋ด์ฉ์ ์ง์ฐ๊ณ , ์๋กญ๊ฒ ์ด ๋ถ๋ถ์ ์
๋ ฅ์ ํด ์ค๊ฒ์.
๊ทธ ์ ์ Ansible Container์ IP๋ฅผ ํ์ธํด ์ฃผ์์ด์.
์์ ๊ฐ์ด ์
๋ ฅ์ ํด์ฃผ๊ณ , Test Configuration์ ๋๋ฌ์ฃผ๋ Success๊ฐ ๋ฌ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๐ฆ Jenkins + Ansible Playbook ์ฌ์ฉํ๊ธฐ
์ต์ด ์์ ๊ฐ์ด ์๋ก์ด Item์ ํ๋ ์์ฑํ ๊ฒ์.
์ด์ ์ Docker Project์์ ๋ช๊ฐ์ง๋ง ์์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Copy Item์์ Docker Project Item ๋ด์ฉ์ ๊ฐ์ ธ์ค๋๋ก ํ ๊ฒ์.
๋น๋ ํ ์กฐ์น์์ ๊ธฐ์กด์ ์์๋ ๋ด์ฉ์ ๋ชจ๋ ์ง์์ค๊ฒ์.
๊ทธ๋ฐ ๋ค Send Build ... ๋ฅผ ์ ํํด ์ค๋๋ค.
Name ๋ถ๋ถ์ Jenkins ๊ด๋ฆฌ ์์คํ
์ค์ ์์ SSH ๋์ Container๋ฅผ ์์ ๊ฐ์ด ansible-host๋ผ๊ณ ํ๋ ๋ง๋ค์ด ์ฃผ์์ด์. ๊ทธ๊ฑธ ์ ํํด ์ฃผ๊ณ ,
Source files์๋ /taget์ ๋ชจ๋ war File์ ์ง์ ํ๊ณ , Remove prefix์๋ target Directory๋ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ง์ ํด์ ๋ณต์ฌ๋์ง ์๋๋ก ํด์ฃผ์์ด์.
Remote Directory๋ Ansible Container์ war File์ ์ด๋์ ์ ์ฅํ ๊ฑด์ง๋ฅผ ์ ํ๋ ๊ณณ์ธ๋ฐ, ssh๋ฅผ root๋ก ์ ์ํ๊ฒ ๋๋ฉด ๋ฐ๋ก /root Directory๋ก ์ ์ํ๊ฒ ๋์. ๊ทธ๋์ ๊ทธ๋ฅ ๊ทธ ๊ณณ์ ์ง์ ํด ์ค ๊ฒ์ด์์.
์ด๋ ๊ฒ๋ง ํ๊ณ , ์ผ๋จ Apply -> Save ํด์ค๊ฒ์.
Build๋ฅผ ํด๋ณด๋ ์ ์์ ์ผ๋ก Build๊ฐ ๋์์ด์.
Ansible Container์ war File์ด ์๊ธด๊ฑธ ํ์ธํ ์ ์์ด์.
Ansible Container์ ์๋กญ๊ฒ playbook์ ๋ง๋ค์ด ์ฃผ์์ด์.
์ด playbook์ war File์ด Jenkins๋ฅผ ํตํด ์ค๋ฉด ๊ทธ๊ฑธ ๊ฐ์ง๊ณ , docker Image๋ฅผ buildํ๋ ๋ช
๋ น์ด๊ฐ ๋ค์ด๊ฐ ์๋ ๊ฒ์ ์ ์ ์์ด์.
๋ง์ง๋ง์ผ๋ก Target Directory๋ root Directory๋ก ์ค์ ์ ํด์ฃผ๋ ๊ฒ์ด์์.
hosts๋ ๋ชจ๋ group๋ฅผ ๋์์ผ๋ก ํ์ด์.
/root Directory์ Dockerfile์ ๋ง๋ค์ด ์ฃผ๋๋ฐ ์์ ๊ฐ์ด ๋ง๋ค์ด ์ฃผ์์ด์. tomcat 9.0 Version์ ๊ฐ์ง๊ณ , ํ์ฌ Directory์ ์๋ hello-world.war File์ docker๋ฅผ ๋ง๋ค์ด ๊ทธ ์์ /usr/local/tomcat/webapps์ ๋ณต์ฌํด๋ผ ๋ผ๋ ๋ด์ฉ์ด์์.
์ด๋ฒ์๋ /etc/ansible/hosts๊ฐ ์๋ ์์ ๊ฐ์ด hosts๋ฅผ ๋ง๋ค์ด Ansible Container ์๊ธฐ ์์ ์ ๋ฑ๋กํด ์ฃผ์์ด์.
์์์ ๋ง๋ playbook์ ์คํ ์์ผ ๋ณด์์ด์.
-i hosts๋ผ๋ ๋ถ๋ถ์ /etd/ansible/hosts๋ฅผ ์ธ ๊ฒ์ด ์๋๋ผ ์ฃผ๋ํ๋์ด ์์์ ๋ง๋ hosts๋ฅผ ์ฐ๊ฒ ๋ค๋ ์๋ฏธ์์.
์์ ๊ฐ์ด docker image๋ง ์ ์์ ์ผ๋ก ๋ง๋ค์ด์ง ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ Docker Container๊น์ง ์์ฑํด ๋ณผ๊ฒ์.
์์์ ๋ง๋ cicd-project-ansible ์ด๋ผ๋ ์ด๋ฆ์ image๋ฅผ ๊ฐ์ง๊ณ , Container๋ฅผ ๋ง๋๋ ๋ช
๋ น์ด๋ฅผ ์ถ๊ฐํด ์คฌ์ด์.
-d ๋ Background์์ ์์
์ ํ๋ผ๋ ์๋ฏธ์ด๊ณ , --name Options ๋ค์ ํด๋น Container ์ด๋ฆ์ ๋ฃ์ด์ฃผ๊ณ , Port Fowardingํ ๋ด์ฉ์ด ์๋ค๋ฉด -p Options ๋ค์ ์
๋ ฅ์ ํด์ฃผ๊ณ , Image ์ด๋ฆ์ ๋ฃ์ด์ฃผ์์ด์.
ํ์ฌ ์กด์ฌํ๋ Docker Image ๋ค์ ํ์ธํด ์ฃผ์๊ณ , ๊ธฐ๋์ค์ธ Container๊ฐ ์๋์ง ํ์ธํด ์ฃผ์์ด์.
์์ ๊ฐ์ด ์์
์ด ์ฑ๊ณตํ์์ด์!
Docker Container ๊น์ง ์ ์์ ์ผ๋ก ๋ง๋ค์ด ์ง ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด์ ์ ๋ด์ฉ์ด ์๋ํ ์ฒ๋ฆฌ๊ฐ ๋๋๋ก ํ๊ธฐ ์ํด Jenkins์ ํ์ ๋น๋ฆฌ๋ ค๊ณ ํด์.
๊ทธ ์ ์ ๋ง๋ค์ด์ง Image์ Container๋ ๋ชจ๋ ์ง์์ฃผ๋๋ก ํ ๊ฒ์.
๋จผ์ Docker Container๋ฅผ ์ค์ง์ํค๊ณ , ์ญ์ ํด์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค Image๊น์ง ์ญ์ ํด ์ค ๋ชจ์ต์ด์์.
์ ์ฒ๋ฆฌ๊ฐ ๋์๋์ง ํ์ธํด ์ฃผ์์ด์.
ํด๋น Item์ ๊ตฌ์ฑ์ ๋ค์ด์์ Exec command์ ์๋ ๋ด์ฉ์ ์ถ๊ฐํด ์ฃผ์์ด์.
ansible-playbook -i hosts first-devops-playbook.yml
์ด์ ์ ์ฅ์ ํ ๋ค ๋ค์ Build๋ฅผ ํด ๋ณผ๊ฒ์.
์์
์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋ฌ๋ค๊ณ ํด์!
Docker Image๋ Container๋ ์ ์์ ์ผ๋ก ์์ฑ๋ ๊ฑธ ํ์ธํ ์ ์์ด์!
์ด๋ ๊ฒ Web Service๋ ์ ์์ ์ผ๋ก ๊ตฌ๋๋๋ ๊ฑธ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ Github์์ push even๊ฐ ๋ฐ์ํด์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ค๋ฉด ์๋์ผ๋ก Build๊ฐ ๋๊ฒ ์ค์ ํด ์ค๊ฒ์.
ํด๋น Project ๊ตฌ์ฑ์ Poll SCM์ ์์ ๊ฐ์ด ์ค์ ์ ํด ์ฃผ์์ด์.
์์ 5๋ฒ์งธ, 11 ~ 12๋ฒ์งธ Code๋ฅผ ์ฝ๊ฐ ์์ ํด ๋ณด์์ด์.
Github์ push๋ฅผ ํด ๋ณผ๊ฒ์!
์ง๊ธ ๋น๋๋ฅผ ๋๋ฅด์ง ์์์ง๋ง, ์์ ๊ฐ์ด ์๋์ผ๋ก Build ์์
์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
ํ์ง๋ง Build๋ ์คํจํ๊ณ ๋ง์์ด์.
์คํจํ ์ด์ ๋ ๊ธฐ์กด์ ๊ธฐ๋์ค์ธ Docker Container๊ฐ ์์๋๋ฐ, ๋์ผํ ์ด๋ฆ์ผ๋ก Container๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ฌธ์ ์์.
์์ ๊ฐ์ด Docker Container๋ฅผ ์ค์งํ๊ณ , ์ญ์ ํ๊ณ , Image ๋ํ ์ญ์ ํ๋ ๋ช
๋ น์ด๋ฅผ ์ถ๊ฐํด ์ฃผ์์ด์.
ignore_errors: yes๋ ๋ง์ฝ ์ค์ง ๋ช
๋ น์ด๋ฅผ ๋ด๋ ธ๋๋ฐ, ์ค์งํ ๋์ Container๊ฐ ์์ผ๋ฉด Error๊ฐ ๋ฐ์ํ๊ฒ ๋์. ์ด ๋ ์ด Error๋ฅผ ๋ฌด์ํ๊ฒ ํด์ ์์
์ ๊ณ์ ์ด์ด ๋๊ฐ ์ ์๊ฒ ํ๊ธฐ ์ํด ์ถ๊ฐํ ๋ถ๋ถ์ด์์.
Code๋ฅผ ์ด์ง ์์ ํด์ ๋ค์ push๋ฅผ ํด์ฃผ์์ด์.
์์
์ด ์ฑ๊ณตํ์์ด์!
Docker Image์ Container๋ ๋ง๋ค์ด์ง์ง ์ผ๋ง ์๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
Web Service๋ ๊ธ์๊ฐ ๋น๋ก ๊นจ์ก์ง๋ง, ์ ์ ๊ตฌ๋ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ด์!
๐ฆ Use Ansible Docker Image Management
์ด๋ฒ์๋ ์ฃผ๋ํ๋์ด ์์
ํ Docker Image๋ฅผ Docker Hub์ Upload ํ๋ ์์
์ ํด ๋ณผ๊ฒ์.
ํ์ฌ ์ฃผ๋ํ๋์ Docker Hub Repository์๋ ์๋ฌด๊ฒ๋ ์์ด์.
์ต์ด ์์ ๊ฐ์ด Docker Hub ๊ณ์ ๋ช
์ ์ด์ฉํ Image๋ฅผ ํ๋ ๋ง๋ค์ด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค docker hub์ Loginํ๊ธฐ ์ํด ์์ ๊ฐ์ด ์์
์ ํด ์ฃผ์์ด์.
์์ ๋ฐฉ๋ฒ์ผ๋ก Image๋ฅผ Docker Hub์ ์ฌ๋ ค์ค ์ ์์ด์.
๋ค์ Docker Hub๋ฅผ ํ์ธํด ๋ณด๋ ์์ ๊ฐ์ด Image๊ฐ ์ฌ๋ผ๊ฐ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ ์์
์ ์๋ํ ํ๊ธฐ ์ํด ์๋ก์ด playbook์ Ansible Container์ ๋ง๋ค์ด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค playbook์ ์คํ ์์ผ ์ฃผ๋ ์์ ๊ฐ์ด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋์์ด์!
Docker Hub์๋ Image๊ฐ ์ ์์ ์ผ๋ก ์ฌ๋ผ๊ฐ์ด์!
์ด๋ฒ์๋ Container๋ฅผ ์์ฑํ๋ Playbook ์์
์ ํด๋ณผ๊ฒ์.
์ต์ด ์์ ๊ฐ์ด ๊ธฐ์กด์ ๋ง๋ค์๋ playbook File ์ด๋ฆ์ ๋ณ๊ฒฝํด ์ฃผ์์ด์.
์์ ํ ๋ด์ฉ์ Docker Hub์์ Image๋ฅผ Pull ๋ฐ์ ์ฌ ์ ์๊ฒ ์ฒ๋ฆฌ๋ฅผ ํด ์ฃผ์๊ณ , Docker๋ฅผ ๊ธฐ๋ํ ๋, Image ์ด๋ฆ์ ์ฃผ๋ํ๋์ ๊ณ์ ๋ช
์ ๋ถํ์ค ๊ฒ์ด์์.
๊ธฐ์กด์ ๋ฐ์๋ Image๋ ์ผ๋จ ์ ๊ฑฐ๋ฅผ ํด ์ฃผ์์ด์.
Docker๊ฐ ์ค์น๋ CentOS ๊ธฐ๋ฐ Container๋ฅผ ๋์ Server๋ก Testํ๊ธฐ ์ํด ์ค๋นํด ๋์๊ณ , Docker๋ฅผ ๊ธฐ๋์์ผ ์ฃผ์์ด์.
ํด๋น Container์๋ ๊ธฐ๋์ค์ธ Container๋, Image๋ ์์ด์.
์ค๋น๋ ๋์ Container๋ ์์ ๊ฐ์ IP๋ฅผ ์ฐ๊ณ ์๊ณ , Ansible์ Customํ๊ฒ ๋ง๋ hosts ํ์ผ์ ๋ฑ๋ก์์ผ ์ค๊ฒ์.
์์ ๊ฐ์ด ๋ฑ๋ก์ ํด ์ฃผ์์ด์.
๋จผ์ ์งํํ๋ ค๊ณ ํ๋ ์์
์ Docker Image๋ฅผ ๋ง๋ค๊ณ , Pushํ๋ ๋ช
๋ น์ด๊ฐ ๋ค์ด๊ฐ playbook์ ์คํ์ํฌ๊ฑด๋ฐ, hosts์ ๋ฑ๋ก๋ ๋ชจ๋ Server์ ํด๋น ์์
์ด ๋จน์ง ์๊ณ , Ansible Container๋ง ํด๋น ๋ช
๋ น์ด๊ฐ ๋จน๊ฒ ํ๊ธฐ ์ํด --limit Option๊ณผ ํจ๊ป Container IP๋ฅผ ๋ฃ์ด์ฃผ์์ด์.
์์ ๊ฐ์ด Ansible Container์์๋ง ์์
์ด ์งํ๋์๊ณ , Image๋ฅผ ๋ง๋ค๊ณ , Docker Hub์ Pushํด ์ฃผ๊ณ , ์ง์์ฃผ๋ ์์
์ ํด ์ฃผ์์ด์.
Image๊ฐ ๋ฐฉ๊ธ ์ฌ๋ผ์จ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ ์๋ก ๋ง๋ค์๋ Docker Container์ ๊ธฐ์กด์ ๊ตฌ๋์ค์ด๋ Docker Container ์ค์ง, ์ญ์ Image ์ญ์ ๋ฅผ ํ๊ณ ๋ ๋ค Docker Hub์์ Image๋ฅผ ๋ฐ๊ณ , ๊ตฌ๋ ์ํค๋ ์์
์ด ๋ค์ด๊ฐ Playbook์ ์คํ ์์ผ ๋ณด์์ด์.
์์ Error๊ฐ ๋ฐ์ํ ๊ฒ์ ์ค์ง, ์ญ์ ํ ๋์์ด ์๊ธฐ ๋๋ฌธ์ Error๊ฐ ๋ฐ์ํ๋๋ฐ, Ignore_Error๋ฅผ yes๋ก ์ฃผ์๊ธฐ ๋๋ฌธ์ ์ ์์ธ ๊ฒ์ด์์.
์์ ๊ฐ์ด Docker Container์ ์ ์์ ์ผ๋ก Image์ Container๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
ํด๋น ์์
์ ๋ค์ ์ค์ํ๊ฒ ๋๋ฉด Docker Container์ Image๊ฐ ์กด์ฌํ๊ณ ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ Error ์์ด ์ฒ๋ฆฌ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๐ฆ Use Ansible Playbook Create Docker Container
Jenkins๋ฅผ ์ด์ฉํด์ ์์ ์์
๋ค์ ์๋ํ ํด ๋ณด๋๋ก ํ ๊ฒ์.
๋จผ์ ์๋ก์ด Item์ ๋ง๋ค์ด ์ฃผ๋๋ก ํ ๊ฒ์.
Exec command ๋ถ๋ถ์ ์์์ Testํ ๋ช
๋ น์ด๋ค์ ๋ฃ์ด์ค๊ฒ์.
๊ทธ ์ธ์ ๋ด์ฉ๋ค์ ๋ฐ๋์ง ์์ ๊ฒ์ด์์.
Code๋ฅผ ์ด์ง ๋ ์์ ํ๊ณ , Push๋ฅผ ํด ์ฃผ์์ด์.
์์
์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ ๋์์ด์!
Docker Container์๋ ์ ์์ ์ผ๋ก ์์
์ด ์๋ฃ ๋ ๊ฑธ ํ์ธํ ์ ์์ด์.