1. 程式人生 > 實用技巧 >Jenkins+docker +net core 3.1 實現自動化部署

Jenkins+docker +net core 3.1 實現自動化部署

基於docker 安裝Jenkins

  1. 拉取jenkins

    docker pull jenkins/jenkins
  2. 啟動docker容器

    mkdir /usr/local/jenkins
    chown -R 1000:1000 /usr/local/jenkins
    sudo chown -R 1000:1000 /var/run/docker.sock

    docker run -itd -p 8080:8080 -p 50000:50000 --name myjenkins --privileged=true -v /usr/local/jenkins:/var/jenkins_home -v /usr/bin/docker:/bin/docker -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins

  1. 開啟瀏覽器配置Jenkins

    http://118.24.51.65:8080/
  2. 檢視管理員密碼

    docker logs myjenkins

    進入myjenkins容器
    docker exec -it myjenkins bash
  3. 安裝推薦外掛 (等待安裝完成)

  4. 配置管理員密碼

  5. 修改根目錄(加速)

    1. /usr/local/jenkins/hudson.model.UpdateCenter.xml

      <sites>
      <site>
      <id>default</id>
      <url>http://mirror.xmission.com/jenkins/updates/update-center.json</url>
      </site>
      </sites>
    2. 等jenkins初始化完成後找到跟目錄下面updates檔案中default.json檔案做如下修改 /usr/local/jenkins/updates

      sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
    3. 重啟jenkins

      docker restart myjenkins
  6. Jenkins 系統管理-指令碼命令列,執行指令,修改時間

    System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai') 
  7. 安裝外掛

    Publish Over SSH
  8. 配置 進入系統管理-》系統設定 找到Publish Over SSH

  9. 配置linux地址

  10. 【原始碼管理】配置GIT地址

  11. 【構建觸發器】 選擇輪詢方式 * * * * * 表示每分鐘輪詢一次

  12. 構建環境【Delete workspace before build starts】勾選 表示刪除工作空間 、【Abort the build if it's stuck】 超時時間會終止

  13. 構建shell命令(映象跟容器名要小寫)

    #!/bin/bash

    # 獲取短版本號
    GITHASH=`git rev-parse --short HEAD`
    # 複製映象到根目錄
    cp WebApplication1/Dockerfile .

    # 容器名稱
    AppName=webapplication1

    echo ---------------刪除容器...------------------
    docker stop $AppName
    docker rm -f $AppName
    echo ---------------刪除映象...------------------
    echo '>>>獲取舊的映象'
    IID=$(docker images |grep -E "($AppName|none)" | awk '{print $3}')
    echo $IID
    if [ "$IID" != "" ];then
    echo '>>>刪除舊的映象'
    docker rmi -f $IID
    fi
    echo ---------------Building Docker Image...------------------

    docker build -t $AppName:$GITHASH .

    echo ---------------Launching Container...------------------

    docker run --name $AppName -d -p 8005:80 $AppName:$GITHASH

清空多餘的映象(參考)

docker image prune 

docker 下拉asp.net core 所需要的映象(防止超時)

docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:3.1-buster

參考網站Dockerfile

ENV TIMEZONE=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIMEZONE /etc/localtime && echo $TIMEZONE > /etc/timezone
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443


FROM registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:3.1-buster AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

ENV TIMEZONE=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIMEZONE /etc/localtime && echo $TIMEZONE > /etc/timezone

ENTRYPOINT ["dotnet", "WebApplication1.dll"]