1. 序言
在大學的課程學習,非常注重團隊協作的培養,在企業開發中,團隊協作開發專案的場景更是甚多,另外,在當下的熱門技術堆疊中,微服務開發模式、前后端分離開發模式逐漸盛行,Spring Boot、VUE等熱門技術,更是吸引了眾多技術人員,當下的專案開發程序中,人們更加追求高內聚、低耦合,特別是前后端分離開發模式的提出,
但是,做到低耦合的同時,也有一系列的問題產生,比如在團隊協作開發程序中,后臺開發人員新開發了一個功能,需要交給前端來配置,或者是交給測驗人員進行測驗,怎么實作?以往的操作是后臺開發人員push專案到Git,前端/測驗pull專案到本地,然后再編譯、開發前端和測驗專案,這要求無論是后端、前端開發人員,還是測驗人員,每個人的電腦都需要有相同的配置,整個開發流程非常繁瑣復雜,
所以,Gitlab提出了的持續集成與持續交付的概念,即后臺開發人員實作新功能后,將專案Push到Gitlab服務器,Gitlab服務器能夠將專案自動集成,然后編譯專案,并將專案部署到服務器,而對于前端開發人員和測驗人員,只需要得到部署后的專案鏈接(或IP地址),即可進行前端專案的開發,以及各種介面的測驗,在這個程序中,只需要后臺開發人員和服務器的配置一致即可,開發人員與測驗人員的配置無需關注,
本文將基于Ubuntu18.04系統,從基本開發環境配置、Docker安裝與Gitlab安裝,以及Spring Boot專案的持續集成與持續交付功能方面,講述完整的使用程序,
注意,完整的部署程序需要具備Spring Boot、Linux和Docker的相關知識,可參考:
https://www.zxdmy.com/category/linux
https://www.zxdmy.com/category/docker
https://www.zxdmy.com/category/java
本文主要內容:
- 1. 序言
- 2. 配置鏡像源
- 2.1 配置阿里云鏡像源
- 2.2 配置華為云鏡像源
- 3. 安裝JDK
- 3.1 下載與上傳JDK
- 3.2 安裝與配置環境變數
- 3.3 測驗安裝
- 3.4 部分錯誤示例
- 4. 安裝Maven
- 4.1 下載與上傳
- 4.2 安裝與配置環境變數
- 4.3 測驗安裝
- 4.4 配置Maven鏡像源
- 5. 安裝Docker
- 5.1 安裝Docker.
- 5.2 配置Docker鏡像源
- 6. 安裝Docker Compose
- 6.1 X64系統的安裝與驗證
- 6.2 Arm64系統的安裝與驗證
- 7. 安裝Gitlab
- 7.1 常用命令
- 7.2 安裝Gitlab
- 7.3 配置發件郵箱
- 7.4 創建專案
- 8. 安裝與使用Gitlab Runner
- 8.1 安裝Gitlab Runner
- 8.2 注冊Runner與Demo測驗
- 8.3 問題解決
- 9. 關機與開機
- 參考資料
2. 配置鏡像源
為什么配置鏡像源?
因為Ubuntu系統原始的鏡像源地址是國外服務器,國內服務器下載速度非常慢,所以需要替換成國內的鏡像源,提高軟體下載速度,
如果是阿里云的服務器,推薦使用阿里云的鏡像,如果是華為云的服務器,推薦使用華為云的鏡像,
(筆者華為云的服務器用阿里云的鏡像,無法訪問,報404錯誤)
2.1 配置阿里云鏡像源
阿里云的鏡像源網址:https://developer.aliyun.com/mirror/
阿里云Ubuntu鏡像源配置網址:https://developer.aliyun.com/mirror/ubuntu
主要操作步驟如下:
A. 備份 sources.list 檔案,參考命令:
sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
B. 使用熟悉的編輯器(如vi)打開 sources.list,參考命令:
vi /etc/apt/sources.list
C. 將所有的 http://archive.ubuntu.com/ 替換為 http://mirrors.aliyun.com/
D. 保存即可
E. 執行 apt-get update 更新索引,
2.2 配置華為云鏡像源
華為云的鏡像源網址:https://mirrors.huaweicloud.com/
A. 備份sources.list ,同上,
B. 修改sources.list檔案,將http://archive.ubuntu.com和http://security.ubuntu.com替換成http://mirrors.huaweicloud.com,參考命令:
sudo sed -i "s@http://.*archive.ubuntu.com@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list
或者直接使用下面的命令,直接下載替換檔案(注意系統是不是bionic版本):
wget -O /etc/apt/sources.list https://mirrors.huaweicloud.com/repository/conf/Ubuntu-Ports-bionic.list
C. 保存即可
D. 執行 apt-get update 更新索引,
更新鏡像源后的 sources.list 檔案如下:

3. 安裝JDK
為什么要安裝JDK?
因為專案是Java開發的,
下文以 JDK 1.8.0_181 為例
3.1 下載與上傳JDK
Oracle官方下載地址:https://www.oracle.com/java/technologies/javase-downloads.html
華為云鏡像下載地址:https://mirrors.huaweicloud.com/java/jdk/
可以使用FinalShell進行上傳:

3.2 安裝與配置環境變數
主要流程參考命令如下:
A. 解壓縮(在壓縮包的目錄下運行)
tar -zxvf jdk-8u181-linux-x64.tar.gz
B. 創建目錄
mkdir -p /usr/local/java
Linux系統一般將用戶按照的軟體放在 usr/local 目錄下,
-p:遞回創建,即創建子目錄
C. 移動安裝包
mv jdk1.8.0_181/ /usr/local/java/
D. 設定所有者
chown -R root:root /usr/local/java/
-R :遞回設定,即子目錄即目錄下的所有檔案均設定所有者
E. (可選,一般不用)打開系統環境變陣列態檔
vi /etc/environment
F. (可選,一般不用)添加環境變數
# 默認有這行
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
# 從這里開始添加
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=/usr/local/java/jdk1.8.0_181/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
G. 打開用戶環境變陣列態檔
vi /etc/profile
H. 添加用戶環境變數資訊
# 默認有這段
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
# 從這里開始添加,檔案名注意修改為自己的檔案名
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=/usr/local/java/jdk1.8.0_181/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
# 到這里結束
I. 使用戶環境變數生效
source /etc/profile
3.3 測驗安裝
java -version
正確輸出:

(可選操作)為其他用戶更新用戶環境變數:
su snzl #snzl為其他用戶名
source /etc/profile
3.4 部分錯誤示例
如果安裝完成后,提示錯誤資訊
-bash: /usr/local/java/jdk1.8.0_181/bin/java: cannot execute binary file: Exec format error
如圖:

應考慮:
① 給bin檔案夾下的檔案增加執行權限
chmod +x filename
② 選擇的JDK錯誤,如系統架構(arm64、X64、arm32、X32)等,

4. 安裝Maven
為什么要安裝Maven?
因為專案使用Maven來管理包,
下文以 maven 3.6.0 為例,
4.1 下載與上傳
Apache官方下載地址:https://maven.apache.org/download.cgi
華為云鏡像下載地址:https://repo.huaweicloud.com/apache/maven/maven-3/
上傳可以使用FinalShell,

4.2 安裝與配置環境變數
基本操作方法同JDK,參考命令如下:
A. 解壓縮(在壓縮包的目錄下運行)
tar -zxvf apache-maven-3.6.0-bin.tar.gz
B. 創建目錄
mkdir -p /usr/local/maven
Linux系統一般將用戶按照的軟體放在 usr/local 目錄下,
-p:遞回創建,即創建子目錄
C. 移動安裝包
mv apache-maven-3.6.0 /usr/local/maven/
D. 設定所有者
chown -R root:root /usr/local/maven/
-R :遞回設定,即子目錄即目錄下的所有檔案均設定所有者
E. 打開用戶環境變陣列態檔
vi /etc/profile
F. 添加用戶環境變數資訊
# 默認有這段
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
# 從這里開始添加, 如果原來有JDK配置,直接追加即可
export M2_HOME=/usr/local/maven/apache-maven-3.6.0
export CLASSPATH=$CLASSPATH:$M2_HOME/bin
export PATH=$PATH:$M2_HOME/bin
# 到這里結束
如圖:

I. 使用戶環境變數生效
source /etc/profile
4.3 測驗安裝
mvn -v
正確輸出:

4.4 配置Maven鏡像源
為什么要配置Maven鏡像源?
因為專案要下載各種包,使用國內的鏡像源,下載速度快,
鏡像源主要有兩個,一般用阿里云或者華為云的,主要看虛擬機的服務商是哪個,
阿里云Maven鏡像源網址:https://developer.aliyun.com/mirror/maven
阿里云鏡像配置:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共倉庫</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
或(這個好像是舊版,筆者本文用這個)
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
華為云鏡像源網址:https://mirrors.huaweicloud.com/
華為云鏡像源配置:
<mirror>
<id>huaweicloud</id>
<mirrorOf>*</mirrorOf>
<url>https://repo.huaweicloud.com/repository/maven/</url>
</mirror>
如何配置?
其實主要是修改Maven安裝目錄下的 conf/settings.xml 檔案,
在settings.xml檔案的 <mirrors>…… </mirrors> 標簽里添加上述配置代碼即可,

參考命令:
vi /usr/local/maven/apache-maven-3.6.0/conf/settings.xml
注意:
一般情況下(特別是Windows系統),Maven都會在用戶檔案夾下生成一個.m2的檔案,這個檔案是針對當前用戶有效的,這個檔案夾里也有一個settings.xml檔案,如果在這個檔案夾下配置上述鏡像源,則只針對當前用戶有效,一般是多用戶系統使用這種配置,
如何驗證配置是否生效?使用下面命令即可:
mvn help:system
這個命令是干嘛用的呢?
官網給出的解釋是:Displays a list of the platform details like system properties and environment variables.
這個命令可以列印出來所有的環境配置,對開發非常有用,
首次運行的時候,會自動幫我們到Maven中央倉庫下載預設的或者Maven中央倉庫更新的各種組態檔和類別庫(jar包)到Maven本地倉庫中,這時候可以觀察下載路徑,即可判斷是否生效,
5. 安裝Docker
為什么用Docker?
因為Docker好用,
5.1 安裝Docker.
參考命令如下:
A. 卸載舊版本
apt-get remove docker docker-engine docker.io containerd runc
B. 使用 APT 安裝
apt install docker.io
C. 驗證安裝是否成功
docker version
如圖:

5.2 配置Docker鏡像源
如果你的服務器是阿里云的,則選擇阿里云的鏡像加速地址,
如果你的服務器是華為云的,則選擇華為云的鏡像加速地址,
華為云鏡像中心網址:https://console.huaweicloud.com/swr/?region=cn-north-4#/app/swr/huaweiOfficialList

阿里云鏡像中心網址:https://www.aliyun.com/product/acr?source=5176.11533457&userCode=isjae3ee
訪問后,進入“管理控制臺”即可,

使用下面的命令直接添加到檔案(記得替換下面的XXXXXX):
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://XXXXXX.mirror.swr.myhuaweicloud.com"]
}
EOF
然后重啟Docker,使其生效(依次執行):
systemctl daemon-reload
systemctl restart docker
驗證配置是否成功:
docker info
示例輸出(主要看最后幾行):
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.6
###### 這里省略大段資訊
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://XXXXXX.mirror.swr.myhuaweicloud.com/ # 看這里
Live Restore Enabled: false
WARNING: No swap limit support
6. 安裝Docker Compose
為什么用Docker Compose?
因為Docker Compose專案是 Docker 官方的開源專案,能夠實作對 Docker 容器集群的快速編排,非常好用,
6.1 X64系統的安裝與驗證
首先訪問Docker Compose的官方開源專案網站:https://github.com/docker/compose/releases ,找到 Latest release 版本,記下版本號,

然后使用下面的命令一鍵安裝(注意替換版本號):
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
如果安裝太慢,使用下面的備用鏈接(注意替換版本號):
curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
很快安裝完成,這時docker-compose不是可執行檔案,為其增加可執行權限:
chmod +x /usr/local/bin/docker-compose
驗證安裝成功與否的命令如下:
docker-compose version
示例輸出:
docker-compose version 1.25.4, build 8d51620a
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
6.2 Arm64系統的安裝與驗證
由于華為鯤鵬服務器采用華為自研cpu ARMv8架構,所以安裝方式和一般服務器安裝方式不同,即華為云服務器需要用pip方式安裝,
A. 安裝pip
sudo apt-get install libssl-dev libffi-dev python3 python3-pip
B. 使用pip命令安裝Docker Compose,如下:
pip install docker-compose
如果用上面這個命令下載很慢的話,替換成國內鏡像下載,參考命令如下:
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple docker-compose
或
pip3 install -i https://mirrors.aliyun.com/pypi/simple docker-compose
或
python -m pip install -U -i https://mirrors.aliyun.com/pypi/simple docker-compose
C. 驗證安裝成功與否:
docker-compose version
D. 安裝成功后的輸出:
docker-compose version 1.27.4, build unknown
docker-py version: 4.3.1
CPython version: 3.6.9
OpenSSL version: OpenSSL 1.1.1 11 Sep 2018
7. 安裝Gitlab
使用Docker Compose一鍵安裝,
7.1 常用命令
啟動:docker-compose up
后臺啟動:docker-compose up -d
停止:docker-compose down
查看容器:docker ps
查看全部容器:docker ps -a
7.2 安裝Gitlab
Linux有個不成文的規則:所有用戶手動安裝的軟體,均放在 /usr/local/ 目錄下,
首先進入 /usr/local 目錄下,創建一個名為 docker 的檔案夾,并在該檔案夾里創建一個名為 gitlab 的檔案夾,用來放Gitlab的組態檔,
參考命令(依次執行):
cd /usr/local
mkdir docker
cd docker
mkdir gitlab
cd gitlab
然后在 gitlab檔案夾下新建一個名為 docker-compose.yaml 的組態檔,名字是固定的.
vi docker-compose.yaml
寫入內容:
version: '3'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh'
restart: always
# 專案的主機名,填寫IP或域名,如果埠號非80,請添加埠號
hostname: 'gitlab.yourdomain.com'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.cxhit.com'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_port'] = 80
# 配置郵箱,以qq郵箱為例
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "郵箱@qq.com"
gitlab_rails['smtp_password'] = "smtp授權碼"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = "郵箱@qq.com"
user['git_user_email'] = "郵箱@qq.com"
ports:
- '8099:80'
- '8443:443'
- '2222:22'
volumes:
- ./config:/etc/gitlab
- ./data:/var/opt/gitlab
- ./logs:/var/log/gitlab
:set paste 使用這個vi命令,原樣粘貼,
埠ports:左邊宿主機(即服務器),右邊容器
使用如下命令后臺啟動容器:
docker-compose up -d
-d :后臺執行,不加的話,可查看詳細啟動資訊
7.3 配置發件郵箱
如果上面的配置中的郵箱無法發送郵件,可采用下面的方式配置,
首先進入gitlab的安裝目錄(本文中的/usr/local/docker/gitlab)中的config檔案夾下,參考命令:
cd /usr/local/docker/gitlab/config
然后查看全部檔案,即可看到名為gitlab.rb的檔案,
使用vi編輯器打開:
vi gitlab.rb
按 / 后,輸入 smtp ,按回車鍵后,定位到郵件配置模塊,
取消前面所有的 # ,按照下面的示例修改配置:
### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**
### 從這里開始,下文以qq郵箱為例
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "郵箱@qq.com"
gitlab_rails['smtp_password'] = "smtp授權碼"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
### 下面兩行需要手動添加
gitlab_rails['gitlab_email_from'] = "郵箱@qq.com"
user['git_user_email'] = "郵箱@qq.com"
### 到這里結束
###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
然后進入gitlab容器,參考命令(依次執行):
docker ps
sudo docker exec -it 容器ID /bin/bash
重新配置,并重啟容器,參考命令如下(依次執行,時間較長):
gitlab-ctl reconfigure
gitlab-ctl restart
然后進入gitlab控制臺,參考命令:
gitlab-rails console
稍等片刻,出來 > 箭頭,即可輸入發送測驗郵件的命令,
參考命令:
Notify.test_email('*******@qq.com','email title','email content desc').deliver_now
如果能收到郵件,則說明配置正確,

7.4 創建專案
關于gitlab的具體使用方法,請參考百度,
主要操作有四個:
A. commit:是將本地修改過的檔案提交到本地庫中,有些修改是不需要同步至服務器的,至于什么時候同步,由用戶自己選擇,
B. push:是將本地庫中的最新資訊發送給遠程庫,
C.fetch:是將遠程主機的最新內容拉到本地,用戶在檢查了以后決定是否合并到作業本機分支中,
D. pull:則是將遠程主機的最新內容拉下來后直接合并,即:git pull = git fetch + git merge,這樣可能會產生沖突,需要手動解決,
8. 安裝與使用Gitlab Runner
8.1 安裝Gitlab Runner
官網的安裝參考鏈接:https://docs.gitlab.com/runner/install/linux-manually.html
命令如下:
A. 安裝(不同系統安裝命令不同,詳情看上面鏈接)
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
B. 授權可執行權限
sudo chmod +x /usr/local/bin/gitlab-runner
C. 創建持續集成用戶
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
D. 運行gitlab-runner服務(依次執行)
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
如果上面的start命名無法運行,請使用
sudo gitlab-runner run
關于gitlab-runner的詳細使用方法,可以使用下面的命令查看學習
gitlab-runner --help
到這里,gitlab-runner的安裝程序結束,
8.2 注冊Runner與Demo測驗
然后我們回到gitlab網站,打開前面創建的Spring Boot專案,在專案頁面中找到:設定-》CI/CD,然后展開runner下拉欄:

在專用Runner欄,繼續往下翻,找到URL和Token,我們用的的資訊是這兩個:

然后回到服務器,輸入下面的命令開始注冊:
gitlab-runner register
下圖(有一些配置錯誤)僅供參考,詳細的說明請繼續看:

詳細說明如下(注意看注釋):
### 輸入注冊的命令:
root@ubuntu:/usr/local/docker/gitlab# sudo gitlab-runner register
Runtime platform arch=amd64 os=linux pid=128903 revision=e95f89a0 version=13.4.1
Running in system-mode.
### 輸入注冊的URL,復制上面的
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://Your IP:8099/
### 輸入注冊的token,復制上面的
Please enter the gitlab-ci token for this runner:
XXXXXXXXXXXX
### 輸入專案描述,可以為空
Please enter the gitlab-ci description for this runner:
[ubuntu]: project description
### 輸入專案的標簽,
### 注意:填寫標簽后,每次push專案中的job有此標簽,才會觸發持續集成操作
### 如果為空,則每次提交都觸發,
Please enter the gitlab-ci tags for this runner (comma separated):
test,deploy
Registering runner... succeeded runner=27ZJ1iAs
### 選擇執行器,一般選擇shell,
Please enter the executor: shell, ssh, virtualbox, docker+machine, docker-ssh+machine, custom, docker-ssh, kubernetes, docker, parallels:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
至此,回傳到gitlab網站,重繪頁面,在專用Runner欄往下翻,即可看到注冊成功的Runner:

然后回傳到本地的專案,在專案的根目錄,創建兩個檔案,并分別寫入如下內容:

.gitlab-ci.yml :
stages:
- deploy #步驟名稱
deploy:
stage: deploy #步驟名稱
only:
- master #當且僅當master分支合并時 出發該ci腳本
script: #ci腳本
### 執行mvn命令打包,生成jar包
- mvn clean package
### 執行docker命令創建鏡像,呼叫Dockerfile檔案
- "docker build . -t cicdtest:last"
### 停止鏡像cicdtest_image,因為有修改
- docker stop cicdtest_image || true
### 洗掉鏡像cicdtest_image,即清理歷史鏡像
- docker rm cicdtest_image || true
### 重新構建鏡像,8181埠是服務器的埠,8080埠是容器的埠,即專案中設定的埠(默認8080)
- docker run --name cicdtest_image -p 8181:8080 -d cicdtest:last
Dockerfile :
# 構建docker鏡像
# 基礎鏡像使用Java
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER cxh
# VOLUME指定了臨時檔案目錄為/tmp
# 其效果是在主機 /var/lib/docker 目錄下創建了一個臨時檔案,并鏈接到容器的/tmp
VOLUME /tmp
# 將jar包添加到容器中并更名為app.jar
# 注意:這個jar包檔案名,請前方服務器 目錄查看
COPY target/cicdtest-0.0.1-SNAPSHOT.jar /app/app.jar
# 這個暫且不用
# COPY target/lib /app/lib
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","-Dspring.profiles.active=prod","/app/app.jar"]
上面兩個檔案寫完后,在專案的Controller類中寫幾個測驗用例:
package com.cicdtest.cicdtest.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/user")
public class UserController {
@GetMapping(value = "/getInfo/{id}")
public String getInfo(@PathVariable String id){
return "獲取ID為"+id+"的用戶的資訊";
}
}
然后執行Commit和Push命令,將專案推送到Gitlab,
回傳Gitlab網站,查看側邊欄的 CI/CD -> 流水線 模塊,即可看到提交的專案正在構建,

然后點擊 上圖示注 位置的按鈕,進入新頁面,點擊 下圖示注的位置:

即可查看詳細執行的命令:

這里可以觀察專案部署中的錯誤,及時調整和修改.gitlab-ci.yml、Dockerfile兩個檔案,
然后,通過服務器IP加埠的形式,即可訪問Demo中的實體:

至此,測驗人員、前端開發人員即可呼叫該API,
8.3 問題解決
參考:https://blog.csdn.net/ujm097/article/details/80794740
9. 關機與開機
如果是本地虛擬機里創建的服務器,關機前,記得在服務器將所有鏡像停止,再關機,否則關機時,會花費較長的時間:
docker ps
docker stop 鏡像ID
前面配置中,gitlab已經設定了開機自啟,
如果下次開機時,很長時間(5分鐘以上),gitlab沒有啟動,可使用下面命令開啟:
docker-compose up -d
gitlab-runner 啟動命令:
gitlab-runner run
參考資料
[1] https://mirrors.huaweicloud.com/
[2] https://www.zxdmy.com/article/21
[3] https://blog.csdn.net/Delicious_Life/article/details/104623788/
[4] https://blog.csdn.net/weixx3/article/details/80331538
[5] https://www.zhihu.com/question/396914065
[6] http://maven.apache.org/plugins/maven-help-plugin/system-mojo.html
[7] https://www.cnblogs.com/Lints/p/11163073.html
[8] https://www.zxdmy.com/article/33
[9] https://blog.csdn.net/weixin_44456979/article/details/105718165
[10] https://blog.csdn.net/smiletudy/article/details/104840048
[11] https://www.cnblogs.com/sanduzxcvbnm/p/13820198.html
[12] https://www.cnblogs.com/xhyan/p/6593075.html
[13] https://blog.csdn.net/SirLZF/article/details/88998450
[14] https://zhuanlan.zhihu.com/p/86158304
[15] https://www.cnblogs.com/sanduzxcvbnm/p/13820198.html
[16] https://blog.csdn.net/weixin_43915643/article/details/105991904
[17] https://blog.csdn.net/wbf810207/article/details/90412358
[18] https://blog.csdn.net/aixiaoyang168/article/details/72168834
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/273759.html
標籤:其他
