Jenkins+docker做持续集成
想坚持更新自己的博客这个想法已经很久了,一直都没有迈开第一步。在2018年的最后日子里迈开了这一步。
Jenkins和docker做持续集成主要是缘由是因为公司在.net的路上转头向.net core 发展,由于.net core的版本更新比较频繁在linux上安装和卸载.net core不太方便,于是有了Jenkins+docker的组合。
Jenkins主要是负责持续集成,docker实际负责集成.net core环境部署程序。
Jenkins和docke的集成环境:centos7
一、安装java环境
官网下载 jdk:jdk-8u171-linux-x64.rpm
安装 jdk
配置环境
vim /etc/profile 在最后加上下面的配置
JAVA_HOME=/usr/java/jdk1.8.0_171 CLASSPATH=.:$JAVA_HOME/lib.tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH
执行 source /etc/profile 配置生效
二、安装docker
安装基础环境 :yum install -y yum-utils device-mapper-persistent-data lvm2
获取docker源 :
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
获取docker版本列表:
yum list docker-ce --showduplicates|sort -r
安装docker:
yum install docker-ce版本号
docker安装后使用 docker infn 查询是否安装成功
启动daocker :
systemctl start docker
编辑daemon
vim /etc/docker/daemon.json
{ "registry-mirrors": ["https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn"],//docker镜像获取地址,一般都配成阿里的镜像这样速度回很快 "insecure-registries": [""],//配置你要有自己的私有镜像库通过配置这个可以访问 "max-concurrent-downloads": 10, "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "10m", "max-file": "3" } }
重新加载daemon :
systemctl daemon-reload
重启docker:
systemctl restart docker
这样docker安装完毕
三、安装Jenkins
官网下载 rpm包:https://pkg.jenkins.io/redhat-stable/ 我使用的是jenkins-2.121.1-1.1.noarch.rpm
下载
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.121.1-1.1.noarch.rpm
安装:
yum install -y jenkins-2.121.1-1.1.noarch.rpm
启动:
systemctl start jenkins
到这安装已经完成准备开始配置Jenkins
访问:http://ip:8080
提示需要/var/lib/jenkins/secrets/initialAdminPassword这里的密码
需要选择需要插件,这里可以选择推荐插件安装,后面还可以自己再选择安装其他插件,这里我选择默认安装
安装中
安装完成后的样子,这时候就可以安装自己想要插件了
我们项目使用使用的team foundation server存储项目,所以要安装tfs的插件
系统管理 -> 插件管理
插件安装完成就可以去构建项目了
新建构建任务
填写任务名称然后选择构建一个自由风格的软件项目
创建任务后进去会看到这些选择,有一个需要配置的在高级中
这里工作空间需要配置,为了后面的构建使用
配置项目源码获取,这里可以根据自己源码的存储方式选择获取方式,支持git,svn ,tfs是前面安装的插件才能支持的
配置好项目源后Jenkins就能获取到我们的项目了
这是构建触发器
这个是构建环境配置
Abort the build if it's stuck 这里配置构建项目的超时 ps:这里要预估下自己项目的构建时间,如果构建的时间超过了超时时间就构建失败
下面是构建的步骤,这个根据自己的环境来配置
我的构建步骤:
- 创建项目的docker镜像
- 清除创建镜像时产生的none镜像(因为会很占空间)
- 创建docker镜像的版本号(因为有自己的内部镜像库),同时推送镜像到镜像库
- 创建docker镜像的最新版本,同时推送镜像到镜像库 ps:这样做的主要目的如果项目是正常状态部署直接获取最新版本就可以了,版本可以用来回滚到以前的版本
这样项目就已经构建完成,并同推送到镜像库中
还有构建后的操作
这个可以配置ssh一些远程连接方式进行后续的部署。
这里我再分享下我的Dockerfile文件
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src COPY ["TxERP.NetCore.OrderingPolicy.Web/TxERP.NetCore.OrderingPolicy.Web.csproj", "TxERP.NetCore.OrderingPolicy.Web/"] COPY ["TxERP.NetCore.OrderingPolicy.Web/NuGet.config", "TxERP.NetCore.OrderingPolicy.Web/"] //如果你有自己的nuget私有库的话需要把nuget的配置文件拷贝进来,保证项目能获取到类库 RUN dotnet restore "TxERP.NetCore.OrderingPolicy.Web/TxERP.NetCore.OrderingPolicy.Web.csproj" --disable-parallel COPY . . WORKDIR "/src/TxERP.NetCore.OrderingPolicy.Web" RUN dotnet build "TxERP.NetCore.OrderingPolicy.Web.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "TxERP.NetCore.OrderingPolicy.Web.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone //镜像内部默认的是格林尼治时间,这样时间会快8小时,所以要把时区文件拷贝进来 ENTRYPOINT ["dotnet", "TxERP.NetCore.OrderingPolicy.Web.dll"]
这个Dockerfile时间项目建立docker文件的基础上做的改动可能有的朋友会用到
到此Jenkins和docke持续集成已经完成,谢谢各位能看完此文,有错误的地方还请大家给指出。