一.部署

前提环境说明

192.168.111.3 该机器为git本地仓库,及git远程仓库(git用户创建),及Harbor镜像仓库
192.168.111.4 该机器为Jenkins
192.168.111.5 该机器发布docker

Jenkins环境以及git仓库,以及docker已经准备好,三台机器都需要docker环境。第一台需要docker环境来运行Harbor,第二台Jenkins需要docker环境来制作镜像并上传到Harbor,第三台是运行docker容器。

仓库里测试页为自定义的测试页

git上传代码到远程仓库时是基于标签上传的,我们可以基于该标签联想到版本号,那么所谓的代码回退,在本案例中,无非就是将现有的容器干掉,从而将我们需要回退到的版本对应的镜像拉取并且运行。

环境工作流程介绍

开发根据git标签提交代码,Jenkins拉取代码构建镜像上传到Harbor中,然后docker主机从Harbor中拉取镜像,并根据指令运行容器。

部署harbor

  1. 1、在线安装包
  2. $ wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-online-installer-v1.1.2.tgz
  3. $ tar xvf harbor-online-installer-v1.1.2.tgz
  4. 2、离线安装包
  5. $ wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz
  6. $ tar xvf harbor-offline-installer-v1.1.2.tgz
  1. [root@localhost ~]# tar xf harbor-offline-installer-v1.5.0.tgz
  2. [root@localhost ~]# mv harbor /usr/local/
  3. [root@localhost ~]# vim /usr/local/harbor/harbor.cfg
  4. hostname = 192.168.111.3
  5. ui_url_protocol = http
  • 两个harbor部署docker-compose
  1. curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m`
  2. # mv docker-compose /usr/local/bin/docker-compose
  3. # chmod +x !$
  4. chmod +x /usr/local/bin/docker-compose
  • 启动配置
  1. # sh /usr/local/harbor/install.sh
  2. #此过程比较慢

默认密码:admin:Harbor12345

在docker主机上指定镜像仓库为Harbor所在地址

  1. [root@localhost ~]# vim /etc/docker/daemon.json
  2. {"insecure-registries":["192.168.111.3:80"]}
  3. [root@localhost ~]# systemctl daemon-reload
  4. [root@localhost ~]# systemctl restart docker

将我准备的centos镜像上传到Harbor,后面构建一个包含代码的镜像,需要基于该镜像进行构建

  1. [root@localhost ~]# cat centos-7-x86_64.tar.gz | docker import - centos:7
  2. sha256:612802f256a6d854b22faa406bda99a49ff1a5ddad2f0b29faf75f7e6d1f2ebd
  3. [root@localhost ~]# docker tag centos:7 192.168.111.3:80/library/centos:7
  4. [root@localhost ~]# docker login 192.168.111.3:80
  5. Username: admin
  6. Password:
  7. Login Succeeded
  8. #需要先登录上,在上传镜像
  9. [root@localhost ~]# docker push 192.168.111.3:80/library/centos:7

接下来在Jenkins机器和docker主机上,部署jdk,Jenkins部署jdk是maven构建时要用到

  1. [root@localhost ~]# tar xf jdk-8u191-linux-x64.tar.gz
  2. [root@localhost ~]# mv jdk1.8.0_191/ /usr/local/java
  3. [root@localhost ~]# tar xf apache-tomcat-8.5.16.tar.gz
  4. [root@localhost ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat
  1. [root@localhost ~]# vim Dockerfile
  2. FROM centos:7
  3. MAINTAINER joinbest
  4. ENV TVER=8.5.16
  5. ENV JAVA_HOME=/usr/local/java
  6. ADD ./apache-tomcat-${TVER}.tar.gz /tmp
  7. RUN cd /tmp && \
  8. mv apache-tomcat-${TVER} /usr/local/tomcat && \
  9. rm -rf /usr/local/tomcat/webapps/* && \
  10. mkdir /usr/local/tomcat/webapps/ROOT
  11. EXPOSE 8080
  12. CMD ["/usr/local/tomcat/bin/catalina.sh","run"
  13. [root@localhost ~]# docker build -t 192.168.111.3:80/library/tomcat-85 -f Dockerfile ./
  14. [root@localhost ~]# docker images
  15. REPOSITORY TAG IMAGE ID CREATED SIZE
  16. 192.168.111.3:80/library/tomcat-85 latest a9090e8402d9 6 seconds ago 611MB
  17. centos 7 612802f256a6 2 hours ago 589MB
  18. 192.168.111.3:80/library/centos 7 612802f256a6 2 hours ago 589MB
  19. [root@localhost ~]# docker push 192.168.111.3:80/library/tomcat-85

需要修改一下Jenkins的运行用户为root,因为有些指令其他用户没有权限,并且在本环境中maven以及JDK也已经部署好,以及在全局工具配置里面添加Git

需要在Jenkins安装ssh插件以及git parameter插件

添加一个全局凭据用于连接docker主机使用的

添加系统配置,添加一个远程主机,将docker主机的ip,以及应用刚才的全局凭据。

  • 添加maven构建任务

execute shell 输入框填写,这个内容是在Jenkins主机上执行的

  1. REPOSITORY=192.168.111.3:80/library/probe:${Tag}
  2. cat << EOF > Dockerfile
  3. FROM 192.168.111.3:80/library/tomcat-85:latest
  4. RUN rm -rf /usr/local/tomcat/webapps/ROOT
  5. COPY web/target/*.war /usr/local/tomcat/webapps/ROOT.war
  6. CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
  7. EOF
  8. docker build -t $REPOSITORY ./
  9. docker login 192.168.111.3:80 -u admin -p Harbor12345 #这个用于登录harbor,只有登陆上才能上传镜像
  10. docker push $REPOSITORY

post steps添加一个execute shell script on remote host using ssh,这是在docker主机上执行的

  1. REPOSITORY=192.168.111.3:80/library/probe:${Tag}
  2. docker rm -f probe | true
  3. docker images rm $REPOSITORY | true
  4. docker container run -d --name probe -v /usr/local/java:/usr/local/java -p 8090:8080 $REPOSITORY

jenkins+docker+git+harbor构建及代码回滚(未完)的更多相关文章

  1. Jenkins+Docker+Git+Harbor流水线打包

    Jenkins+Docker+Git+Harbor流水线打包 环境: CentOS Linux release 7.6.1810 (Core) 192.168.247.214 Jenkins+dock ...

  2. Git配合Tag的代码回滚

    现有的远程仓库版本的tag为v1.0 前置准备 具体操作: 我们在本地修改一下readme文件,然后进行add,commit操作. 再给我们的commit打上tag git tag -a v1.1 - ...

  3. 基于 Jenkins+Docker+Git 的CI流程初探

    在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...

  4. 从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布

    一.前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立的 Java ...

  5. Jenkins+Docker+Git+Registry

    从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布   笔者:@拿着保温瓶的年轻人 目录: 一.前言 二.发布流程 三.环境准备 四.部署思路梳理 五.三台机器上操作 ...

  6. Jenkins+Docker+Git 自动化部署

    Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...

  7. git代码回滚:Reset、Checkout、Revert的选择

    代码回滚:Reset.Checkout.Revert的选择 Zhongyi Tong edited this page on Dec 8, 2015 · 5 revisions Pages 19 Ho ...

  8. 6.Git代码回滚

    1.代码修改并提交 我们已经成功地添加并提交了一个helloWorld.txt文件,现在,是时候继续工作了. 于是,我们继续修改helloWorld.txt文件,改成如下内容: $ vi helloW ...

  9. Jenkins 搭建企业实战案例 (发布与回滚)

    让我们的代码部署变得easy,不再难,Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins非常易于安装和配置,简单易用 ...

随机推荐

  1. python之参数解析模块argparse

    2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 简单入门 先来看个例子: argparse_test.py: import ...

  2. mybatis 存储过程与游标的使用

    MyBatis还能对存储过程进行完全支持,这节开始学习存储过程.在讲解之前,我们需要对存储过程有一个基本的认识,首先存储过程是数据库的一个概念,它是数据库预先编译好,放在数据库内存中的一个程序片段,所 ...

  3. php 保留2位小数

    $num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo round($num,); //10.46 //第二种:利用sprintf格式化字符串 $format_n ...

  4. Nginx - upstream sent invalid chunked response while reading upstream 异常问题

    一个 post 的请求,直接调接口服务数据正常返回,但是通过 nginx 代理后, 什么都没有返回. nginx 配置如下: 使用 postman 调用,返回如下: 于是检查日志报错信息,如下: ng ...

  5. 【GStreamer开发】GStreamer播放教程06——可视化音频

    目标 GStreamer有一系列把音频转换成视频的element.他们可以用于科学的目的或者增加音乐播放器的趣味性.本教程展示: 如何允许音频的可视化 如何选择可视化element 介绍 在playb ...

  6. element组件 MessageBox不能显示确认和取消按钮,记录正确使用方法!

    这里是局部引入 调用方式:

  7. 【作业】Mental Rotation (模拟)

    题目链接:https://vjudge.net/contest/345791#problem/L [问题描述] Mental rotation is a difficult thing to mast ...

  8. 微信小程序之一:动态添加view(view包含picker,input)

    <view wx:for="{{array}}" wx:key="this" class="borderContainer"> ...

  9. clang, gcc, gdb

    Clang 比 GCC 编译器的优势: 1 编译速度更快 2 编译产出更小 3 出错提示更友好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 " 认为 " 正确 ...

  10. php 文字转换成拼音

    <?php //中文字转拼音 $d=array( array("a",-20319), array("ai",-20317), array("a ...