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"]

 

 

posted @ 2020-12-29 16:59  Alan黄  阅读(222)  评论(0)    收藏  举报