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


    前言

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

    前期准备

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

    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 挂载卷

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

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

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

    配置jenkins

    Publish over SSH插件配置

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

    Git凭证添加

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

    新建构建任务

    源码管理

    配置如下,凭证选择我们上面配置的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

    总结

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

  • 相关阅读:
    NodeJs搭建简单的Http和Https服务器
    VSCode C++开发环境配置
    OpenCV查找并发现轮廓
    OpenCV使用连通组件检测并输出图像中的对象
    OpenCV使用阈值截断实现二值分割(黑白图)
    使用OpenCV实现背景减除
    get current UTC datetime of Python
    setTimeout and setInterval counterpart of Python
    setup airflow on MySQL
    HeidiSQL
  • 原文地址:https://www.cnblogs.com/qmhuang/p/11123761.html
Copyright © 2020-2023  润新知