环境

测试部署主机IP:192.168.1.1
Jenkins主机IP:192.168.1.2
Harbor主机IP:192.168.1.3
Gitlab主机IP:192.168.0.10 系统信息:
系统:CentOS 7.5
内核:4.18.7-1.el7.elrepo.x86_64
Docker版本:18.09
docker-compose版本:1.23.1

有道笔记原文,为了防止复制粘贴出来的代码格式有误~~~~

所有主机的Docker安装方式  可用 ansible-roles 快速部署所有主机   https://github.com/gitDream/ansible-roles_jenkins_harbor_gitlab.git

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce

mkdir /etc/docker/
cat << EOF > /etc/docker/daemon.json
{ "registry-mirrors": ["https://registry.docker-cn.com"],
"live-restore": true,
"default-shm-size": "128M",
"max-concurrent-downloads": ,
"oom-score-adjust": -,
"debug": false
}
EOF
systemctl enable docker
systemctl restart docker

安装Gitlab

  • 参考这篇文章:

    http://blog.51cto.com/bigboss/2129284

  • Docker方式安装:

    https://github.com/JyBigBoss/docker-compose/blob/master/gitlab/docker-compose.yaml

  • 安装Harbor

  • 参考:

  • http://blog.51cto.com/bigboss/2316525
  • docker 配https registry私有仓库的重点说明

  • 生成ca 证书  给harbor 使用
  • openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./server.key -out ./server.crt -subj "/CN=registry.lotbrick.com"
    

    copydocker 客户端登入harbor 前导入自制Ca 证书位置         mkdir -p /etc/docker/certs.d/registry.lotbrick.com        #registry.lotbrick.com  创建域名目录

    mkdir -p /etc/docker/certs.d/registry.lotbrick.com
    scp ./server.crt  /etc/docker/certs.d/registry.lotbrick.com/ca.crt
  • systemctl daemon-reload
    systemctl restart docker
    docker login registry.lotbrick.com
    
    

                                                                                                                                                     

  • 安装Jenkins
  • yum install -y python-pip
    pip install docker-compose cd $HOME && mkdir jenkins && cd jenkins
    wget https://raw.githubusercontent.com/JyBigBoss/docker-compose/master/jenkins/Dockerfile
    wget https://raw.githubusercontent.com/JyBigBoss/docker-compose/master/jenkins/docker-compose.yaml docker-compose up -d

    Jenkins需要安装的插件

  • Gitlab Hook、Build Authorization Token Root、Publish Over SSH、Gitlab Authentication
    Gitlab、Git Parameter、Git Tag Message、Pipeline、docker-build-step、Docker Pipeline

    创建git仓库

    • 在web页面创建一个test仓库,并在在仓库中新建一个index.html文件

    • cd $HOME
      git clone git@192.168.0.10:yfg/test.git
      cd test/
      cat << EOF > index.html
      <h1>Test 123</h1>
      EOF
      git add .
      git commit -m 'add index.html'
      git push #创建两个tag
      git tag v1 -m 'version:1'
      git push --tags
      git tag v2 -m 'version:2'
      git push --tags

        




      在Harbor上创建一个test仓库


      配置Jenkins

        • 打开Jenkins的设置页面,配置Publish over SSH插件

        • 创建一个流水线(pipeline)项目












      

      

    node {
    stage(' Git clone ') {
    git branch: 'master', credentialsId: 'a4a81561-8bc0-426e-89f9-b4d4aa1925d6', url: 'git@192.168.0.10:yfg/test.git'
    env.check_to_tag="$TAG"
    sh '[ -n "${check_to_tag}" ] && git checkout ${check_to_tag} || { echo -e "切换至指定的tag的版本,tag:${check_to_tag} 不存在或为空,请检查输入的tag!" && exit 111; }'
    }
    stage("Create Dockerfile"){
    sh '''cat << EOF > Dockerfile
    FROM python:3.7.-alpine
    RUN mkdir /test
    WORKDIR /test
    COPY ./ /test
    EXPOSE
    CMD ["python","-m","http.server"]
    EOF'''
    sh 'cat Dockerfile'
    }
    stage("Create docker-compose.yaml "){
    sh '''cat << EOF > docker-compose.yaml
    version: "2.4"
    services:
    http:
    image: registry.lotbrick.com/test/http:${check_to_tag}
    container_name: python-http_server
    ports:
    - "80:8000"
    restart: always
    EOF''' sh 'cat docker-compose.yaml'
    } stage('Build Image And Push to registry') {
    //withRegistry('仓库地址','jenkins凭据ID')
    docker.withRegistry('https://registry.lotbrick.com', '9ffa7ef5-38c6-49da-8936-ec596359be56'){
    //build当前目录(workspace)下的Dockerfile
    def BuildImage = docker.build("registry.lotbrick.com/test/http:${check_to_tag}")
    //Push刚才Build出来的镜像
    BuildImage.push()
    }
    }
    stage('Depoly'){
    //调用Publish Over SSH插件,上传docker-compose.yaml文件并且执行deploy脚本
    sshPublisher(publishers: [sshPublisherDesc(configName: 'jenkins_pipeline_test_deploy', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '/bin/bash /root/deploy/deploy.sh', execTimeout: , flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/root/deploy', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'docker-compose.yaml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) }
    }
      • 生成流水线脚本的方法





      • Jenkins凭据ID获取方法




      • 发布脚本:depoly.sh:放到要部署代码的主机的/root/deploy目录下
      •   #!/bin/bash
        echo '正在更新版本......' cd /root/deploy IMAGE_NAME='registry.lotbrick.com/test/http'
        DOCKER_TAG=`awk -F ':' '/.*image/{print $NF}' docker-compose.yaml` echo -e "\n"
        docker-compose pull && docker-compose up -d if [ "$?" == 0 ];then
        echo '删除旧的image'
        OLD_IMAGE=`docker images | grep $IMAGE_NAME | awk '{print $2,$3}' | grep -v "${DOCKER_TAG}" |awk '{print $1}'`
        for i in $OLD_IMAGE;do
        docker rmi http:$i
        done
        else
        echo "更新版本失败!!!"
        exit 111
        fi

          

        测试发布

        • 第一次发布













        • 再来一次

        #感觉没玩够,再传个代码测试一回
        
        cd $HOME
        git clone https://github.com/HFIProgramming/mikutap.git \cp -r mikutap/* test/ cd test
        git add .
        git commit -m 'add mikutap page'
        git tag v3 -m 'add mikutap page'
        git push --tags





     

docker-compose 快速部署持续集成测试环境 Gitlab+Harbor+Jenkins pipeline 实现 tag run docker Images的更多相关文章

  1. 利用Docker Compose快速搭建本地测试环境

    前言 Compose是一个定义和运行多个Docker应用的工具,用一个YAML(dockder-compose.yml)文件就能配置我们的应用.然后用一个简单命令就能启动所有的服务.Compose编排 ...

  2. 使用 Docker Compose 快速构建 TiDB 集群

    本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...

  3. 基于 Jenkins 快速搭建持续集成环境--转

    源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...

  4. Jenkins 快速搭建持续集成环境

    持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...

  5. 用Docker swarm快速部署Nebula Graph集群

    用Docker swarm快速部署Nebula Graph集群 一.前言 本文介绍如何使用 Docker Swarm 来部署 Nebula Graph 集群. 二.nebula集群搭建 2.1 环境准 ...

  6. Docker Compose 一键部署LNMP

    Docker Compose 一键部署LNMP 目录结构 [root@localhost ~]# tree compose_lnmp/ compose_lnmp/ ├── docker-compose ...

  7. Docker Compose 一键部署Nginx代理Tomcat集群

    Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [root@localhost ~]# tree compose_nginx_tomcat/ compose_nginx ...

  8. Docker Compose 一键部署多节点爬虫程序

    Docker Compose 一键部署多节点爬虫程序 目录结构 [root@localhost ~]# tree compose_crawler/ compose_crawler/ ├── cento ...

  9. 持续集成之④:GitLab触发jenkins构建项目

    持续集成之④:GitLab触发jenkins构建项目 一:目的为在公司的测试环境当中一旦开发向gitlab仓库提交成功代码,gitlab通知jenkins进行构建项目.代码质量测试然后部署至测试环境, ...

随机推荐

  1. linux shell seq命令详解

    seq: squeue  是一个序列的缩写,主要用来输出序列化的东西 seq常见命令参数 用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 ...

  2. label 阻止冒泡 防止点击label 触发2次事件

    // 必须要把 jnput的外面的label加上事件阻止冒泡,否则点击label的时候,会冒泡到input上 再次触发input的点击事件 $('.xt_order_cleft_modb_rl_dx' ...

  3. Django框架之Filters(过滤器)、母版的使用

    在Django的模板语言中,通过使用 过滤器 来改变变量的显示. 过滤器的语法: {{ value|filter_name:参数 }} 使用管道符"|"来应用过滤器. 注意事项: ...

  4. Etcd Learning Notes

    官网:https://etcd.io 官方项目地址:https://github.com/etcd-io/etcd 参考资料: https://www.hi-linux.com/posts/40915 ...

  5. ExecutorService 的Future类

    1.概述 在本文中,我们将了解Future.自Java 1.5以来一直存在的接口,在处理异步调用和并发处理时非常有用. 2.创建Future 简单地说,Future类表示异步计算的未来结果 - 这个结 ...

  6. OO Byebye

    一.架构设计 1.第一次作业 首先做的就是把所有的Element全部存起来,我把UmlClass和UmlInterface重新用两个新的类来记录了一下,用于更快地找到他们的关联.其实总体思路还是比较简 ...

  7. 学习笔记(26)- plato-端到端模型-定闹钟

    今天用了定闹钟的场景语料,在plato框架尝试了端到端的模型. 本文先记录英文的训练过程,然后记录中文的训练过程. 训练端到端的模型 发现使用英文的模型,还是显示有中文,所以,新建目录,重新训练 1. ...

  8. $.isEmptyObject() 判断对象是否为空

    $.isEmptyObject(obj):为空 返回true不为空 返回 false: isEmptyObject: function( obj ) { var name; for ( name in ...

  9. C语言:将3*4矩阵中找出行最大,列最小的那个元素。-将低于平均值的人数作为函数返回值,将低于平均分的分数放入below数组中。

    //将3*4矩阵中找出行最大,列最小的那个元素. #include <stdio.h> #define M 3 #define N 4 void fun(int (*a)[N]) { ,j ...

  10. Fluent_Python_Part3函数即对象,06-dp-1class-func,一等函数与设计模式

    使用一等函数实现设计模式 中文电子书P278 合理利用作为一等对象的函数,把模式中涉及的某些类的实例替换成简单的函数,从而简化代码. 1. 重构"策略"模式 中文电子书P282 P ...