1.1 持续集成、持续交付 介绍

    参考博客:https://www.cnblogs.com/cay83/p/8856231.html

  1、传统交付

      1. 传统软件的开发与交付的周期都很漫长,从需求的分析、系统的设计、编写测试用例、系统开发、单元测试、组装测试到交付调试。

      2. 每一次交付、升级,都需要提供基础的硬件、软件的环境、软件的代码、软件的文档与手册。

      3. 工程师都按照之前预演过好多遍的流程,对照着系统的部署手册,一步一步的组装硬件,安装软件,稍有差池,就要按照对应的应急预案进行回滚。

           

  2、技术工程师日常 与 痛点

      1)立项,建代码库,申请资源,拉分支写代码,联调测试,发布到线上,设置监控点,质效分析和总结等等

      2)这些活动存在于不同的平台,每天在不停的重复,需要不停的和各个团队沟通,不停的做研发平台和技术栈的切换

      3)所以我们又回到持续交付的一个原则,如果有一件事让你感觉到痛苦,那么就尽早实现自动化。

      4)梳理出规范化的玩法,采用自动化的高效手段,用技术去解决这些让我们感觉头疼的问题。

      

  3、CI 持续集成 与 CD持续交付

      持续集成(Continuous Integration,CI): 代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈(主要产出是一个镜像)

      持续部署(Continuous Deployment,CD)加将产品部署到 测试环境、预生产环境、生产环境

      持续交付(Continuous Delivery,CD): 将最终产品发布到生产环境,给用户使用

      

  4、产品线发布流程

      

  5、国内一些公司开发的轮子

      阿里云效/codepipeline:https://www.aliyun.com/product/codepipeline

      百度效率云:https://xiaolvyun.baidu.com/

      普元devops平台:http://www.primeton.com/products/devops/

  6、构建持续集成环境介绍

      

      

1.2 构建持续集成环境(搭建Harbor私有镜像仓库+git服务:192.168.56.14)

  1、安装Docker(192.168.56.14)

# 1)安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 # 2)添加Docker软件包源(否则doker安装的不是新版本)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 3)安装Docker CE
yum install -y docker-ce # 4)启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker # 5)安装docker compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version # 测试docker-compose是否安装好

  2、安装Harbor(192.168.56.14)

      1. 配置Harbor Https认证等,内容较多请参考, https://www.cnblogs.com/xiaonq/p/10285808.html

      2. 必须保证Jenkins机器和Docker机器能通过命令 docker login linux-node4.example.com 登录私有镜像仓库Harbor

'''安装Harbor镜像仓库'''
# 1、下载离线安装包
https://github.com/goharbor/harbor/releases # 2、解压并配置访问地址'''
cd /home/work
tar zxvf harbor-offline-installer-v1.8.1.tgz
cd /home/work/harbor
vi harbor.yml
'''
hostname = 192.168.56.14
harbor_admin_password = 123456
''' # 3、准备配置
./prepare # 4、导入镜像并启动
./install.sh # 5、查看容器状态
docker-compose ps 安装完成后可以登录Harbor:http://192.168.56.14

  3、Git代码版本仓库 

'''在192.168.56.14安装git仓库 '''
# 1、安装Git
yum -y install git
# 2、创建Git用户并设置密码
useradd git
passwd git
# 3、创建仓库(下面三步git仓库已经创建完成)
su - git # 切换到git用户
mkdir solo.git # 在git用户家目录创建镜像仓库文件夹 demo.git
cd solo.git
git --bare init # 初始化镜像仓库 '''在192.168.56.13中模拟拉取git代码进行测试 '''
# 4、模拟拉取并提交代码
yum -y install git
git clone git@192.168.56.14:/home/git/solo.git
touch test.py # 创建一个文件模拟代码提交
git add .
git commit -m 'test'
git push origin master # 5、配置客户端与Git服务器SSH免交互认证
ssh-keygen # 生成秘钥
ssh-copy-id git@192.168.56.14 # 将私钥拷贝到git服务器
ssh git@192.168.56.14 # 在192.168.56.13测试免密登录192.168.56.14

1.3 构建持续集成环境(部署docker以便部署部署项目:192.168.56.13)

   1、安装docker

# 1)安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 # 2)添加Docker软件包源(否则doker安装的不是新版本)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 3)安装Docker CE
yum install -y docker-ce # 4)启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker
# 5)配置镜像加速器:https://www.daocloud.io/mirror
[root@linux-node2 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io       
[root@linux-node2 ~]# cat /etc/docker/daemon.json # 执行上面命令后就会将镜像源修改成国内的地址
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
[root@linux-node2 ~]# systemctl restart docker # 重启docker生效

  2、复制Harbor证书登录Harbor服务器

mkdir -p /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/ vi /usr/lib/systemd/system/docker.service # 添加--insecure-registry 192.168.56.14
'''
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14
''' systemctl restart docker.service # 重启docker
# 可以在linux-node3.example.com机器上测试docker登录
docker login linux-node4.example.com

  3、配置java JDK环境

[root@linux-node3 ~]# cd /usr/local/  # 将jdk-8u45-linux-x64.tar.gz包上传到当前文件夹中
[root@linux-node3 local]# tar -xvf jdk-8u45-linux-x64.tar.gz
[root@linux-node3 local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_45
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
[root@linux-node3 local]# source /etc/profile
[root@linux-node3 local]# java -version

1.4 构建持续集成环境(安装Jenkins服务:192.168.56.12)

  1、安装docker

# 1)安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 # 2)添加Docker软件包源(否则doker安装的不是新版本)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 3)安装Docker CE
yum install -y docker-ce # 4)启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker # 5)配置镜像加速器:https://www.daocloud.io/mirror
[root@linux-node2 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io       
[root@linux-node2 ~]# cat /etc/docker/daemon.json # 执行上面命令后就会将镜像源修改成国内的地址
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
[root@linux-node2 ~]# systemctl restart docker # 重启docker生效

  2、复制Harbor证书登录Harbor服务器

mkdir -p /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/ vi /usr/lib/systemd/system/docker.service # 添加--insecure-registry 192.168.56.14
'''
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14
''' systemctl restart docker.service # 重启docker
# 可以在linux-node2.example.com机器上测试docker登录
docker login linux-node4.example.com

  3、上传配置Java JDK环境

[root@linux-node3 ~]# cd /usr/local/  # 将jdk-8u45-linux-x64.tar.gz包上传到当前文件夹中
[root@linux-node3 local]# tar -xvf jdk-8u45-linux-x64.tar.gz
[root@linux-node3 local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_45
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
[root@linux-node3 local]# source /etc/profile
[root@linux-node3 local]# java -version

  4、上传配置maven

[root@linux-node2 work]# tar -xvf apache-maven-3.5.0-bin.tar.gz -C /usr/local/    # 先上传apache-maven-3.5.0-bin.tar.gz

  5、拉取java的博客系统测试

[root@linux-node2 ~]# yum –y install git
[root@linux-node2 ~]# cd /root/test/
[root@linux-node2 ~]# git clone https://github.com/b3log/solo.git
[root@linux-node2 test]# cd solo/
[root@linux-node2 solo]# git remote rm origin
[root@linux-node2 solo]# git remote add origin git@192.168.56.14:/home/git/solo.git
[root@linux-node2 solo]# git add .
[root@linux-node2 solo]# git commit -m 'all'
[root@linux-node2 solo]# git push origin master
# 配置客户端与Git服务器SSH免交互认证
[root@linux-node2 solo]# ssh-keygen # 生成秘钥
[root@linux-node2 solo]# ssh-copy-id git@192.168.56.14 # 将私钥拷贝到git服务器
[root@linux-node2 solo]# ssh git@192.168.56.14 # 在192.168.56.13测试免密登录192.168.56.14

  6、构建一个Tomcat基础镜像,并推送到Harbor中

[root@linux-node2 solo]# mkdir -p /root/solo/
[root@linux-node2 solo]# vi /root/solo/Dockerfile
'''
FROM centos:7
MAINTAINER www.example.com
RUN yum install unzip iproute -y
ENV JAVA_HOME /usr/local/jdk # 使用宿主机的java JDK环境
ADD apache-tomcat-8.0.46.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat
WORKDIR /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["./bin/catalina.sh", "run"]
''' ## 注:一定要把apache-tomcat-8.0.46.tar.gz上传到/root/solo/目录下
[root@linux-node2 solo]# docker build -t linux-node4.example.com/test/tomcat:v1 . # 构建一个tomcat镜像
# linux-node4.example.com # Harbor镜像仓库名称
# test # 在Harbor页面中创建的项目(一定记得到Harbor管理页面创建test项目)
# tomcat:v1 # 我们打的镜像名称 [root@linux-node2 jenkins]# docker images # 查看到刚刚构建的linux-node4.example.com/test/tomcat 镜像
[root@linux-node2 solo]# docker push linux-node4.example.com/test/tomcat:v1 # 将镜像推送到Harbor中

  7、安装Jenkins(使用官方提供的Jenkins二次构建)

[root@linux-node2 ~]# mkdir –p /home/work/jenkins
[root@linux-node2 ~]# cd /home/work/jenkins
[root@linux-node2 jenkins]# vim Dockerfile # 使用官方Jenkins镜像构建我们的镜像
'''
FROM jenkins
USER root
RUN apt-get update && apt-get install -y git libltdl-dev
''' [root@linux-node2 jenkins]# docker build -t jenkins:v1 . # 构建Jenkins镜像
[root@linux-node2 jenkins]# docker images # 可以看到我们的镜像了
[root@linux-node2 jenkins]# docker rm -f $(docker ps -q -a) # 删除我们刚刚创建的测试镜像
[root@linux-node2 jenkins]#
#### 使用下面命令创建Jenkins容器(使用上面构建的jenkins:v1镜像)
# -v命令进行挂载,其中冒号前面的是本机的目录
# 将本机的javahome和mavenhome的路径,挂载到Jenkins容器上,冒号后面是容器上的目录,可以写跟本机目录相同
'''
docker run -d \
--name jenkins \
-p 8080:8080 \
-v /var/jenkins_home/:/var/jenkins_home \
-v /usr/local/apache-maven-3.5.0:/usr/local/maven \
-v /usr/local/jdk1.8.0_45:/usr/local/jdk \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-v ~/.ssh:/root/.ssh \
jenkins:v1
''' [root@linux-node2 work]# cat /var/jenkins_home/secrets/initialAdminPassword # 查看Jenkins密码,要放到页面中验证
3628631b13f04919ac864a597c336ce1

1.5 构建持续集成环境(在页面中完成Jenkins安装:192.168.56.12)

    访问Jenkinshttp://192.168.56.12:8080

   1、输入Jenkins初始密码

      

  2、选择安装插件

      安装报错常见解决方案:https://www.cnblogs.com/sxdcgaq8080/p/10489326.html

      

  3、配置Jenkins admin用户信息

      

1.6 构建持续集成环境(配置Jenkins:192.168.56.12)

  1、配置配置git、jdk、maven

      Manage Jenkins  ----》Global Tool Configure----》Global Tool Configuration

      [root@linux-node2 local]#   sudo chown -R 1000 /var/jenkins_home        #注意挂载目录授权

      [root@linux-node2 local]#   docker restart d57a     # 重启Jenkins所在的docker容器

    1)配置java JDK

        

    2)配置git

        

    3)配置maven

        

  2、系统配置

      # 配置192.168.56.13中用户密码ssh登录,好让Jenkins一会run你的镜像

    1)配置ssh凭证

        凭证---》global---》添加凭证

        

    2)配置使用上面凭证ssh 192.168.56.13的docker主机

        Manage Jenkins ----》Global Tool Configure ----》Configuration System

        注:如果没有 SSH remote hosts,记得主动安装插件,插件名(SSH)

        

1.7 使用Jenkins创建一个新的项目,将java项目从Jenkins(192.168.56.12)自动部署到docker(192.168.56.13)机器中

  1、创建一个新任务

      create new jobs   # 如果没有“构建一个maven项目”选项,自己安装插件:Maven Integration
      

  2、配置Jenkins使用git拉取代码的路径

      git@192.168.56.14:/home/git/solo.git   是我们自己搭建的git仓库地址

      

  3、简单测试一下触发器配置

      注:每隔一分钟拉取一次git仓库中的代码

      

  4、指定maven构建选项

      

  5、测试构建

      

      

      # 构建完成后Jenkins工作目录即可看到构建生成的 solo.war包,这个solo.war包放到Tomcat中就可以启动了

      [root@linux-node2 target]# ll /var/jenkins_home/workspace/solo_blog/target/solo.war

   6、配置构建成功后的动作(将项目打包推送到镜像中)

      刚刚已经看到构建没问题,此时可以配置构建成功后的动作

    1)再次配置

        

    2)构建项目镜像,并推送到Harbor中

        1. 使用上面生成,推送到Harbor的 tomcat:v1镜像生成项目镜像 solo:v1

        2. 将solo:v1推送到Harbor中

        

cd $WORKSPACE
cat > Dockerfile << EOF
FROM linux-node4.example.com/test/tomcat:v1
MAINTAINER WWW.example.com COPY target/solo.war /tmp/ROOT.war
RUN rm -rf /usr/local/tomcat/webapps/* && \
unzip /tmp/ROOT.war -d /usr/local/tomcat/webapps/ROOT && \
rm -f /tmp/ROOT.war ENTRYPOINT ["./bin/catalina.sh", "run"]
EOF docker build -t linux-node4.example.com/test/solo:v1 .
docker login -u admin -p 123456 linux-node4.example.com
docker push linux-node4.example.com/test/solo:v1

  7、配置完构建成功后动作后,重新构建,保证输出台是(success)

       注: 使用Jenkins远程,让docker主机(192.168.56.13)拉取上步构建的solo:v1项目镜像启动docker容器

      

docker rmi -f solo:v1 | true
docker rm -f solo | true
docker login -u admin -p 123456 linux-node4.example.com
docker run -dit --name solo -p 8888:8080 -v /usr/local/jdk1.8.0_45/:/usr/local/jdk linux-node4.example.com/test/solo:v1

1111111111111111

04: CI(持续集成)/CD(持续交付/持续部署)的更多相关文章

  1. 持续集成之应用k8s自动部署

    持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...

  2. Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布

    环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...

  3. 02: CI(持续集成)/CD(持续交付/持续部署)

    1.1 持续集成.持续交付 介绍   参考博客:https://www.cnblogs.com/cay83/p/8856231.html 1.传统交付 1. 传统软件的开发与交付的周期都很漫长,从需求 ...

  4. Docker与CI持续集成/CD

    背景        Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...

  5. Docker与CI持续集成/CD(转)

    背景 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会 ...

  6. 持续集成工具之Jenkins安装部署

    一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...

  7. 持续集成工具Jenkins安装、部署、使用

    本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...

  8. 接口自动化测试持续集成--Soapui接口功能测试持续集成

    Soapui接口功能测试持续集成,需要先安装好maven和jenkins,maven和jenkins安装和系统环境配置比较简单,在这里不做叙述.   1.Soapui保存的工程文件 soapui工程保 ...

  9. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)(转载)

    本文结构 ASP.NET Core应用程序的构建 ASP.NET Core应用程序容器化所需注意的问题 应用程序的配置信息 端口侦听 ASP.NET Core的容器版本 docker镜像构建上下文(B ...

  10. 第一章 持续集成jenkins工具使用之部署

    1.1 硬件要求 内存:至少512MB 磁盘空间:10G JDK8 最好同时安装jre 从官网https://jenkins.io/download/下载最新的war包(Generic Java Pa ...

随机推荐

  1. BZOJ 4154: [Ipsc2015]Generating Synergy KDtree+dfs序

    多组数据真tm恶心~ 把 $dfs$序和深度分别看作横纵坐标,然后用 $KDtree$ 数点就可以了~ #include <cstdio> #include <cstring> ...

  2. 【POJ1011】Sticks

    [题目概括] 现在有\(n\)个长度不超过\(50\)的木棍,请你把这些小木棍拼成若干根长度相同的木棍. 请你最小化拼成后的长度. [思路要点] 考虑枚举最后的长度,然后判断是否可以,这样就不需要最优 ...

  3. sqlmap自动注入 --REQUEST

    --delay=“参数” 每次http(s)请求之间的延迟时间,浮点数,单位为秒,默认无延迟 --timeout=“参数” 请求超时,浮点数,默认为30秒 --retries=“参数” http(s) ...

  4. Redis数据结构常用命令

    Redis数据结构--字符串

  5. C++入门经典-例6.20-修改string字符串的单个字符

    1:使用+可以将两个string 字符串连接起来.同时,string还支持标准输入输出函数.代码如下: // 6.20.cpp : 定义控制台应用程序的入口点. // #include "s ...

  6. c#使用SharpZipLib对二进制数据进行压缩和解压

    首先需要下载SharpZipLib,下载地址:http://icsharpcode.github.io/SharpZipLib/ 需要引入命名空间: using ICSharpCode.SharpZi ...

  7. SAP MaxDB Backup and Restore

    Back up the data and redo log entries from the data and log areas of your database to data carriers ...

  8. golang 通过reflect反射修改值

    不是所有的反射值都可以修改.对于一个反射值是否可以修改,可以通过CanSet()进行检查. 要修改值,必须满足: 可以寻址 可寻址的类型: 指针指向的具体元素 slice的元素 可寻址的结构体的字段( ...

  9. 学习笔记 - Git

    学习参考网址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 Git是目前世界上 ...

  10. 开源之TinyPinyin

    适用于Java和Android的快速.低内存占用的汉字转拼音库. https://github.com/promeG/TinyPinyin