T아카데미 - 컨테이너 기반 가상화 플랫폼 ‘도커(Doker)’의 이해
지속적 통합 및 전달(CI/CD)
- CI Continuous Integration
- CD Continuous Delivery
- 지속적으로 소스를 통합, 빌드, 테스트, 배포하는 과정
- CI 테스트 / 빌드 , CD 전달 / 배포
- 도커를 이용해 제품을 배포하는 과정
* 소스 저장소에 최신 소스를 저장
* 전체 소스를 다운로드
* 테스트
* 도커 이미지 만들기
* 도커 이미지 저장하기
* 애플리케이션 업데이트
- 자동화 할 경우, 개발자는 최신소스를 저장하는 것 까지만 하면 된다.
- 자동화 도구
* jenkins
* TrevisCI
* CircleCI
Jenkins
- 빌드 / 테스트 / 코드분석 / 배포 / 알림 등 다양한 기능을 제공
- Master / Agent 구성 (하나의 Master에 다수의 Agent 구성 가능)
- 많은 플러그인 있음
Jenkins 실행
$ docker run -u root --rm -p 8080:8080 --name jenkins -v C:\jenkins:/var/jenkins_home subicura/jenkins:2
$ docker run -u root --rm -p 8080:8080 --name jenkins -v C:\jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock subicura/jenkins:2
- http://localhost:8080 접속
자동배포 스크립트 만들기
- pipeline
- create jop - pipeline
- 빈 stage 구성
- Build
- 자동배포 스크립트 - Pull
stage('Pull') {
git 'https://github.com/subicura/docker-jenkins-workshop.git'
}
- 자동배포 스크립트 - build
stage('Build') {
sh(script: '''docker build --force-rm=true -t das101096/ruby-app:latest .''')
}
★★ 윈도우일 경우 스크립트에 하단 내용 꼭 감싸기 ! (완전 헤멤)
- withEnv(["DOCKER_HOST=tcp://host.docker.internal:2375"])
★ Docker hub ID & PW jenkins에 저장
- 자동배포 스크립트 - tag
stage('Tag') {
sh(script: '''docker tag ${DOCKER_USER_ID}/ruby-app ${DOCKER_USER_ID}/ruby-app:${BUILD_NUMBER}''')
}
- 자동배포 스크립트 - push
stage('Push') {
sh(script: 'docker login -u ${DOCKER_USER_ID} -p ${DOCKER_USER_PASSWORD}')
sh(script: 'docker push ${DOCKER_USER_ID}/ruby-app:${BUILD_NUMBER}')
sh(script: 'docker push ${DOCKER_USER_ID}/ruby-app:latest')
}
- 자동배포 스크립트 - deploy
stage('Deploy') {
try {
sh(script: 'docker stop ruby-app')
sh(script: 'docker rm ruby-app')
} catch(e) {
echo "No ruby-app container exists"
}
sh(script: '''docker run -d -p 10000:4567 --name=ruby-app ${DOCKER_USER_ID}/ruby-app:${BUILD_NUMBER}''')
}
'Devops > docker' 카테고리의 다른 글
개선사항 및 실무 (0) | 2021.06.01 |
---|---|
이미지 만들고 배포하기 (0) | 2021.06.01 |
도커 컨테이너 만들기 (0) | 2021.06.01 |
도커 개요 및 소개 (0) | 2021.06.01 |