최근 Gitlab의 CI/CD 기능으로 자동화된 배포도 실현할 수 있고 사용하기도 매우 쉽다는 사실을 발견했습니다! Gitlab을 Git 웨어하우스로 사용하고 있다면 CI/CD 기능을 사용해 볼 수도 있습니다. 이 기사에서는 Gitlab의 CI/DI 기능을 연습하기 위한 예로 SpringBoot의 자동화된 배포를 사용합니다.
SpringBoot 실제 전자상거래 프로젝트 몰(50k+star) 주소: https://github.com/macrozheng/mall
Gitlab의 CI/CD 기능을 통해 자동화된 배포를 위해서는 Gitlab, Gitlab을 설치해야 합니다. Runner, Maven 등의 서비스를 제공합니다.
우선 Gitlab을 설치해보자. Gitlab 설치와 사용법을 모르는 친구들은 "10분 안에 나만의 Git 웨어하우스 만들기"를 참고해보세요.
다음 명령을 사용하여 Gitlab 서비스를 실행하세요. 여기서 주목해야 할 점은 불필요한 문제를 피하기 위해 도메인 이름을 통해 Gitlab에 액세스할 수 있도록 호스트 이름 속성이 추가된다는 것입니다. GITLAB_ROOT_PASSWORD 환경 변수는 직접 사용할 수 있습니다. Gitlab에서 루트 계정을 설정하세요.
docker run --detach \ --hostname git.macrozheng.com \ --publish 10443:443 --publish 1080:80 --publish 1022:22 \ --name gitlab \ --restart always \ --volume /mydata/gitlab/config:/etc/gitlab \ --volume /mydata/gitlab/logs:/var/log/gitlab \ --volume /mydata/gitlab/data:/var/opt/gitlab \ -e GITLAB_ROOT_PASSWORD=12345678 \ gitlab/gitlab-ce:latest
도메인 이름 git.macrozheng.com을 통해 Gitlab에 액세스해야 합니다. 도메인 이름이 없으면 로컬 호스트 파일을 수정하면 됩니다.
Gitlab은 포트 1080에서 실행되므로 포트를 추가하지 않고 액세스하려면 Nginx를 역방향 프록시로 사용할 수 있습니다. Nginx에 익숙하지 않은 친구는 "이러한 Nginx의 놀라운 사용법을 모르면 안 됩니다! " 》, Nginx 구성 폴더에 git.conf 구성 파일을 추가하면 내용은 다음과 같습니다:192.168.7.134 git.macrozheng.com
SpringBoot 애플리케이션 코드를 Gitlab에 업로드하면 Gitlab이 준비됩니다! 여기서 주의할 점은 Gitlab을 시작할 때 호스트 이름을 지정하지 않으면 프로젝트의 HTTP 액세스 주소가 컨테이너의 ID가 되어 이 주소를 사용하여 Git 저장소에 액세스할 수 없다는 점입니다! Gitlab Runner 설치Gitlab은 단지 코드 웨어하우스일 뿐입니다. CI/CD를 구현하려면 gitlab-runner를 설치해야 합니다. gitlab-runner는 Gitlab에서 호출하는 작업 실행 프로그램과 동일합니다. 작업을 실행해야 할 때. 먼저 gitlab-runner의 Docker 이미지를 다운로드하고 alpine-bleeding을 선택하세요. 이 버전은 매우 컴팩트합니다!
server { listen 80; # 同时支持HTTP server_name git.macrozheng.com; #修改域名 location / { proxy_pass http://192.168.7.134:1080; # 设置代理服务访问地址 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
docker pull gitlab/gitlab-runner:alpine-bleeding
docker run --name gitlab-runner --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /mydata/gitlab-runner:/etc/gitlab-runner \ -d gitlab/gitlab-runner:alpine-bleeding
ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory builds=0
등록이 완료되면 다음과 같은 내용으로 config.toml 파일이 생성된 것을 확인할 수 있습니다. 나중에 러너 구성을 수정하려면 이 파일을 직접 변경하면 됩니다.
docker exec -it gitlab-runner /bin/bash
Maven 설치
SpringBoot 프로젝트 패키징에는 Maven이 필요하므로 먼저 서버에 설치해야 합니다. Maven Linux 설치 패키지를 다운로드하세요. 다운로드 주소는 https://maven.apache.org/down...다운로드가 완료된 후 다음 명령을 사용하여 지정된 디렉터리에 압축을 해제하세요.
gitlab-runner register
concurrent = 1 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "docker-runner" url = "http://192.168.7.134:1080/" token = "c2kpV6tX6woL8TMxzBUN" executor = "ssh" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.ssh] user = "root" password = "123456" host = "192.168.7.134" port = "22"
cd /mydata tar -zxvf apache-maven-3.8.1-bin.tar.gz
export MAVEN_HOME=/mydata/apache-maven-3.8.1 export PATH=$PATH:$MAVEN_HOME/bin
다운로드가 완료된 후 지정된 디렉터리에 JDK를 추출합니다.
mvn -v
vi /etc/profile # 在profile文件中添加 export JAVA_HOME=/mydata/java/jdk1.8 export PATH=$PATH:$JAVA_HOME/bin # 使修改后的profile文件生效 . /etc/profile
一切准备就绪,接下来通过Gitlab的CI/CD功能就可以实现SpringBoot应用的自动化部署了!
首先在项目的根目录下添加.gitlab-ci.yml文件,定义了两个任务,一个任务会将应用代码打包成Jar包并复制到指定目录,另一个任务会通过运行脚本run.sh打包应用的Docker镜像并运行;
# 打包任务 build-job: stage: build # 指定标签,只有具有该标签的runner才会执行 tags: - docker script: # 使用Maven打包 - mvn clean package # 将jar包、Dockerfile、运行脚本复制到指定目录 - cp target/mall-tiny-gitlab-1.0-SNAPSHOT.jar /mydata/build/mall-tiny-gitlab-1.0-SNAPSHOT.jar - cp Dockerfile /mydata/build/Dockerfile - cp run.sh /mydata/build/run.sh # 部署任务 deploy-job: stage: deploy tags: - docker script: # 进入指定目录并执行运行脚本 - cd /mydata/build - chmod +x run.sh - ./run.sh
这里值得一提的是,默认情况下runner只会执行具有相同标签的Job,由于我们对Job和runner都设置了标签为docker,所以我们这里是可以执行的。如果你没有设置标签的话,需要在runner的编辑界面设置下让runner可以执行没有标签的Job;
由于我们的gitlab-runner采用的是ssh的执行器,它会登录到我们指定的服务器,执行我们在.gitlab-ci.yml中定义的script命令,在此之前还会先从Git仓库中获取代码,所以我们还需修改下服务器上的host文件;
vim /etc/hosts 192.168.7.134 git.macrozheng.com
接下来就是要把脚本提交到Git仓库上去,提交后会在Project->CI/CD->Pipelines中发现正在执行的任务;
打开Pipeline的详情页面,可以发现我们定义的两个任务都已经执行成功了;
打开Job的详情界面,我们可以看到任务执行过程中输出的日志信息;
如果你想手动执行Pipeline,而不是提交触发的话,可以在Pipelines页面点击Run Pipeline按钮即可;
运行成功后,可以通过如下地址访问项目:http://192.168.7.134:8088/swa...
如果你用Gitlab作为Git仓库的话,使用它的CI/CD功能来实现自动化部署确实很不错!安装一个轻量级gitlab-runner,编写简单的.gitlab-ci.yml脚本文件即可实现。其实我们之前以及介绍过很多种自动化部署方案,比如Jenkins、Gogs+Drone、Gitlab CI/CD,我们可以发现一个共同点,这些方案都离不开Linux命令。 所以说要想玩转自动化部署,还是得先玩转Linux命令!
相关视频教程推荐:Java视频教程
위 내용은 Gitlab의 CI/CD 기능을 더 이상 사용하지 않으면 아웃됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!