Jenkins持續整合入門到精通(進階篇)
視訊參考:https://www.bilibili.com/video/BV1Vp4y1b7ZN?p=51
1. Jenkins+Docker+SpringCloud持續整合流程說明
大致流程說明:
1)開發人員每天把程式碼提交到Gitlab程式碼倉庫
2)Jenkins從Gitlab中拉取專案原始碼,編譯並打成jar包,然後構建成Docker映象,將映象上傳到Harbor私有倉庫。
3)Jenkins傳送SSH遠端命令,讓生產部署伺服器到Harbor私有倉庫拉取映象到本地,然後建立容器。
4)最後,使用者可以訪問到容器
服務列表
2.環境準備
2.1 SpringCloud微服務原始碼概述
專案架構: 前後端分離
後端技術棧: SpringBoot+SpringCloud+SpringDataJpa(Spring全家桶)
微服務專案結構:
tensquare_parent:父工程,存放基礎配置
tensquare_common:通用工程,存放工具類
tensquare_eureka_server:SpringCloud的Eureka註冊中心
tensquare_zuul:SpringCloud的閘道器服務
tensquare_admin_service:基礎許可權認證中心,負責使用者認證(使用JWT認證)
tensquare_gathering:一個簡單的業務模組,活動微服務相關邏輯
資料庫結構:
(1)本地部署微服務
SpringBoot微服務專案打包,必須在pom中匯入該外掛
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
打包後在target下產生jar包
前端靜態web網站
前端技術棧: NodeJS+VueJS+ElementUI
使用Visual Studio Code開啟原始碼
1)本地執行
npm run dev
打包靜態web網站
npm run build
打包後,產生dist目錄的靜態檔案
3)部署到nginx伺服器
把dist目錄的靜態檔案拷貝到nginx的html目錄,啟動nginx
4)啟動nginx,並訪問
http://localhost:82
2.2 Docker安裝和配置
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。
Docker容器技術 vs 傳統虛擬機器技術
Docker技術就是讓我們更加高效輕鬆地將任何應用在Linux伺服器部署和使用
2.2.1 Docker安裝
(1)解除安裝舊版本
yum list installed | grep docker 列出當前所有docker的包
yum -y remove docker的包名稱 解除安裝docker包
rm -rf /var/lib/docker 刪除docker的所有映象和容器
(2)安裝必要的軟體包
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
(3)設定下載的映象倉庫
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/dockerce.repo
(4)列出需要安裝的版本列表
yum list docker-ce --showduplicates | sort -r
5)安裝指定版本
sudo yum install docker-ce-18.06.1.ce
6)檢視版本
docker -v
7)啟動Docker
sudo systemctl start docker 啟動
sudo systemctl enable docker 設定開機啟動
8)新增阿里雲映象下載地址
vi /etc/docker/daemon.json
內容如下
{
"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"]
}
9)重啟Docker
sudo systemctl restart docker
Docker基本命令快速入門
1)映象命令
映象:相當於應用的安裝包,在Docker部署的任何應用都需要先構建成為映象
docker search 映象名稱 搜尋映象
docker pull 映象名稱 拉取映象
docker images 檢視本地所有映象
docker rmi -f 映象名稱 刪除映象
docker pull openjdk:8-jdk-alpine
2)容器命令
容器:容器是由映象建立而來。容器是Docker執行應用的載體,每個應用都分別執行在Docker的每個容器中
docker run -i 映象名稱:標籤 執行容器(預設是前臺執行)
docker ps 檢視執行的容器
docker ps -a 查詢所有容器
常用的引數:
-i:執行容器
-d:後臺守方式執行(守護式)
–name:給容器新增名稱
-p:公開容器埠給當前宿主機
-v:掛載目錄
docker exec -it 容器ID/容器名稱 /bin/bash 進入容器內部
docker start/stop/restart 容器名稱/ID 啟動/停止/重啟容器
docker rm -f 容器名稱/ID 刪除容器
2.3 Dockerfile映象指令碼快速入門
Dockerfile其實就是我們用來構建Docker映象的原始碼,當然這不是所謂的程式設計原始碼,而是一些命令的組合,只要理解它的邏輯和語法格式,就可以編寫Dockerfile了。
簡單點說,Dockerfile的作用:它可以讓使用者個性化定製Docker映象。因為工作環境中的需求各式各樣,網路上的映象很難滿足實際的需求。
dockerfile常見命令
映象構建示意圖:
可以看到,新映象是從基礎映象一層一層疊加生成的。每安裝一個軟體,就在現有映象的基礎上增加一層。
RUN、CMD、ENTRYPOINT的區別?
RUN:用於指定 docker build 過程中要執行的命令,即是建立 Docker 映象(image)的步驟
CMD:設定容器的啟動命令, Dockerfile 中只能有一條 CMD 命令,如果寫了多條則最後一條生效,CMD不支援接收docker run的引數。
ENTRYPOINT:入口程式是容器啟動時執行的程式, docker run 中最後的命令將作為引數傳遞給入口程式 ,ENTRYPOINY類似於 CMD 指令,但可以接收docker run的引數 。
以下是mysql官方映象的Dockerfile示例:
FROM oraclelinux: 7 - slim
ARG MYSQL_SERVER_PACKAGE = mysql - community - server - minimal - 5.7.28
ARG MYSQL_SHELL_PACKAGE = mysql - shell - 8.0.18
# Install server
RUN yum install -y https://repo.mysql.com/mysql-community-minimal-release- el7.rpm \
https://repo.mysql.com/mysql-community-release-el7.rpm \
&& yum-config-manager --enable mysql57-server-minimal \
&& yum install -y \
$MYSQL_SERVER_PACKAGE \
$MYSQL_SHELL_PACKAGE \
libpwquality \
&& yum clean all \
&& mkdir /docker-entrypoint-initdb.d
VOLUME /var/lib/mysql COPY docker-entrypoint.sh /entrypoint.sh
COPY healthcheck.sh /healthcheck.sh
ENTRYPOINT ["/entrypoint.sh"]
HEALTHCHECK CMD /healthcheck.sh
EXPOSE 3306 33060
CMD ["mysqld"]
使用Dockerfile製作微服務映象
我們利用Dockerfile製作一個Eureka註冊中心的映象
1)上傳Eureka的微服務jar包到linux的某個目錄下
2)在編寫Dockerfile
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 10086
ENTRYPOINT ["java","-jar","/app.jar"]
3)構建映象
docker build --build-arg JAR_FILE=tensquare_eureka_server-1.0-SNAPSHOT.jar -t eureka:v1 .
注意最後有一個.表示當前路徑
4)檢視映象是否建立成功
docker images
5)建立容器
docker run -i --name=eureka -p 10086:10086 eureka:V1
6)訪問容器
http://192.168.66.101:10086
2.4.Harbor映象倉庫安裝及使用
Harbor(港口,港灣)是一個用於儲存和分發Docker映象的企業級Registry伺服器。
除了Harbor這個私有映象倉庫之外,還有Docker官方提供的Registry。相對Registry,Harbor具有很多優勢:
- 提供分層傳輸機制,優化網路傳輸 Docker映象是是分層的,而如果每次傳輸都使用全量檔案(所以用FTP的方式並不適合),顯然不經濟。必須提供識別分層傳輸的機制,以層的UUID為標識,確定傳輸的物件。
- 提供WEB介面,優化使用者體驗 只用映象的名字來進行上傳下載顯然很不方便,需要有一個使用者介面可以支援登陸、搜尋功能,包括區分公有、私有映象。
- 支援水平擴充套件叢集 當有使用者對映象的上傳下載操作集中在某伺服器,需要對相應的訪問壓力作分解。
- 良好的安全機制 企業中的開發團隊有很多不同的職位,對於不同的職位人員,分配不同的許可權,具有更好的安全性。
2.4.1 HarBor安裝
需要安裝在92.168.66.102上面
1)先安裝Docker並啟動Docker(參考以前的)
2)安裝docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker- compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
3)給docker-compose新增執行許可權
sudo chmod +x /usr/local/bin/docker-compose
4)檢視docker-compose是否安裝成功
docker-compose -version
5)下載Harbor的壓縮包(本課程版本為:v1.9.2)
https://github.com/goharbor/harbor/releases
6)上傳壓縮包到linux,並解壓
tar -xzf harbor-offline-installer-v1.9.2.tgz
mkdir /opt/harbor
mv harbor/* /opt/harbor
cd /opt/harbor
7)修改Harbor的配置
vi harbor.yml
修改hostname和port
hostname: 192.168.66.102
port: 85
8)安裝Harbor
./prepare
./install.sh
9)啟動harbor
docker-compose up -d 啟動
docker-compose stop 停止
docker-compose restart 重新啟動
10)訪問Harbor
http://192.168.66.102:85
預設賬戶密碼:admin/Harbor12345
2.4.2在Harbor建立使用者和專案
1)建立專案
Harbor的專案分為公開和私有的:
公開專案:所有使用者都可以訪問,通常存放公共的映象,預設有一個library公開專案。
私有專案:只有授權使用者才可以訪問,通常存放專案本身的映象。
我們可以為微服務專案建立一個新的專案:
2)建立使用者
建立的使用者為: itcast/Itcast123
3)給私有專案分配使用者
進入tensquare專案->成員
4)以新使用者登入Harbor
2.4.3 把映象上傳到Harbor
1)給映象打上標籤
docker tag eureka:v1 192.168.66.102:85/tensquare/eureka:v1
2)推送映象
docker push 192.168.66.102:85/tensquare/eureka:v1
如果出現以下錯誤:
The push refers to repository [192.168.66.102:85/tensquare/eureka]
Get https://192.168.66.102:85/v2/: http: server gave HTTP response to HTTPS client
解決方法:把Harbor地址加入到Docker信任列表
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.66.102:85"]
}
需要重啟Docker
4)再次執行推送命令,會提示許可權不足
denied: requested access to the resource is denied
需要先登入Harbor,再推送映象
5)登入Harbor
docker login -u 使用者名稱 -p 密碼 192.168.66.102:85
從Harbor下載映象(注意這個是在103機器上修改和前面的有區別)
需求:在192.168.66.103伺服器完成從Harbor下載映象
1)安裝Docker,並啟動Docker(已經完成)
2)修改Docker配置
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.66.102:85"]
}
重啟docker
3)先登入,再從Harbor下載映象
docker login -u 使用者名稱 -p 密碼 192.168.66.102:85
docker pull 192.168.66.102:85/tensquare/eureka:v1