04: CI(持续集成)/CD(持续交付/持续部署)
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)
访问Jenkins:http://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(持续交付/持续部署)的更多相关文章
- 持续集成之应用k8s自动部署
持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...
- Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布
环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...
- 02: CI(持续集成)/CD(持续交付/持续部署)
1.1 持续集成.持续交付 介绍 参考博客:https://www.cnblogs.com/cay83/p/8856231.html 1.传统交付 1. 传统软件的开发与交付的周期都很漫长,从需求 ...
- Docker与CI持续集成/CD
背景 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...
- Docker与CI持续集成/CD(转)
背景 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会 ...
- 持续集成工具之Jenkins安装部署
一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...
- 持续集成工具Jenkins安装、部署、使用
本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...
- 接口自动化测试持续集成--Soapui接口功能测试持续集成
Soapui接口功能测试持续集成,需要先安装好maven和jenkins,maven和jenkins安装和系统环境配置比较简单,在这里不做叙述. 1.Soapui保存的工程文件 soapui工程保 ...
- ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)(转载)
本文结构 ASP.NET Core应用程序的构建 ASP.NET Core应用程序容器化所需注意的问题 应用程序的配置信息 端口侦听 ASP.NET Core的容器版本 docker镜像构建上下文(B ...
- 第一章 持续集成jenkins工具使用之部署
1.1 硬件要求 内存:至少512MB 磁盘空间:10G JDK8 最好同时安装jre 从官网https://jenkins.io/download/下载最新的war包(Generic Java Pa ...
随机推荐
- BZOJ 4154: [Ipsc2015]Generating Synergy KDtree+dfs序
多组数据真tm恶心~ 把 $dfs$序和深度分别看作横纵坐标,然后用 $KDtree$ 数点就可以了~ #include <cstdio> #include <cstring> ...
- 【POJ1011】Sticks
[题目概括] 现在有\(n\)个长度不超过\(50\)的木棍,请你把这些小木棍拼成若干根长度相同的木棍. 请你最小化拼成后的长度. [思路要点] 考虑枚举最后的长度,然后判断是否可以,这样就不需要最优 ...
- sqlmap自动注入 --REQUEST
--delay=“参数” 每次http(s)请求之间的延迟时间,浮点数,单位为秒,默认无延迟 --timeout=“参数” 请求超时,浮点数,默认为30秒 --retries=“参数” http(s) ...
- Redis数据结构常用命令
Redis数据结构--字符串
- C++入门经典-例6.20-修改string字符串的单个字符
1:使用+可以将两个string 字符串连接起来.同时,string还支持标准输入输出函数.代码如下: // 6.20.cpp : 定义控制台应用程序的入口点. // #include "s ...
- c#使用SharpZipLib对二进制数据进行压缩和解压
首先需要下载SharpZipLib,下载地址:http://icsharpcode.github.io/SharpZipLib/ 需要引入命名空间: using ICSharpCode.SharpZi ...
- 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 ...
- golang 通过reflect反射修改值
不是所有的反射值都可以修改.对于一个反射值是否可以修改,可以通过CanSet()进行检查. 要修改值,必须满足: 可以寻址 可寻址的类型: 指针指向的具体元素 slice的元素 可寻址的结构体的字段( ...
- 学习笔记 - Git
学习参考网址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 Git是目前世界上 ...
- 开源之TinyPinyin
适用于Java和Android的快速.低内存占用的汉字转拼音库. https://github.com/promeG/TinyPinyin