欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

程序员文章站 2022-04-14 19:38:38
1、准备工作 环境 本地: 、`Docker` 代码仓库: 服务器: 、`Docker` 前提准备 1. 创建个有 文件的 项目 新建一个dotnet 3.0的web项目,在项目文件夹添加Dockerfile文件,内容如下: 2. 准备git仓库,将项目的代码上传上去 3. 构建有 的`jenkin ......

1、准备工作

环境

  • 本地: windowsdocker
  • 代码仓库:git
  • 服务器:linuxdocker

前提准备

  1. 创建个有dockerfile文件的dotnet core 3 web项目
    新建一个dotnet 3.0的web项目,在项目文件夹添加dockerfile文件,内容如下:

    from mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim as base
    workdir /app
    expose 80
    copy . .
    entrypoint ["dotnet", "webapplication.dll"]
  2. 准备git仓库,将项目的代码上传上去
  3. 构建有dotnet core 3.0 环境jenkins

    from jenkins/jenkins:lts
    # 切换root用户安装东西
    user root
    # show distro information!
    run uname -a && cat /etc/*release
    run apt-get update
    run apt-get install -y curl libunwind8 gettext apt-transport-https
    run curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    run mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
    run sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/dotnetdev.list'
    run apt-get update
    run apt-get install -y dotnet-sdk-3.1
    # 切换回来jenkins用户
    user jenkins

因为jenkins里面是没有dotnetcore环境的,所以需要本地创建个支持dotnetcore环境的。
找个地方新建文件夹,创建dockerfile文件,内容如上。

  1. build镜像并运行容器

    docker build . -t jenkins_dotnet

    这里等待时间会比较长~

    # 运行刚刚构建好的容器
    docker run -d  --name jenkins -p 8080:8080 jenkins_dotnet
  2. 打开jenkins,安装推荐插件
    打开 ,可以看到
    本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

    docker exec -it jenkins bash
    dotnet --version
    cat /var/jenkins_home/secrets/initialadminpassword

    本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

    把密码复制出来登录,点击左边按钮安装推荐插件
    本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

    这里时间也会比较长,如果有部分安装失败了,等剩余的安装完后点击重试即可,如果服务器上还没有docker,现在可以去装下,装了的也可以连上服务器,去执行docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim拉取下dotnet core 3.1的镜像,等会创建镜像的时候就会快一点啦

    插件安装完后,会有一些创建管理员和地址配置,搞一下吧。
    本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

    如果有插件安装失败,点过重试安装插件的,现在需要docker restart jenkins重启下应用,然后重新打开使用创建的管理员登录。

2、搞好了,开始干活

哦,还有些需要安装的插件 =.=||

需要安装的插件:

  • scp publisher
  • publish over ssh
  • environment injector

进入 系统管理>插件管理->可选插件->输入插件名称->勾选需要插件->点击安装

安装完后,设置下这些插件,进入系统管理->系统配置,

  1. scp publisher设置
    ctrl + f 搜下 scp找到scp repository hosts-scp sites设置位置,点新增
    hostname: 服务器ip地址
    port:端口,默认22、
    root repository path:文件存放目录
    user name:登录用户名
    password/passphrase:密码
    本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

  2. publish over ssh 设置
    ctrl + f 搜下 scp找到scp repository hosts-ssh server设置位置,点新增再点高级勾选上 use password authentication, or use a different key
    name:名称
    hostname:服务器ip地址
    username:登录用户名
    remote directory:远程目录
    passphrase / password:密码
    port:连接端口(默认22)
    本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

配置完后别忘记点保存。

创建构建任务第一种:*风格的软件项目

点击新建任务, 选择构建一个*风格的软件项目
本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

  1. 源码管理设置
    选择git,在repository url填入git仓库地址
    本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

  2. 触发构建器
    可以配置一些定时构建等,我这里只是测试所以没有选择触发器。
    本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

  3. 构建环境
    1. 勾选delete workspace before build starts
    2. 勾选inject environment variables to the build process,存放构建是需要用到的环境变量
      本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上
  4. 构建- 添加执行shell步骤
    增加构建步骤-执行shell,脚本如下:

    #切换目录
    cd ./webapplication
    #还原nuget包
    dotnet restore
    #编译
    dotnet build
    #删除之前发布文件
    cd ./bin
    rm -rf web-publish
    rm -f web-publish.tar
    cd ..
    #发布
    dotnet publish -o ./bin/web-publish
    #删除配置文件
    cd ./bin/web-publish
    cp ../../dockerfile .
    rm -rf config
    cd ..
    #压缩
    tar -cvf web-publish.tar web-publish 
  5. 构建后步骤
    1. 上传文件到服务器
      增加构建后操作步骤-选择publish artifacts to scp repository ,填入需要上传的压缩文件
      本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上
      这里文件目录的基础目录是workspace,如果不知道具体的地址,可以先不创建构建后步骤保存下,然后点击立即构建,等待成功后,点击工作空间看下文件路径是怎样的,比如我的是这样的:
      本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上
      得到压缩文件目录是webapplication/bin/web-publish.tar

    2. 添加 服务器上要执行的shll命令 步骤

    增加构建后操作步骤- 选择 send build artifacts over ssh

    这里要新增两个transfers set,在第一个transfersexec command输入创建镜像脚本:

    # 工作目录
    work_dir="/root/publish/webapplication";
    cd ${work_dir}
    # 删除原有发布文件夹
    rm -rf web-publish;
    # 解压
    tar -xvf web-publish.tar;
    #删除文件压缩包
    rm -f web-publish.tar;
    #切换生成目录
    cd web-publish/
    #备份镜像
    #停止容器
    docker stop ${docker_container_name};
    #删除容器
    docker rm ${docker_container_name};
    #删除镜像
    docker rmi $(docker images | grep ${docker_image_name});
    #创建镜像
    docker build -t ${docker_image_name} ./;

    在第二个transfersexec command,输入运行容器命令:

    # 运行容器
    docker run -d -p 8001:80 --name  ${docker_container_name}  ${docker_image_name}

    本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上

    到这里所有的设置都已经搞好啦,别忘记点击保存,点击立即构建 测试一下吧~

创建构建任务第二种:流水线[pipeline](未完成)

todo:评论有位哥推荐流水线 可视化会好一点,有空再去尝试下发出来~

成果展示