SpringBoot實戰電商項目mall(50k+star)地址:github.com/macrozheng/…html
以前寫過一篇文章《再見 Jenkins !幾行腳本搞定自動化部署,這款神器有點厲害!》 ,講的是使用Gogs+Drone來實現自動化部署。最近發現Gitlab的CI/CD功能也能實現自動化部署,用起來也挺簡單!若是你使用的是Gitlab做爲Git倉庫的話,不妨試試它的CI/CD功能。本文仍是以SpringBoot的自動化部署爲例,實踐下Gitlab的CI/DI功能,但願對你們有所幫助!java
經過Gitlab的CI/CD功能實現自動化部署,咱們須要安裝Gitlab、Gitlab Runner、Maven這些服務。linux
首先咱們來安裝下Gitlab,對Gitlab安裝和使用不了解的朋友能夠參考下《10分鐘搭建本身的Git倉庫》 。nginx
hostname
屬性,這樣咱們就能夠經過域名來訪問Gitlab了(爲了不一些沒必要要的麻煩),GITLAB_ROOT_PASSWORD
這個環境變量能夠直接設置Gitlab中root帳號的密碼;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,若是你沒有域名的話,能夠經過修改本機的host文件來實現;192.168.7.134 git.macrozheng.com
複製代碼
1080
端口上,咱們想要不加端口來訪問,能夠使用Nginx來反向代理下,對Nginx不熟悉的朋友能夠看下《Nginx的這些妙用,你確定有不知道的!》 ,在Nginx的配置文件夾中添加git.conf
配置文件,內容以下: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;
}
}
複製代碼
git.macrozheng.com
這個域名來訪問Gitlab了,輸入帳號密碼root:12345678
便可登陸;hostname
的話,你的項目HTTP訪問地址會是容器的ID,使用該地址會沒法訪問Git倉庫!Gitlab只是個代碼倉庫,想要實現CI/CD還需安裝
gitlab-runner
,gitlab-runner
至關於Gitlab中任務的執行器,Gitlab會在須要執行任務時調用它。git
gitlab-runner
的Docker鏡像,選用alpine-bleeding
,這個版本很是小巧!docker pull gitlab/gitlab-runner:alpine-bleeding
複製代碼
gitlab-runner
;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
複製代碼
gitlab-runner
的容器日誌的話,會發現以下錯誤,config.toml
文件找不到,這個問題沒必要擔憂,當咱們將gitlab-runner
註冊到Gitlab時,會自動生成該文件;ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory builds=0
複製代碼
gitlab-runner
註冊到Gitlab,打開Project->Settings->CI/CD
功能,獲取到runner註冊須要使用的地址和token;gitlab-runner
容器的內部;docker exec -it gitlab-runner /bin/bash
複製代碼
gitlab-runner register
複製代碼
config.toml
文件已經生成,內容以下,之後想修改runner配置的時候,直接改這個文件就好了。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"
複製代碼
SpringBoot項目打包須要依賴Maven,咱們須要在服務器上先安裝好它。github
cd /mydata
tar -zxvf apache-maven-3.8.1-bin.tar.gz
複製代碼
/etc/profile
文件,添加環境變量配置:export MAVEN_HOME=/mydata/apache-maven-3.8.1
export PATH=$PATH:$MAVEN_HOME/bin
複製代碼
mvn -v
複製代碼
Maven home: /mydata/apache-maven-3.8.1
Java version: 1.8.0_292, vendor: AdoptOpenJDK, runtime: /mydata/java/jdk1.8/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
複製代碼
CentOS上默認安裝的是JRE,使用Maven須要安裝JDK。docker
cd /mydata/java
tar -zxvf OpenJDK8U-jdk_x64_linux_xxx.tar.gz
mv OpenJDK8U-jdk_x64_linux_xxx.tar.gz jdk1.8
複製代碼
/etc/profile
文件中添加環境變量JAVA_HOME
。vi /etc/profile
# 在profile文件中添加
export JAVA_HOME=/mydata/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
# 使修改後的profile文件生效
. /etc/profile
複製代碼
一切準備就緒,接下來經過Gitlab的CI/CD功能就能夠實現SpringBoot應用的自動化部署了!apache
.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
複製代碼
docker
,因此咱們這裏是能夠執行的。若是你沒有設置標籤的話,須要在runner的編輯界面設置下讓runner能夠執行沒有標籤的Job;gitlab-runner
採用的是ssh
的執行器,它會登陸到咱們指定的服務器,執行咱們在.gitlab-ci.yml
中定義的script
命令,在此以前還會先從Git倉庫中獲取代碼,因此咱們還需修改下服務器上的host文件;vim /etc/hosts
192.168.7.134 git.macrozheng.com
複製代碼
Project->CI/CD->Pipelines
中發現正在執行的任務;Run Pipeline
按鈕便可;若是你用Gitlab做爲Git倉庫的話,使用它的CI/CD功能來實現自動化部署確實很不錯!安裝一個輕量級gitlab-runner
,編寫簡單的.gitlab-ci.yml
腳本文件便可實現。其實咱們以前以及介紹過不少種自動化部署方案,好比Jenkins、Gogs+Drone、Gitlab CI/CD,咱們能夠發現一個共同點,這些方案都離不開Linux命令。 因此說要想玩轉自動化部署,仍是得先玩轉Linux命令!vim
官方文檔:docs.gitlab.com/ee/ci/bash
本文 GitHub github.com/macrozheng/… 已經收錄,歡迎你們Star!