剑峰的茅草屋

剑峰的茅草屋
程序猿的掉发日常
  1. 首页
  2. .Net
  3. 正文

使用jenkins 实现 .net core项目自动发布到 docker

2021 年 5 月 18 日 94点热度 0条评论

转载原文链接:使用jenkins 实现 .net core项目自动发布到 docker - osc_h5acks07的个人空间 - OSCHINA - 中文开源技术交流社区

 

在Docker内运行Jenkins

pull镜像 

docker pull jenkins/jenkins:lts

 

Dockerfile

不带DotNet5的JenKins(不建议)

FROM jenkins/jenkins:lts 

USER root 
ARG dockerGid=999 

RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group 

USER jenkins

带DotNet5的JenKins(建议)

# 封装Jenkins镜像(带有dotnet环境的) sdk=5.1
FROM jenkins/jenkins:lts
USER root
WORKDIR /dotnet
RUN wget -O dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/820db713-c9a5-466e-b72a-16f2f5ed00e2/628aa2a75f6aa270e77f4a83b3742fb8/dotnet-sdk-5.0.100-linux-x64.tar.gz
RUN tar zxf dotnet.tar.gz -C ./
RUN rm -rf dotnet.tar.gz
ENV PATH="${PATH}:/dotnet:/var/jenkins_home/.dotnet/tools"
ENV DOTNET_ROOT="/dotnet"
RUN apt update -y
RUN apt install icu-devtools vim zip unzip -y
RUN usermod -a -G root jenkins
USER jenkins

 

Build

docker build . -t my-jenkins

 

创建用户并加入docker组

useradd jenkins
usermod -G docker jenkins

Run

docker run --name jenkins -p 8030:8080 -p 50000:50000 -e TZ="Asia/Shanghai" -v /app/jenkins/jenkins_home:/var/jenkins_home -v /app/jenkins/settings:/var/settings -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -d my-jenkins
注意这两个volume参数(将jenkins容器内的docker命令指向了宿主机):
-v /var/run/docker.sock:/var/run/docker.sock
-v $(which docker):/usr/bin/docker
修改文件夹所有者
chown -R 1000:1000 /app/jenkins 
chown -R 1000:1000 /var/run/docker.sock

 

 

初始化

 

按提示填入密码,安装推荐的插件

 

 

 

进入

 

 

测试下容器内docker是否可用

 

容器中安装dotnet 5 环境(dockfile 已经包含该环境)

sudo yum install dotnet-sdk-5.0

sudo yum install aspnetcore-runtime-5.0

 

 准备.net Core 项目

我创建了个.net5 的MVC项目

 

并推送到Gitee。

 

Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["JenkinsWebDemo.csproj", ""]
RUN dotnet restore "./JenkinsWebDemo.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "JenkinsWebDemo.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "JenkinsWebDemo.dll"]

这里拉取了两个镜像一个带SDK是用来build,一个用来发布。

 

 

回到首页,新建一个任务:

 

 

 

然后配置任务:

 

从自己的gitee 中找到Repository UR

 

然后配置Build Triggers

 

 

最后,最重要的是Build,下拉框选择执行shell:

非编译发布

#!/bin/bash
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
docker stop testjenkins
docker rm testjenkins
docker build -t testjenkins:$GITHASH .
docker tag testjenkins:$GITHASH testjenkins:latest
docker run --name testjenkins -d -p 5000:80 testjenkins:latest

 编译发布

#进入dotnet core 目录
#ls
cd Colder.Admin.AntdVue
echo '============查看打包环境================' 
pwd
echo $PATH
whoami
which dotnet
dotnet --info
dotnet --version

#编译以及发布项目
dotnet restore
dotnet build
dotnet publish

ls
#打包后的进入文件夹
cd src/Coldairarrow.Api/bin/Debug/net5.0/
#停止正在运行的容器以及删除镜像
docker stop webapi
docker rm webapi 
docker rmi webapi_image
#重新构建镜像和容器
docker build -t webapi_image . 
docker run -d -p 8027:5000 --name webapi webapi_image

 

 

Jenkins就是根据前面的触发器触发这个脚本去构建镜像,持续部署。
这边设的是每两分钟,可以自行设置Gitee webhook 触发构建,Gitee webhook参考文档: https://gitee.com/help/articles/4193#article-header13

配置完后保存,查看任务,可以看到构建部署历史:

 

看一下构建好的网站

 

也可以设置成根据webhook,推送代码时自动构建。

在Jenkins中设置WebAppNet

 

Vue 项目部署

1.进入JenKins docker 容器内部

#找到容器
docker ps 
#进入容器
docker exec it -u root 容器id bash

 

2.容器中安装安装nodejs

curl -sL https://deb.nodesource.com/setup_16.x | bash -

apt-get install -y node.js

npm install -g yarn

nginux配置

server {
  listen 80;

  location / {
    root /app;
    index index.html;
    # vue的路由并不是真实物理路由,所以用try_files,路径都指向根目录下的index.html
    try_files $uri $uri/ /index.html;

    gzip on;#开启gzip
    gzip_types text/plain application/x-javascript application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  }
}

dockfile

# 设置基础镜像 
FROM nginx
WORKDIR /app
COPY default.conf /etc/nginx/conf.d/
COPY . .

Jenkins shell

cd Colder.Admin.AntdVue/src/Coldairarrow.Web

#ls
#rm -rf ./dist/*

yarn install

yarn run build

#打包后的进入文件夹
#cd /var/lib/jenkins/workspace/webapi/bin/Debug/netcoreapp3.1/publish/
cd dist
docker stop webfront
docker rm webfront 
docker rmi webfront_image
#重新构建镜像和容器
docker build -t webfront_image . 
docker run -d -p 8026:80 --name webfront webfront_image

 

 

 

 

标签: 暂无
最后更新:2021 年 5 月 18 日

sunjianfeng

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2024 剑峰的茅草屋. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

沪ICP备2021017081号