當(dāng)前位置:首頁(yè) > IT技術(shù) > Web編程 > 正文

ASP.NET Core之Jenkins配置docker-compose編譯發(fā)布
2021-09-15 15:08:04

前言

由于每次發(fā)布拷貝文件都比較麻煩所以當(dāng)前配置了Jenkins并且使用docker-compose的方式編譯及發(fā)布項(xiàng)目,在gitee上配置webhook自動(dòng)提交代碼自動(dòng)觸發(fā)發(fā)布程序

工程目錄如下

1631683885704

其中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/

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >