在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
这边设的是每两分钟,可以自行设置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
文章评论