Gitlab+Jenkins+Docker实现net core持续集成

前言

在项目中使用这一套自动集成的体系以后,一直想找个时间总结出来,用于本身记录也打算将本身的所得分享给园友们,不常常写文章,可能会有错误的地方,但愿各位不吝指正,我会及时的改正并表示感谢,但愿你们可以一块儿进步。git

前期准备

centos7.5系统环境,关闭防火墙docker

jenkins in docker 安装

yum install docker

    docker service start
    
    docker pull jenkins
    
    docker run -d -p 8080:8080 -p 50000:50000 \  
        -v jenkins:/var/jenkins_home \  
        -v /etc/localtime:/etc/localtime \  
        --name jenkins   \
        docker.io/jenkins/jenkins

-d 后台运行镜像
-p 80:8080 将镜像的8080端口映射到服务器的80端口
-p 50000:50000 将镜像的50000端口映射到服务器的50000端口
-v jenkins:/var/jenkins_home 挂载卷shell

/var/jenkins_home目录为jenkins工做目录,咱们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工做目录。该命令会将/var/lib/docker/volumes/jenkins映射到相应路径,默认的挂载卷都在docker目录下的volumes文件夹内,能够本身指定主机内的其余路径json

-v /etc/localtime:/etc/localtime 让容器使用和服务器一样的时间设置。
--name jenkins 给容器起一个别名centos

我在建立好以后遇到了访问jenkins界面白屏的问题,重启容器问题解决,重启大法好。
重启命令 docker service restartbash

配置jenkins

Publish over SSH插件配置

系统管理->系统设置
Passphrase:用户密码服务器

Git凭证添加

进入凭据->系统->全局凭据->添加
添加成功后,点击Test Configuration 测试是否可以连通
app

新建构建任务

源码管理学习

配置以下,凭证选择咱们上面配置的git凭证,分支调到须要发布的分支上
测试

构建触发器

选择轮询SCM设置为H/2 * * * *,即每两分钟检查一次是否有新的提交

构建后操做

选择Send files or execute commands over SSH,这里咱们不用这个插件进行文件传输,而是用它来执行主机中的shell脚本,配置以下


脚本内容以下:

#!/bin/bash

echo '开始执行部署'

#进入jenkins的工做区
cd /var/lib/docker/volumes/jenkins/_data/workspace/test

echo '更新镜像'

echo '---------------从新构建镜像----------------------'
cp testCore/Dockerfile Dockerfile
#执行net core 程序的dockerfile,生成程序镜像
docker build --no-cache -t testCore:master .
echo '---------------镜像构建成功----------------------'


#容器建立
docker run -d -it \
    -v /home/configs/testCore/appsettings.json:/app/appsettings.json \
    -v /etc/localtime:/etc/localtime:ro \
    -p 6000:80 \
    --restart=always \
    --name test testCore:master

echo '部署结束'

至此,整个构建过程就结束了,可是你在如此构建几回以后就会发现一个问题

查询了一下,致使该问题的缘由是

从新构建镜像的时候,该镜像正在被某容器使用中,那么在从新构建同名同版本镜像后,docker保留原来的镜像,即容器仍是用原来的, 那么原来的镜像名称变成none,tag也成了none

解决的办法是 在shell脚本以后添加一行删除tag为none的镜像的脚本,以下
docker images|grep none|awk '{print $3}'|xargs docker rmi

总结

实验的进程总不会像表面那样一番风顺,期间也会遇到各类各样的问题,我很享受那种闯过一关又一关看到成果的过程,后续更新我会将我在部署时遇到的一些小问题整理出来,做为记录学习,感谢阅读。

相关文章
相关标签/搜索