DevOps实现CI/CD实战(一)

DevOps实现CI/CD项目实战

完整的笔记,里面有完整的DevOps笔记和K8S集群搭建的笔记

  • https://github.com/ITenderL/ITenderL.github.io/tree/main/docs/DevOps

一、DevOps介绍

软件开发最开始是由两个团队组成:

  • 开发计划由开发团队从头开始设计和整体系统的构建。需要系统不停的迭代更新。

  • 运维团队将开发团队的Code进行测试后部署上线。希望系统稳定安全运行。

这看似两个目标不同的团队需要协同完成一个软件的开发。

在开发团队指定好计划并完成coding后,需要提供到运维团队。

运维团队向开发团队反馈需要修复的BUG以及一些需要返工的任务。

这时开发团队需要经常等待运维团队的反馈。这无疑延长了事件并推迟了整个软件开发的周期。

会有一种方式,在开发团队等待的时候,让开发团队转移到下一个项目中。等待运维团队为之前的代码提供反馈。

可是这样就意味着一个完整的项目需要一个更长的周期才可以开发出最终代码。

基于现在的互联网现状,更推崇敏捷式开发,这样就导致项目的迭代速度更快,但是由于开发团队与运维团队的沟通问题,会导致新版本上线的时间成本很高。这又违背的敏捷式开发的最初的目的。

那么如果让开发团队和运维团队整合到成一个团队,协同应对一套软件呢?这就被称为DevOps。

DevOps,字面意思是Development &Operations的缩写,也就是开发&运维。

虽然字面意思只涉及到了开发团队和运维团队,其实QA测试团队也是参与其中的。

网上可以查看到DevOps的符号类似于一个无穷大的符号:
在这里插入图片描述

这表明DevOps是一个不断提高效率并且持续不断工作的过程。DevOps的方式可以让公司能够更快地应对更新和市场发展变化,开发可以快速交付,部署也更加稳定。核心就在于简化Dev和Ops团队之间的流程,使整体软件开发过程更快速。

整体的软件开发流程包括:

  • PLAN:开发团队根据客户的目标制定开发计划
  • CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。
  • BUILD:编码完成后,需要将代码构建并且运行。
  • TEST:成功构建项目后,需要测试代码是否存在BUG或错误。
  • DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并且交给运维团队。
  • OPERATE:运维团队将代码部署到生产环境中。
  • MONITOR:项目部署上线后,需要持续的监控产品。
  • INTEGRATE:然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DevOps的核心,即持续集成、持续部署。

为了保证整体流程可以高效的完成,各个阶段都有比较常见的工具,如下图:

在这里插入图片描述

最终可以给DevOps下一个定义:DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。自动化的工具协作和沟通来完成软件的生命周期管理。

二、CODE阶段

在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。

2.1 Git安装

https://git-scm.com/(傻瓜式安装)

2.2 Gitlab安装

单独准备服务器,采用docker的方式安装。

1. 拉取镜像
docker search gitlab/gitlab-ce
docker pull gitlab/gitlab-ce
cd /usr/local/docker/gitlib-docker
2. 准备docker-compose.yml文件
vim docker-compose.yml

docker-compse.yml的内容

version: '3.1'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    container_name: gitlab
    restart: always
    environment:
     GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://192.168.201.112:8929'
      gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929'
      - '2224:2224'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'
3. 启动gitlab容器
# 启动
docker-compose up -d

# 查看是否完成,这一步比较耗时
docker-compose logs -f
4. 访问gitlab地址

浏览器访问

192.168.201.112:8929

5. 查看gitlab初始密码
# 进入容器
docker exec -it gitlab bash
# 查看密码root初始密码
cat /etc/gitlab/initial_root_password

kxxRmsBnqcxzDbRnyfpQxdzXgjdZS96SZvocmcOMPmQ=


在这里插入图片描述

6. 登录root用户

第一次登录需要 修改密码,搞定后跟github和gitee一样。

三、Build阶段

构建Java项目的工具一般有两种选择,一个是Maven,一个是Gradle。

这里我们选择Maven作为项目的编译工具。

具体安装Maven流程不做阐述,但是需要确保配置好Maven仓库私服以及JDK编译版本。

四、Operate阶段

部署过程,会采用Docker进行部署,暂时只安装Docker即可,后续还需安装Kubenetes

1. docker安装
# 1. 卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
# 2. 使用存储库安装
yum install -y yum-utils

# 3. 设置镜像仓库(修改为国内源地址)
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 5. 更新索引
yum makecache fast

# 4. 安装docker相关的依赖 默认最新版(docker-ce:社区版 ee:企业版)
yum install docker-ce docker-ce-cli containerd.io -y

#5. 安装特定docker版本(先列出列出可用版本)
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io

# 6. 启动docker
systemctl start docker
systemctl enable docker

# 7. 查看版本
[root@k8s-master ~]# docker --version
Docker version 19.03.11, build 42e35e61f3
# 8. 配置镜像
cat <<EOF >  /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerhub.icu",
    "https://registry.aliyuncs.com",
    "https://docker.nju.edu.cn"
  ]
}
EOF


# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

# 2. 删除资源(默认工作路径)
rm -rf /var/lib/docker

2. docker-compose安装
  1. 下载 Docker Compose:
    您可以使用 curl 命令下载 Docker Compose 的当前稳定版本。首先,打开终端,并运行以下命令:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

这个命令下载 Docker Compose 并将其保存到 /usr/local/bin/docker-compose。请确保更改上面的 URL 中的版本号为您想要安装的最新版本。

  1. 使二进制文件可执行接下来,将下载的文件设置为可执行:
sudo chmod +x /usr/local/bin/docker-compose

测试安装: 为了验证是否正确安装了 Docker Compose,您可以运行:

docker-compose --version

这应该会显示安装的 Docker Compose 版本。

五、Integrate工具

持续集成、持续部署的工具很多,其中Jenkins是一个开源的持续集成平台。

Jenkins涉及到将编写完毕的代码发布到测试环境和生产环境的任务,并且还涉及到了构建项目等任务。

Jenkins需要大量的插件保证工作,安装成本较高,下面会基于Docker搭建Jenkins。

1. Jenkins介绍

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具

Jenkins应用广泛,大多数互联网公司都采用Jenkins配合GitLab、Docker、K8s作为实现DevOps的核心工具。

Jenkins最强大的就在于插件,Jenkins官方提供了大量的插件库,来自动化CI/CD过程中的各种琐碎功能。

Jenkins最主要的工作就是将GitLab上可以构建的工程代码拉取并且进行构建,再根据流程可以选择发布到测试环境或是生产环境。

一般是GitLab上的代码经过大量的测试后,确定发行版本,再发布到生产环境。

CI/CD可以理解为:

  • CI过程即是通过Jenkins将代码拉取、构建、制作镜像交给测试人员测试。

    • 持续集成:让软件代码可以持续的集成到主干上,并自动构建和测试。
  • CD过程即是通过Jenkins将打好标签的发行版本代码拉取、构建、制作镜像交给运维人员部署。

    • 持续交付:让经过持续集成的代码可以进行手动部署。

    • 持续部署:让可以持续交付的代码随时随地的自动化部署

2. Jenkins安装

  1. 下载镜像
docker pull jenkins/jenkins:2.319.1-lts

docker pull jenkins/jenkins:2.346.3-lts

docker pull jenkins/jenkins:lts-jdk8
  1. 编写docker-compose.yml
version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins:2.319.1-lts
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - ./data/:/var/jenkins_home/

首次启动会因为数据卷data目录没有权限导致启动失败,设置data目录写权限。

# 启动
docker-compose -up -d

# 没有给data授权,会启动失败,添加权限
chmod -R a+w data/

# 重新启动jenkins,jenkins初始化密码
docker-compose logs -f jenkins

cat /var/jenkins_home/secrets/initialAdminPassword

cfd687191b0349e8b6ea18416e99773c

# 修改后的账号密码:root

在这里插入图片描述

重新启动Jenkins容器后,由于Jenkins需要下载大量内容,但是由于默认下载地址下载速度较慢,需要重新设置下载地址为国内镜像站

vim /usr/local/docker/jenkins_docker/data/hudson.model.UpdateCenter.xml

修改配置

# 修改数据卷中的hudson.model.UpdateCenter.xml文件
<?xml version='1.1' encoding='UTF-8'?>
<sites>
    <site>
        <id>default</id>
        <url>https://updates.jenkins.io/update-center.json</url>
    </site>
</sites>

# 将下载地址替换为http://mirror.esuni.jp/jenkins/updates/update-center.json
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
    <id>default</id>
    <url>http://mirror.esuni.jp/jenkins/updates/update-center.json</url>
</site>
</sites>
# 清华大学的插件源也可以
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

选择下载插件,然后点击安装。

注意:

本人在下载了

docker pull jenkins/jenkins:2.319.1-lts

docker pull jenkins/jenkins:2.346.3-lts

这两个版本,插件都安装不了,最后下载了 jenkins:2.472版本,也就是最新的,插件安装成功了,很多插件都不支持拉版本了,需要下载新版本的Jenkins。

3. Jenkins配置

由于Jenkins需要从Git拉取代码、需要本地构建、甚至需要直接发布自定义镜像到Docker仓库,所以Jenkins需要配置大量内容。

1. 准备工作

插件下载完成之后,创建个人账号,然后登陆进来。进入到下面的页面:

在这里插入图片描述

2. 插件下载安装

点击管理Jenkins进入到下面的页面,如果有插件下载失败的可以到插件管理重新下载,要是还是失败,记得修改上面说的配置文件,或者自己下载之后,导入也可以,具体步骤就不做赘述了,网上有很多。在这里插入图片描述
安装git parameter,publish over ssh 插件,一个是拉取代码,一个是推送。

4. 配置Jenkins的JDK,Maven

代码拉取到Jenkins本地后,需要在Jenkins中对代码进行构建,这里需要Maven的环境,而Maven需要Java的环境,接下来需要在Jenkins中安装JDK和Maven,并且配置到Jenkins服务。

配置Maven构建代码

  • 解压压缩包,并配置Maven的settings.xml。
<!-- 阿里云镜像地址 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- JDK1.8编译插件 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
  • 把安装的JDK和Maven放到Jenkins的数据卷的目录下面
# 这里写自己挂载的目录
cd /usr/local/docker/jenkins_docker/data 
mv /usr/local/jdk ./  
mv /usr/local/maven ./  

# 进入到jenkins容器
docker exec -it jenkins bash

cd /var/jenkins_home
ls -l

在这里插入图片描述

已经映射到容器的内部了。
已经映射到容器的内部了。

  • 配置Jenkins任务构建代码,到jenkins页面,全局配置中就是Tool配置

在这里插入图片描述

在这里插入图片描述

配置自己的jdk和maven目录即可,完成后点击保存。

现在我们的jenkins可以拉取代码,可以编译代码,下面配置把编译好jar包推送到目标服务器。用到插件publish over ssh,确保已经安装好。

5. 配置Publish发布&远程操作

jar包构建好之后,就可以根据情况发布到测试或生产环境,这里需要用到之前下载好的插件Publish Over SSH。

进入系统配置,system里面,找到pulish over ssh。

  • 配置Publish Over SSH连接测试、生产环境,配置任务的构建后操作,发布jar包到目标服务
    在这里插入图片描述
    目标服务器名称:test

服务器地址:192.168.201.111

用户:用户名

远程目录:/usr/local/test (没有目录提前创建即可)

确保目标服务器已经安装docker,docker-comgpose。最后应用,保存。

  • 立即构建任务,并去目标服务查看
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值