Jenkins CICD를 기반으로 한 코드 릴리스 및 롤백

 

사례 지식 포인트


1. 젠킨스 소개

이전에 Hudson으로 알려진 Jenkins는 2011년에 현재 이름으로 변경되었습니다. 지속적인 통합을 위한 오픈 소스 소프트웨어 도구입니다. 공식 홈페이지: https://jenkins.io/.

Jenkins는 지속적인 통합 프로세스에 존재하는 문제를 모니터링하고, 상세한 로그 파일과 알림 기능을 제공할 수 있으며, 차트를 사용하여 프로젝트 구축의 추세와 안정성을 시각적으로 표시할 수도 있습니다.

2. 메이븐 소개

Maven 프로젝트 개체 모델(POM)은 작은 설명 정보를 통해 프로젝트 구성, 보고 및 문서화를 관리할 수 있는 소프트웨어 프로젝트 관리 도구입니다.

3. 도커 소개

Docker는 개발자가 애플리케이션과 종속성을 이식 가능한 이미지로 패키징한 다음 널리 사용되는 Linux 시스템에 게시할 수 있는 오픈 소스 애플리케이션 컨테이너 엔진입니다.

4. 앤서블 소개

Ansible은 Python을 기반으로 개발된 자동화된 운영 및 유지 관리 도구로 일괄 시스템 구성, 일괄 프로그램 배포, 명령 일괄 실행 등의 기능을 구현합니다.

케이스 환경


운영 체제

IP 주소

CPU 이름

역할

센트OS 7.5

192.168.200.111

자식

Git/Docker 레지스트리

센트OS 7.5

192.168.200.112

젠킨스

젠킨스

센트OS 7.5

192.168.200.113

도커

도커

Jenkins+Git+Docker를 기반으로 Java 프로젝트 게시


모든 호스트에서 작동

[root@localhost ~]# setenforce 0

[root@localhost ~]# iptables -F

[root@localhost ~]# systemctl stop 방화벽d

[root@localhost ~]# systemctl stop NetworkManager

케이스 요구 사항

개발자가 개발된 코드를 Git 코드 버전 저장소에 제출한 후 Jenkins 작업 버튼을 클릭하면 자동으로 코드를 가져와 컴파일 및 빌드한 후 자동으로 웹 서버에 배포하므로 사용자는 최신 프로젝트 버전에 액세스할 수 있습니다.

1. Git 창고 구성


Git은 소규모 프로젝트부터 대규모 프로젝트까지의 버전 관리를 효과적이고 신속하게 처리할 수 있는 오픈소스 분산 버전 관리 시스템으로, 현재 기업에서 가장 널리 사용되는 코드 버전 관리 시스템입니다.

yum을 사용하여 Git을 설치하고 구성하세요.

[root@git ~]# yum -y install git

[root@git ~]# useradd git

[root@git ~]# echo "123456" | passwd --stdin git

상호 작용 없이 Git 저장소를 가져오도록 Jenkins 호스트 구성

Jenkins 호스트에서 키 쌍을 생성하고 Git 서버의 /home/git/.ssh/authorized_keys 파일에 id_rsa.pub 콘텐츠를 추가합니다.

[root@jenkins ~]# ssh-keygen # Enter 키를 끝까지 누르세요.

[root@jenkins ~]# ssh-copy-id [email protected]

상호작용 없는 로그인 테스트

[root@jenkins ~]# ssh [email protected]

[git@git ~]$ 종료

로그아웃

192.168.200.111에 대한 연결이 닫혔습니다.

Git 서버에 프로브 버전 저장소를 생성하려면 일반적으로 Git의 표준화된 방법은 .git을 접미사로 사용하는 것입니다. 다음과 같이:

[root@git ~]# su - git

[git@localhost ~]$ mkdir 프로브.git

[git@localhost ~]$ cd 프로브.git

[git@localhost 프로브.git]$ git --bare 초기화

/home/git/probe.git/에서 빈 Git 저장소를 초기화합니다.

[git@localhost 프로브.git]$ 종료

로그아웃

Github에서 오픈 소스 Java 블로그 시스템 psi-probe를 가져옵니다.

[root@jenkins ~]# git clone https://github.com/psi-probe/psi-probe.git

[root@jenkins ~]# cd psi-probe/

이전 푸시 주소를 제거하고 새 Git 커밋 주소를 추가하세요. 다음과 같이:

 [root@jenkins psi-probe]# git 원격 원점 제거

[root@jenkins psi-probe]# git 원격 추가 원본 [email protected]:/home/git/probe.git

Git 저장소에 코드를 제출하고 태그를 생성합니다. 다음과 같이:

[root@jenkins psi-probe]# touch psi-probe-web/src/main/webapp/a.html

[root@jenkins psi-probe]# git add .

[root@jenkins psi-probe]# git config --global user.email "[email protected]"

[root@jenkins psi-probe]# git config --global user.name "crushlinux"

[root@jenkins psi-probe]# git commit -m "a"

[마스터 5354df1]

 파일 변경 1개, 삽입(+) 0개, 삭제(-) 0개

 생성 모드 100644 web/src/main/webapp/a.html 

[root@jenkins psi-probe]# git 태그 1.0.0
[root@jenkins psi-probe]# git push 오리진 1.0.0


열거된 개체: 40775, 완료
개체 수: 100%(40775/40775), 완료
2개의 스레드를 사용하여 압축 압축된
개체: 100%(12232/12232), 완료
작성된 개체: 100%(40775/40775) , 23.41MiB | 43.34MiB/s, 완료
총 40775(차이 24175), 재사용 40740(차이 24160)
192.168.200.111:/home/git/probe.git
 * [새 태그] 1.0.0 -> 1.0.0

2. Docker 서버 구성


[Docker를 설치하고 모든 호스트에서 작동]

설치환경을 확인하고 설치하세요.

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@localhost ~]# yum -y install yum-utils 장치-매퍼-지속적-데이터 lvm2

[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@localhost ~]# ls /etc/yum.repos.d/

백업 CentOS-aliyun.repo CentOS-Media.repo docker-ce.repo

[root@localhost ~]# yum -y install docker-ce

[root@localhost ~]# systemctl start docker

[root@localhost ~]# systemctl docker 활성화

[root@docker ~]# 도커 버전

Git 호스트 구성 Alibaba Cloud Image Accelerator

[root@git ~]# 고양이 << END > /etc/docker/daemon.json

{

        "registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]

}

[root@git ~]# systemctl daemon-reload

[root@git ~]# systemctl 재시작 도커

3. 미러 웨어하우스 배포


Docker Hub는 Docker의 기본 공식 공용 창고 입니다 . 사용자가 자신만의 개인 미러 창고를 구축하려는 경우 공식 레지스트리 미러가 제공되므로 개인 미러 창고를 매우 간단하게 구축할 수 있습니다.

Git에 Docker 개인 창고 배포

[root@git ~]# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name 레지스트리 레지스트리

[root@git ~]# docker ps -l

[root@git ~]# 도커 이미지

테스트 레지스트리 가용성

Docker CLI는 기본적으로 HTTPS를 통해 액세스되고 배포된 레지스트리는 HTTPS를 제공하지 않으므로 풀 이미지의 Docker 호스트에 HTTP 신뢰를 추가해야 합니다.

[Docker 및 Jenkins 호스트에서 작업! ! ! ]

[root@docker ~]# vim /etc/docker/daemon.json

{"안전하지 않은 레지스트리":["192.168.200.111:5000"]}

[root@docker ~]# systemctl daemon-reload

[root@docker ~]# systemctl 재시작 docker

이미지에 태그를 지정하고 레지스트리에 푸시

  [root@docker ~]# cat centos-7-x86_64.tar.gz | 도커 가져오기 - centos:7

[root@docker ~]# docker 태그 centos:7 192.168.200.111:5000/centos:7

[root@docker ~]# 도커 이미지 

[root@docker ~]# docker push 192.168.200.111:5000/centos:7 

레지스트리에서 업로드한 이미지를 봅니다.

[root@docker ~]# 컬 http://192.168.200.111:5000/v2/_catalog

{"저장소":["centos"]}

[root@docker ~]# 컬 http://192.168.200.111:5000/v2/centos/tags/list

{"이름":"센토스","태그":["7"]}

레지스트리에서 이미지를 다운로드합니다.

[root@docker ~]# docker rmi 192.168.200.111:5000/centos:7

[root@docker ~]# docker pull 192.168.200.111:5000/centos:7

[root@localhost ~]# 도커 이미지

Tomcat 기본 이미지 빌드

Jenkins 및 Docker 호스트에 JDK를 설치합니다.

[root@docker ~]# tar xf jdk-8u191-linux-x64.tar.gz

[ root @ docker ~ ] # mv jdk1 .8.0_191 / / usr / local / java

[root@docker ~]# ls -l apache-tomcat-8.5.40.tar.gz

[root@docker ~]# vim Dockerfile

센트에서:7

MAINTAINER crushlinux

ENV 버전=8.5.40

ENV JAVA_HOME /usr/local/java

./apache-tomcat-${VERSION}.tar.gz /tmp 추가

실행 CD /tmp && \

    mv apache-tomcat-${VERSION} /usr/local/tomcat && \

    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \

    mkdir /usr/local/tomcat/webapps/ROOT

노출 8080

CMD ["/usr/local/tomcat/bin/catalina.sh", "실행"]

[root@docker ~]# docker build -t 192.168.200.111:5000/tomcat-85 .

[root@docker ~]# 도커 이미지

이미지를 빌드하고 레지스트리에 업로드합니다.

[root@docker ~]# docker pull tomcat

[root@docker ~]# docker 태그 tomcat 192.168.200.111:5000/tomcat-85

[root@docker docker-tomcat]# docker push 192.168.200.111:5000/tomcat-85

5. Jenkins 환경 구성


Jenkins는 Java를 기반으로 개발된 오픈 소스 소프트웨어 프로젝트이자 지속적인 통합 도구로, 코드 컴파일, 배포, 테스트 등에 사용됩니다. Jenkins는 또한 대부분의 주류 플랫폼에서 지원되는 크로스 플랫폼 통합 도구이며 설치가 매우 간단합니다. 여기에는 war 패키지를 배포하여 설치됩니다.

공식 홈페이지 다운로드 주소: https://jenkins.io/download/.

Jenkins 실행 사용자 수정

[root@jenkins ~]# vim /etc/sysconfig/jenkins

JENKINS_USER="루트"

[root@jenkins ~]# 젠킨스 다시 시작

젠킨스 다시 시작하기(systemctl을 통해):            

Jenkins 구성 전역 도구 구성

Jenkins 홈 페이지에서 "Jenkins 관리" -> "전역 도구 구성" -> "JDK" -> "JDK" 추가를 클릭하고 JDK 별칭을 "JDK1.8"로 설정합니다. 이 경우 "자동 설치" 옵션을 제거하고 "JAVA_HOME"을 JDK의 실제 설치 경로로 설정하십시오.

rz jdk-8u191-linux-x64.tar.gz 패키지를 가져오십시오. 존재하는 경우 사용하지 마십시오.

[root@jenkins ~]# tar xf jdk-8u191-linux-x64.tar.gz

[ 루트 @ 젠킨스 ~ ] # mv jdk1 .8.0_191 / / usr / local / java

[root@jenkins ~]# vim /etc/profile

JAVA_HOME=/usr/local/java 내보내기

내보내기 CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

내보내기 PATH=$JAVA_HOME/bin:$PATH

[root@jenkins ~]# rm -rf /usr/bin/java

[Java 버전은 변경할 필요가 없습니다.]

[root@jenkins jenkins]# mkdir 업데이트

[root@jenkins ~]# cd /var/lib/jenkins/updates

[root@jenkins 업데이트]# touch default.json

[root@jenkins 업데이트]# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g ' 기본.json

[root@jenkins 업데이트]# sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

[root@jenkins ]# 젠킨스 다시 시작

 

"Global Tool Configuration" 구성 인터페이스에서 Maven 구성 옵션을 찾은 다음 "Add Maven"을 클릭하고 별칭을 "Maven3.5"로 설정합니다.

[apache-maven-3.5.0-bin.tar.gz가 없으면 직접 import하세요.]

[root@jenkins ~]# tar xf apache-maven-3.5.0-bin.tar.gz

[root@jenkins ~]# mv apache-maven-3.5.0 /usr/local/maven-3.5.0

Maven용 Alibaba Cloud 미러 스테이션 변경

[root@jenkins ~]# vim /usr/local/maven-3.5.0/conf/settings.xml

    <거울>

        <id>nexus-aliyun</id>

        <mirrorOf>중앙</mirrorOf>

        <name>넥서스 알리윤</name>

        <url>http://maven.aliyun.com/nexus/content/groups/public</url>

    </미러>

힘내 구성

[root@jenkins ~]# 어느 자식

/usr/bin/git

 위의 글로벌 기본 구성이 완료되면 저장을 클릭하여 완료합니다.

Jenkins는 필요한 플러그인을 설치합니다.

Jenkins 관리 -> 플러그인 관리

 

SSH 플러그인 설치

 Git 매개변수 플러그인 설치

 

플러그인 설명:

SSH: Shell 명령을 실행하기 위해 SSH 원격 Docker 호스트에 사용됩니다.

Git 매개변수: Git 웨어하우스 분기 및 태그를 동적으로 가져옵니다.

SSH 플러그인 구성

Docker 호스트에 연결하기 위한 자격 증명을 만듭니다. 홈 페이지->자격 증명->시스템->글로벌 자격 증명->자격 증명 추가.

 

 

Docker 호스트에 연결하기 위한 사용자 이름과 비밀번호를 입력하세요(설명에 docker 작성).

SSH 원격 호스트를 추가합니다. Jenkins 관리 -> 시스템 구성.

SSH 원격 호스트 구성

6. Jenkins가 프로젝트를 생성하고 테스트를 게시합니다.


메인 페이지 -> 새 항목 -> Maven 프로젝트 빌드를 위한 작업 이름 입력

참고: "Build a Maven Project" 옵션이 표시되지 않으면 관리 플러그인에 "Maven Project"를 설치해야 합니다.

통합' 플러그인입니다.

Git 매개변수화된 빌드 구성

Git 웨어하우스 태그를 동적으로 획득하고 사용자와 상호 작용하여 게시할 태그를 선택합니다.

프로젝트 Git 창고 주소를 지정하세요.

Maven 빌드 명령 옵션 "clean package -Dmaven.test.skip=true"를 설정합니다.

pom.xml 파일을 사용하여 프로젝트를 빌드합니다. 로컬 이미지를 빌드하여 Jenkins의 이미지 웨어하우스에 푸시하고 SSH를 통해 Docker 호스트에 원격으로 연결하여 푸시된 이미지를 사용하여 컨테이너를 생성합니다.

사후 단계 -> 빌드 후 단계 추가 -> 셸 실행을 선택하면 첫 번째 입력 상자가 나타납니다.

Post Steps(게시 단계) –> SSH를 사용하여 원격 호스트에서 쉘 스크립트 실행을 선택하면 두 번째 입력 상자가 나타납니다.

 pom.xml: 프로젝트 설명자가 POM 모델 버전을 따른다고 선언합니다. 모델 자체의 버전은 거의 변경되지 않지만 Maven이 새로운 기능을 도입하거나 기타 모델 변경을 할 때 안정성을 보장하는 것은 여전히 ​​필수적입니다.

첫 번째 명령 상자의 내용

저장소=192.168.200.111:5000/프로브:${태그}

# 이미지 빌드

고양이 > Dockerfile << EOF

192.168.200.111:5000/tomcat-85:최신에서

RUN rm -rf /usr/local/tomcat/webapps/ROOT

psi-probe-web/target/*.war /usr/local/tomcat/webapps/ROOT.war 복사

CMD ["/usr/local/tomcat/bin/catalina.sh", "실행"]

EOF

docker build -t $REPOSITORY ./

# 이미지 업로드

도커 푸시 $REPOSITORY

두 번째 명령 상자의 내용

저장소=192.168.200.111:5000/프로브:${태그}

# 배포

docker rm -f 프로브 |참

도커 이미지 rm $REPOSITORY |true

docker 컨테이너 실행 -d --name 프로브 -v /usr/local/java:/usr/local/java -p 8090:8080 $REPOSITORY

[root@docker ~]# vim /etc/docker/daemon.json

{"안전하지 않은 레지스트리":["192.168.200.111:5000"]}

[root@docker ~]# systemctl daemon-reload

[root@docker ~]# systemctl 재시작 docker

참고: 배포 명령에서 컨테이너 이름의 마지막 줄이 프로브이며 호스트 포트 8090을 노출하는 것을 볼 수 있습니다. 즉, 호스트 IP: 8090을 사용하여 프로브 프로젝트에 액세스할 수 있습니다.

프로브 프로젝트가 구성되고 빌드가 시작되었습니다.

태그를 선택하고 구축을 시작하세요

 작업 콘솔에 빌드 로그의 시작 정보를 출력합니다.

작업 콘솔에 빌드 로그의 종료 정보를 출력합니다.

[root@docker ~]# docker ps -a

성공적으로 실행되면 브라우저는 테스트 프로브 프로젝트( http://192.168.200.113:8090 )에 액세스합니다.

7. 버전 롤백


롤백은 프로그램이나 데이터 처리 오류를 말하며, 프로그램이나 데이터를 마지막 올바른 버전으로 복원합니다. 롤백에는 프로그램 롤백과 데이터 롤백이 포함됩니다. 본 장에서는 현재 코드 버전이 공개되지 않을 경우, 이전의 일반 버전으로 롤백하여 최대한 빨리 사업을 재개하도록 하겠습니다.

롤백 아이디어: 이미지의 이전 버전을 지정하려면 다시 실행하세요. 각 릴리스 프로세스 중에 코드를 이미지로 캡슐화하고 태그를 지정하여 다양한 버전을 구별해야 하기 때문입니다. 예를 들어, 출시 과정에서 코드 문제가 발생하면 운영 및 유지 관리 엔지니어가 신속하게 이전 버전으로 롤백해야 비즈니스가 빠르게 정상화될 수 있습니다. 이 프로세스를 어떻게 구현해야 합니까? 이때 "자유 소프트웨어 프로젝트 스타일 작업"을 다시 생성하고 매개변수화를 통해 특정 버전을 빌드할 수 있습니다. 즉, 이전 일반 버전 이미지를 지정한 다음 컨테이너 생성 명령을 다시 실행하여 이전 일반 버전으로 돌아갈 수 있습니다. 버전.

버전 1.0.1 코드 제출

[root@jenkins ~]# cd psi-probe/

[root@jenkins psi-probe]# echo "test1" > psi-probe-web/src/main/webapp/test1.html

[root@jenkins psi-probe]# git add .

[root@jenkins psi-probe]# git commit -m "test1"

[마스터 7b36b14] 테스트1

 파일 1개 변경, 삽입 1개(+)

 생성 모드 100644 web/src/main/webapp/test1.html

[root@jenkins psi-probe]#git 태그 1.0.1

[root@jenkins psi-probe]#git 푸시 원점 1.0.1

개체 수 계산: 12개, 완료되었습니다.

개체 압축 중: 100%(6/6), 완료되었습니다.

개체 쓰기: 100%(7/7), 574바이트 | 0바이트/초, 완료되었습니다.

총 7개(델타 2), 재사용 0(델타 0)

[email protected]로:/home/git/probe.git

 * [새 태그] 1.0.1 -> 1.0.1

버전 1.0.2 코드 제출

 [root@jenkins psi-probe]# echo "test2" > psi-probe-web/src/main/webapp/test2.html

[root@jenkins psi-probe]# git add .

[root@jenkins psi-probe]# git commit -m "test2"

[마스터 eb617d6] test2

 파일 1개 변경, 삽입 1개(+)

 생성 모드 100644 web/src/main/webapp/test2.html

[root@jenkins psi-probe]# 자식 태그 1.0.2

[root@jenkins psi-probe]# git push 원점 1.0.2

개체 수 계산: 12개, 완료되었습니다.

개체 압축 중: 100%(6/6), 완료되었습니다.

쓰기 개체: 100%(7/7), 577바이트 | 0바이트/초, 완료되었습니다.

총 7개(델타 2), 재사용 0(델타 0)

[email protected]로:/home/git/probe.git

 * [새 태그] 1.0.2 -> 1.0.2  

릴리스 버전 1.0.1

[root@docker ~]# docker exec -it 프로브 /bin/bash

[ root@1b57d0ebb506 /]# ls /usr/local/tomcat/webapps/ROOT

META-INF WEB-INF a.html CSS 플래그 index.jsp js test1.html

무료 소프트웨어 프로젝트 스타일 작업 만들기

 

 

 

저장소=192.168.200.111:5000/프로브:${태그}

# 배포

docker rm -f 프로브 |참

docker 컨테이너 실행 -d --name 프로브 -v /usr/local/java:/usr/local/java -p 8090:8080 $REPOSITORY

 

[root@docker ~]# docker ps -l

 

[root@docker ~]# docker exec -it 프로브 /bin/bash

[ root@6991b6b06f6d /]# ls /usr/local/tomcat/webapps/ROOT

META-INF WEB-INF a.html CSS 플래그 index.jsp js

추천

출처blog.csdn.net/2302_77750172/article/details/132470433