前言
由于每次發(fā)布拷貝文件都比較麻煩所以當(dāng)前配置了Jenkins并且使用docker-compose的方式編譯及發(fā)布項(xiàng)目,在gitee上配置webhook自動(dòng)提交代碼自動(dòng)觸發(fā)發(fā)布程序
工程目錄如下
其中build存放編譯項(xiàng)目的文件
dbinfo存放數(shù)據(jù)庫(kù)映射文件
env存放docker-compose需要的環(huán)境變量
publish存放發(fā)布后的文件(linux下)
src為源碼放置位置
安裝及配置Jenkins
創(chuàng)建docker版jenkins
docker run -u root -d -p 8090:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker-compose):/usr/local/bin/docker-compose jenkinsci/blueocean
暴露端口8090
掛載docker、docker-compose和jenkins_home
配置jenkins
代碼提交到了gitee上面了,配置連接
配置執(zhí)行shell
cd ${JENKINS_HOME}/workspace/zhao56.microservices.demo/zhao56.microservices.demo
chmod 777 ./build/build.sh
pwd
ls
echo $PATH
whoami
docker -v
cd build
docker-compose -f docker-compose-build.yml --env-file ../env/.env up --build
cd ../publish/
docker-compose down
docker-compose -f docker-compose-pod.yml -f docker-compose-pod.override.yml --env-file ../env/.env up -d --build
之所以要在執(zhí)行前為build.sh授權(quán)是因?yàn)槔聛?lái)以后腳本執(zhí)行不了
--env-file ../env/.env指定了環(huán)境變量的配置,當(dāng)這個(gè)配置在compose.yml的時(shí)候會(huì)出現(xiàn)無(wú)法讀取到路徑的問(wèn)題,要不就選擇該文件(命名為.env)與compose同目錄才能加載
先刪除容器,再通過(guò)build.sh編譯項(xiàng)目,最后通過(guò)docker-compose來(lái)發(fā)布項(xiàng)目
編譯腳本設(shè)置
編譯相關(guān)的有兩個(gè)
build.sh如下
#!/bin/bash
dotnet --info
dotnet --version
dotnet restore ./src/Services/SystemInfo/SystemInfo.Api
rm -rf ./publish/API/SystemInfo/
dotnet publish "./src/Services/SystemInfo/SystemInfo.Api/SystemInfo.Api.csproj" -c Release -o /sln/publish/API/SystemInfo
此處將對(duì)應(yīng)工程還原及發(fā)布到相應(yīng)的目錄
docker-compose-build.yml如下
version: '3.4'
services:
SystemInfo-build:
image: mcr.microsoft.com/dotnet/sdk:5.0-buster-slim
volumes:
- ${LINUX_HOST_PATH:?err}/:/sln #此處添加:?err是為了如果讀取不到環(huán)境變量就報(bào)錯(cuò)
working_dir: /sln
entrypoint: ["bash","./build/build.sh"]
networks:
- frontend
networks:
frontend:
name: build-network
此處注意:用bash而別用sh 要不就有可能會(huì)有加載不到文件的問(wèn)題
此處之所以要新建網(wǎng)絡(luò)而沒(méi)有用默認(rèn)的網(wǎng)絡(luò),是因?yàn)楣こ堂粯?,之后再找網(wǎng)絡(luò)可能找不到
編譯的docker-compose-build為上面的腳本提供了編譯必須的環(huán)境而不用安裝sdk
發(fā)布腳本設(shè)置
發(fā)布相關(guān)的有兩個(gè),
docker-compose-pod.yml如下
version: '3.4'
services:
systeminfo.api:
image: zhao56-systeminfoapi
container_name: systeminfo
build:
context: ./API/SystemInfo
dockerfile: ./Dockerfile-pod
depends_on:
- sqldata
sqldata:
image: mysql:8.0.26
container_name: zhao56db
command: --default-authentication-plugin=mysql_native_password
mysql8.0 引入了新特性 caching_sha2_password;這種密碼加密方式客戶端不支持;客戶端支持的是mysql_native_password 這種加密方式,所以此處myql容器創(chuàng)建的時(shí)候會(huì)默認(rèn)執(zhí)行上述命令
提供了發(fā)布的基本設(shè)置
docker-compose-pod.override.yml如下
version: '3.4'
services:
systeminfo.api:
ports:
- 5001:80
- 5000:443
volumes:
- ${LINUX_HOST_PATH:?err}/publish/docker-logs/systeminfo:/app/logs/
restart: always
sqldata:
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=zhao56
restart: always
volumes:
# 掛載數(shù)據(jù)目錄
- ${LINUX_HOST_PATH:?err}/dbinfo/data:/var/lib/mysql
# 掛載配置文件目錄
- ${LINUX_HOST_PATH:?err}/dbinfo/conf:/etc/my.cnf
# 數(shù)據(jù)庫(kù)還原目錄 可將需要還原的sql文件放在這里
- ${LINUX_HOST_PATH:?err}/dbinfo/init:/docker-entrypoint-initdb.d
ports:
- 3306:3306
提供了發(fā)布的擴(kuò)展配置
此處注意,由于jenkins是有docker發(fā)布的,所以當(dāng)在jenkins中使用docker-compose的時(shí)候配置的路徑如:
./
或../
等相對(duì)路徑會(huì)識(shí)別成jenkins中的路徑,但是掛載數(shù)據(jù)卷的時(shí)候指定的是宿主機(jī)的路徑,所以在編寫(xiě)之前盡量規(guī)劃好相應(yīng)的發(fā)布,日志等存放的路徑
dockerfile-pod
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY . .
ENTRYPOINT ["dotnet", "SystemInfo.Api.dll"]
由于想分離環(huán)境,配置相應(yīng)的腳本,所以當(dāng)前新建了dockerfile-pod
以用以發(fā)布的時(shí)候生成鏡像及容器
配置webHook
當(dāng)代碼提交時(shí)jenkins自動(dòng)編譯發(fā)布程序
詳細(xì)可參考gitee官網(wǎng)https://gitee.com/help/articles/4193#article-header11
本文摘自 :https://www.cnblogs.com/