Jenkins+docker作持续集成

想坚持更新本身的博客这个想法已经好久了,一直都没有迈开第一步。在2018年的最后日子里迈开了这一步。java

Jenkins和docker作持续集成主要是原因是由于公司在.net的路上转头向.net core 发展,因为.net core的版本更新比较频繁在linux上安装和卸载.net core不太方便,因而有了Jenkins+docker的组合。linux

Jenkins主要是负责持续集成,docker实际负责集成.net core环境部署程序。git

Jenkins和docke的集成环境:centos7docker

1、安装java环境json

官网下载 jdk:jdk-8u171-linux-x64.rpmvim

安装 jdkcentos

配置环境app

vim /etc/profile 在最后加上下面的配置ssh

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 配置生效svn

2、安装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安装完毕

3、安装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持续集成已经完成,谢谢各位能看完此文,有错误的地方还请你们给指出。

相关文章
相关标签/搜索