前言
希望使用Jenkins 对git仓库的.net代码进行自动拉取,然后自动构建docker镜像,最后自动运行。开发人员只需要提交自己的代码,后面的发布都交给Jenkins来自动部署,
网上.net 相关的教程比较少,希望各位多多交流。
- 参考文章:
https://blog.csdn.net/feng005211/article/details/114818504
https://www.cnblogs.com/stulzq/p/8627824.html - 准备的代码:https://gitee.com/lizhounet/cicddemo
1.安装docker
官方文档:https://docs.docker.com/engine/install/centos/
#卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装yum-utils软件包
yum install -y yum-utils
#设置Docker仓库(这里使用阿里云地址)
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引
yum makecache fast
#centos8没有该参数去掉fast参数,就可以了
#yum makecache
#yum安装docker
#yum -y install docker
yum install docker-ce docker-ce-cli containerd.io
#设置docker开机自启
systemctl enable docker
#启动docker
systemctl start docker
2. Docker Jenkins安装
由于需要在Jenkins内执行dotnet,因为Jenkins是java开发,本身没有.net 环境(就算你宿主机有dotnet环境、docker中也有docker环境也不可以),所以我们只能构建一个包含Dotnet环境的镜像
使用Dockerfile创建包含dotnet的Jenkins镜像
Dockerfile
封装Jenkins镜像(带有dotnet环境的) sdk=5.1
# 封装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
命令解释
1.这个Docker镜像基于jenkins
2.设置当前用户为root,因为后面安装需要使用root
3.设置当前工作目录为dotnet
4.下载dotnet SDK包,保存为dotnet.tar.gz。这里要注意下载正确版本的SDK,可前往微软官方网站获取下载链接:https://dotnet.microsoft.com/download
5.解压dotnet SDK到当前目录,即/dotnet目录
6.删除dotnet SDK包
7.把dotnet目录和dotnet tools目录添加到环境变量PATH,这样就可以使用dotnet命令了
8.设置DOTNET_ROOT变量
9.更新源
10.安装一些必需的,常用的工具包,其中icu-devtools是运行dotnet需要的
11.修改jenkins用户到root附加组
12.设置当前用户为jenkins
构建镜像 name=jenkins:dotnet
docker build -t jenkins:dotnet .
注意最后的点
ps:如果出现 undefined symbol: seccomp_api_get
错误执行 yum -y install libseccomp
安装libseccomp即可
运行Jenkins:dotnet镜像
docker run -d -p 8080:8080 -p 50000:50000 --name mjenkins \
--privileged=true \
--restart always \
-u root \
-e TZ="Asia/Shanghai" \
-v /mudata/jenkins:/var/jenkins_home \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/sysconfig/docker:/etc/sysconfig/docker \
-v /mudata/webroot/:/mudata/webroot \
jenkins:dotnet
自动化部署
1.创建一个自由风格的软件项目
2.配置git
3.构建设置
H/2 * * * *
我这里选择轮询,2分钟一次
勾上 Delete workspace before build start
是设置构建前删除工作区
勾上 Abort the build if it's stuck
是设定构建的超时时间,如果构建使用的时间超过设定的时间,那么就认为这次的构建是失败的。笔者这里超时设置的是10分钟
4.编写shell脚本
# Jenkins 构建 测试服
echo '============查看打包环境================'
pwd
ls
echo $PATH
image_version=`date +%Y%m%d%H%M`;
echo $image_version;
dotnet --info
dotnet --version
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
# 切换到项目根目录
cd cicddemo
pwd
echo '============================begin restore======================================='
dotnet restore
echo '============================end restore======================================='
#docker run的容器名称
containerName=jenkinscicddemo
#制定run的端口
port=9994
#判斷是否存在
CID=$(docker ps | grep "${containerName}" | awk '{print $1}')
echo $CID
if [ "$CID" != "" ];then
docker stop ${containerName}
docker rm ${containerName}
docker rmi ${containerName}
#docker stop $CID
#docker rm $CID
fi
#通过Dockerfile重新构建镜像
docker build -t ${containerName} .
#docker run容器并绑定到端口
#docker run -d -p ${port}:80 --name ${containerName} ${containerName}
docker run --name ${containerName} --restart=always -d -p ${port}:${port} -v /etc/localtime:/etc/localtime:ro ${containerName}
echo "success!"
构建
保存之后点击立即构建
日志已显示运行成功!
访问地址已经访问成功
接下来测试一下最终结果
修改一下仓库源代码,然后再看Jenkins是否会自动部署最新代码。
我这里为了简便直接在gitee 修改代码
我这里是两分钟轮训一次,等待一下!!!!!
现在已经自动发布了
到此结束!!!!!!1
评论区