CI/CD 그대로 따라하기 3편

강재민·2022년 6월 9일
0

Jenkins로 Docker 실행하기


Docker빌드에 사용할 가상머신 추가하기

터미널창에서..

exit


이렇게 가상머신 밖으로 나온다.
그리고 가상머신 1대를 추가하기위해 Vagrantfile을 수정한 후 Vagrant up을 다시 해줄 것이다.


23번쨰 줄에 붙여넣기 하시면 됩니다.

config.vm.define "docker" do |ubuntu|
        ubuntu.vm.box = "ubuntu/focal64"
        ubuntu.vm.hostname = "docker"
        ubuntu.vm.network "private_network", ip: "192.168.59.12"
        ubuntu.vm.provider "virtualbox" do |vb|
                vb.name = "docker"
                vb.cpus = 2
                vb.memory = 2000
        end
    end

줄간격이 중요하니까 다시 한 번 보고 비교해보세요

ctrl + s 눌러서 저장하고 나오시면 됩니다.
그리고 다시 터미널창으로 와서..

vagrant up

vagrant status

이렇게 가상머신이 3개 올라와 있는거 확인하시고 다음 단계로 넘어가시면 됩니다.


Docker 가상머신에 Docker 설치

vagrant ssh docker

https://velog.io/@repush/Docker-%EC%84%A4%EC%B9%98%ED%95%98%EB%8A%94%EB%B2%95
도커 설치하는 법..

위 링크를 마무리하고나서 아래 명령어를 실행시켜보자.

docker ps

다음과 같은 결과가 나오면 정상적으로 설치가 된것이다.


docker로 간단한 실습

먼저, jenkins 가상머신에서..

cp /var/lib/jenkins/workspace/Deploy-to-Tomcat-with-Maven/webapp/target/webapp.war /tmp
scp /tmp/webapp.war 192.168.59.12:/tmp

아래와같은 질문이 나올것이다.
yes 하고
passwordvagrant를 입력하면 된다.

그리고 docker 가상머신으로 와서..
아래 명령어를 입력해준다.

### tomcat 이미지를 다운받는 명령어이다.

docker pull tomcat:9.0-jre11-openjdk
cd ~
mkdir myapp
cd myapp/
cp /tmp/webapp.war .
ls

이렇게 webapp.war 파일이 있으면 된다.

그리고 Dockerfile을 편집해주기위해 아래 명령어를 입력한다.

vi Dockerfile

i를 눌러서 편집기능을 활성화 하고 아래 텍스트를 복사붙여넣기 하고
esc 누르고 :+ wq 로 저장해서 나온다.

FROM tomcat:9.0-jre11-openjdk

COPY webapp.war /usr/local/tomcat/webapps
docker build -t myapp .
docker run -d -p 8080:8080 myapp
curl localhost:8080/webapp/


실습했던 이미지와 컨테이너 삭제

docker rm -f $(docker ps -aq)
docker rmi $(docker images -q)

jenkins에서 방금 실습내용 똑같이 실습하기

크롬창에 192.168.59.10:8080 으로 접속해서 젠킨스 대쉬보드로 접속한다.


플러그인 설치

왼쪽 메뉴에서 Jenkins 관리 클릭

오른쪽에 플러그인 관리 클릭

왼쪽에서 두 번째 설치가능클릭

오른쪽 위에 Search에서 publish over ssh 라고 검색

왼쪽 체크박스 활성화 해주고 Install without restart클릭

성공 확인하면 플러그인 설치가 완료 된것이다.

이제 대시보드로 이동해서..

Deploy-toTomcat-with-Maven이름을 클릭

오른쪽에 프로젝트 중지하기클릭


플러그인을 사용해서 docker ssh 계정 추가

대쉬보드로 와서.. 왼쪽 메뉴에 Jenkins관리 클릭

시스템 설정 클릭

스크롤을 맨 아래로 내려서 아래 사진과 같은 내용을 찾아보자

왼쪽 아래 추가 클릭

아래 사진과 같이 작성해준다

항목설정값
Namedocker-host
Hostname192.168.59.12
Usernamevagrant

오른쪽 아래 고급 클릭

아래 항목 찾아서 체크박스를 활성화 해준다.

Passphrase / Passwordvagrant라고 입력해준다.

스크롤을 맨 아래로 내려서 Test Configuration 클릭
Success가 나오면 된거다.

Apply누르고 저장 클릭


docker repository 생성

https://hub.docker.com/
위 링크를 타고 들어가서

오른쪽 위에 Register클릭

회원가입을 해준다.

그리고 로그인해준다.

상단 메뉴바에 Repositories 클릭

오른쪽에 Create Repository 클릭

본인 이메일에 접속해서..

Verify email address클릭

다시 Repository로 와서 Create Repository 클릭

이런 화면이 뜬다.

name에는 cicdproject 라는 이름으로 입력하고 Create클릭

이런 식으로 나오면 성공


Vagrantfile ansible 추가

일단 tomcat 가상머신 터미널로 들어가서..

exit

해서 나가준다.

이 커서에서

code Vagrantfile

모든 내용을 지우고 아래 내용을 복사 붙여넣기 해준다.

Vagrant.configure("2") do |config|
	# Define VM
	config.vm.define "jenkins" do |ubuntu|
		ubuntu.vm.box = "ubuntu/focal64"
		ubuntu.vm.hostname = "jenkins"
		ubuntu.vm.network "private_network", ip: "192.168.59.10"
		ubuntu.vm.provider "virtualbox" do |vb|
			vb.name = "jenkins"
			vb.cpus = 2
			vb.memory = 3000
		end
	end
	# config.vm.define "tomcat" do |ubuntu|
	# 	ubuntu.vm.box = "ubuntu/focal64"
	# 	ubuntu.vm.hostname = "tomcat"
	# 	ubuntu.vm.network "private_network", ip: "192.168.59.11"
	# 	ubuntu.vm.provider "virtualbox" do |vb|
	# 		vb.name = "tomcat"
	# 		vb.cpus = 2
	# 		vb.memory = 2000
	# 	end
	# end
	config.vm.define "docker" do |ubuntu|
		ubuntu.vm.box = "ubuntu/focal64"
		ubuntu.vm.hostname = "docker"
		ubuntu.vm.network "private_network", ip: "192.168.59.12"
		ubuntu.vm.provider "virtualbox" do |vb|
			vb.name = "docker"
			vb.cpus = 2
			vb.memory = 2000
		end
	end
	config.vm.define "ansible" do |ubuntu|
		ubuntu.vm.box = "ubuntu/focal64"
		ubuntu.vm.hostname = "ansible"
		ubuntu.vm.network "private_network", ip: "192.168.59.13"
		ubuntu.vm.provider "virtualbox" do |vb|
			vb.name = "ansible"
			vb.cpus = 2
			vb.memory = 2000
		end
	end
	config.vm.provision "shell", inline: <<-SHELL
	  sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
	  sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
	  sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
	  systemctl restart ssh
	SHELL
end

ctrl+s눌러서 저장해주고 나가준다.
다시 터미널로 와서..

vagarnt up

### 기다렸다가

vagrant status


이렇게 가상머신 3개가 올라오면 잘 된것이다.


가상머신 ssh접속

이미 jenkins와 docker는 터미널에 접속해있는 상태면 그대로 두면 된다.

### 새로운 터미널 열어서
cd vagrant/cicd
vagrant ssh ansible

이렇게 총 3개의 가상머신이 잘 접속된 상태에서 시작해야한다.


Github 계정 token 받아오기

본인 github 레포지토리로 가서 오른쪽 끝 상단 끝에 본인 아이콘 클릭

그러면 이런 메뉴바가 나오는데 Settings 클릭

이 메뉴바 맨 아래로 스크롤을 내려보면 Developer settings 클릭

왼쪽 메뉴바에서 Personal access tokens 클릭

Generate new token클릭

본인 계정 비밀번호 입력하시고

note에 tokenforcicd입력하시고 Expiration은 90 days로 설정

그리고 Select scopes에 모든 체크박스를 활성화해준다.
아래로 스크롤 내리면 더 있음 전부 활성화

Generate token클릭

이런 화면이 뜨는데 아래 내용을 복사해준다.

그리고 Jenkins 터미널로 와서..

vi ~/.ssh/token

i 로 편집 시작해서 위에 본인의 token값을 복사해서 붙여넣고 esc :wq눌러서 저장하고 나온다.

cat ~/.ssh/token

### 했을 때 토큰값이 잘 나오면 성공

Github에 Dockerfile push하기


jenkins 가상머신에 와서.. 본인 git과 연동된 디렉토리로 와서..

mkdir docker
cd docker
vi Dockerfile

아래 문서를 그대로 넣어준다.i로 편집 시작

FROM tomcat:9.0-jre11-openjdk

COPY webapp.war /usr/local/tomcat/webapps

esc로 나와서 :wq로 저장하고 나와주시면 됩니다.
편집했으면 아래 명령어를 그대로 입력해준다.

git add .
cd ..
git add .
git commit -m 'add Dockerfile'		#최초 commit 할 때 오류가 나면 아래 명령어 해주세요
									#git config --global user.email "본인이메일" 
                                    #git config --global user.name "본인이름"
cat ~/.ssh/token					#token값 출력되면 밑에서 사용하시면 됩니다.
git push

Username은 본인 계정 입력하시면 되고
Password는 token값 입력하시면 됩니다.


본인 레포지토리에 Docker가 추가되었으면 성공


jenkins에서 docker 프로젝트 생성

다시 대쉬보드로 와서..

새로운 Item클릭

deploy-to-docker라는 이름으로 Maven project 클릭하고 OK 버튼 클릭

Git 옆에 체크표시 활성화

Repository URL은 지금까지 사용해온 본인 Git 계정의 Repository 주소를 넣어주면 된다.
나의 경우를 예시로 들면
https://github.com/re-Push/source-java-maven-hello-world인데,
본인 github주소가 다 다를것이다.

master를 main으로 바꿔준다. */main

Build 에 두 번째 항목에 clean package 를 추가해준다.

빌드 후 조치 추가 클릭

Send build artifacts over SSH 클릭

그러면 이런 화면이 나오게 된다.

아래 사진과 표를 참고해서 그대로 붙여넣어주면 된다.

항목설정값
Source fileswebapp/target/webapp.war
Remove prefixwebapp/target/
Remote directorymyweb

Add Transfer Set클릭

아래 사진과 표를 참고해서 붙여넣어준다.

항목설정값
Source filesdocker/Dockerfile
Remove prefixdocker
Remote directorymyweb
Exec command#!/bin/bash
cd /home/vagrant/myweb
docker build -t myweb .

Apply누르고 저장클릭

왼쪽 메뉴바에서 Build Now클릭

docker 터미널로 와서..
docker images명령어를 입력했을 때 아래와같이 myweb이 나오고 옆에 About a minute ago 나오면 성공

0개의 댓글