0-1实现CI/CD [ 第一章 ]

什么是CI

  • CI 的意思是 持续构建 。
    • 负责拉取代码库中的代码后,执行用户预置定义好的操作脚本,通过一系列编译操作构建出一个 制品 ,并将制品推送至到制品库里面。
  • 常用工具有 Gitlab CI,Github CI,Jenkins 等。
  • 这个环节不参与部署,只负责构建代码,然后保存构建物。构建物被称为 制品,保存制品的地方被称为 制品库

什么是CD

  • CD 则有2层含
    1. 持续部署(Continuous Deployment)
    2. 持续交付(Continuous Delivery) 。
    3. 持续交付 的概念是:将制品库的制品拿出后,部署在测试环境 / 交付给客户提前测试。 持续部署 则是将制品部署在生产环境。

硬件要求

配置技术栈类型标签
2核4GJenkins + Nexus + DockerCloud构建机
2核4GDocker + KubernetesCloudkubernetes Master
1核1GDocker + KubernetesCloudkubernetes Node

搭建构建机

  • 硬件要求:2核4G
  • Jenkins + Nexus + Docker
  • 阿里云->ECS服务器->按量付费->就近服务->共享型->2核4G
  • centOS->7.9
  • 创建完成之后,复制公网IP,用你喜欢的工具链接连接到服务器即可
  • 我用xshell
    在这里插入图片描述
  • 到了这一步,服务器创建,登录成功
  • 登录进去第一件事更新一下系统(非硬性要求)
  • yum update

搭建CI

在这里插入图片描述

  • 详细工作流
  • 在这里插入图片描述

安装docker

  • 安装工具包
    yum install -y yum-utils device-mapper-persistent-data lvm2

  • 指定安装源
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  • 安装CE版本docker
    yum install docker-ce -y

  • 安装完成后启动docker
    systemctl start docker

  • 为了方便使用可以设置为开机启动docker
    `systemctl enable docker

  • 如果速度太慢那么建议你可以配置安装源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"]
}
EOF
# 重载所有修改过的配置文件
sudo systemctl daemon-reload
sudo systemctl restart docker

安装git

yum install git -y

集成GIT仓库

  • 简介:此处建立与代码仓库的信任在做代码推送时,只要带有私钥的就可以通过密钥校验,而不需再通过密码
  • 生成公钥/私钥
    ssh-keygen -t rsa -C "你的邮箱地址"
  • 代码仓库配置公钥
    • 拿到生成的公钥
    • cat ~/.ssh/id_rsa.pub
    • 去代码仓库添加公钥
      设置=>安全设置 => SSH公钥
  • 至此CI服务器跟代码仓库建立免密访问的关系,那么从CI服务器发出对该代码仓库的命令也就可以顺利执行
  • ?那我再这个服务器创建jenkins并且把服务器私钥给jenkins带上,那是不是jenkinsi就可以操作代码仓库了…

安装Jenkins

  • 简介Jenkins
    • Jenkins 是一个基于 Java 语言开发的持续构建工具平台,主要用于持续、自动的构建/测试你的软件和项目。它可以执行你预先设定好的设置和构建脚本,也可以和 Git 代码库做集成,实现自动触发和定时触发构建
  1. 安装java
    yum install -y java
  2. 安装jenkins
    • docker pull jenkins/jenkins
  3. 采用cdn方式安装
    1. sudo wget -O /etc/yum.repos.d/jenkins.repo 你的cdn镜像地址/jenkins.repo
    2. sudo rpm --import 你的cdn镜像地址/jenkins.io.key
    3. yum install jenkins -y
  • 比如:
    sudo wget -O /etc/yum.repos.d/jenkins.repo https://img.zhufengpeixun.com/jenkins.repo
    sudo rpm --import https://img.zhufengpeixun.com/jenkins.io.key
  1. 启动 Jenkins
    systemctl start jenkins.service
  2. 开放端口-8080
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    firewall-cmd --zone=public --add-port=50000/tcp --permanent
    systemctl reload firewalld
  3. 访问jenkins
    你的公网ip:8080
    在这里插入图片描述
  • 仔细阅读信息,人家告诉你我的密码放在服务器那个位置了,复制那个红色的地址去服务器cat一下,复制到输入框回车就可以了
  • 查看密码 #
    cat /var/lib/jenkins/secrets/initialAdminPassword
    在这里插入图片描述
  • 下面我们去安装我们必须的插件,但是很慢,为什么?因为地址都在国外,所以我们要改下jenkins的安装源
    • 修改插件镜像(不改超慢,无敌慢…)
      sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
  • 设置第一个账号密码或用admin登录吧
    在这里插入图片描述
  • 构建第一个任务
    1. 新建item
    2. 选择freestyle project->确定
    3. 项目->配置->构建->执行shell
      docker -v
      docker pull node:latest
    4. 立即构建
    5. 报错哟~
解决jenkins没权限访问docker(常见问题)
  • 将jenkins添加到docker组里面
    groupadd docker # 创建一个docker组
    sudo gpasswd -a jenkins docker #将当前用户添加至docker用户组
    newgrp docker #更新docker用户组
  • 尝试执行构建,如果还有问题,查看docker状态
  • systemctl start docker.service
  • 还有问题?看看docker状态
    docker image ls
  • 如果还有问题? 重启一下jenkins
    systemctl restart jenkins.service
  • 至此一般就可以了

安装Node

  • 对于前端的工具流肯定要依赖node工作,所以我们需要在jenkins中安装node执行node命令
  • 系统管理 -> 插件管理 -> 可选插件 -> 安装NodeJS插件->安装完重启
  • 全局工具配置 -> NodeJS -> 新增NodeJS
    • 新增别名
    • 新增安装方式
    • 保存->应用
  • 设置任务的构建环境
    • 任务->配置->构建环境->Provide Node & npm bin/ folder to PATH
    • 重新在执行构建
      在这里插入图片描述

在jenkin配置私钥

  • 前面环境搞定了,下面我们给jenkins带上服务器私钥,去操作我们仓库里面的代码

  • 在 Jenkins 中,私钥/密码等认证信息都是以凭证的方式管理的
    一定要确保先安装git yum install git -y

  • 项目->配置 => 源码管理 =>把你的代码仓库ssh地址粘贴过来
    在这里插入图片描述

  • Credentials => 添加 => SSH Username with private key
    -在这里插入图片描述
    在这里插入图片描述

  • Username 你的邮箱
    在这里插入图片描述

  • 获取私钥
    cat ~/.ssh/id_rsa在这里插入图片描述

  • 可能不会马上生效,静待几分钟

  • 选择在这里插入图片描述

  • 可能会有问题,多尝试几次看看??

安装失败想卸载jenkins?

rpm -e jenkins #rpm卸载
rpm -ql jenkins #检查是否卸载成功
find / -iname jenkins | xargs -n 1000 rm -rf 彻底删除残留文件

插件安装总是失败?

在 jenkins 工作目录下找到文件 .jenkins/hudson.model.UpdateCenter.xml;打开文件内容如下

<sites>
  <site>
    <id>default</id>
    <url>https://updates.jenkins.io/update-center.json</url>
  </site>
</sites>

将url修改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json</url>
  </site>
</sites>

构建镜像

  1. 项目根目录
    • 新建Dockerfile
FROM nginx:1.15
COPY dist /etc/nginx/html
COPY conf /etc/nginx
WORKDIR /etc/nginx/html
  1. 项目根目录
    • 新建conf/site
server {
    listen  80;
    server_name  _;
    root /etc/nginx/html;
}
  1. jenkins 执行脚本
    • 构建-> 执行脚本
#!/bin/sh
npm install --registry=https://registry.npm.taobao.org
npm run build
docker build -t [构建名称]  .

请注意nodejs版本问题

  • 注意:在编译构建的过程中会出现依赖问题,很可能是node版本问题
    • 怎么解决?
      -系统配置->全局工具配置->安装node->选择合适版本

查看构建结果

docker image ls
在这里插入图片描述

  • 先把我们产出的镜像跑起来
    docker run -d okrt-web #okrt-web 你可以换成你的镜像名
    在这里插入图片描述
  • 进入我们的镜像中
    docker exec -it 72f450c27c1ff71a68355f1695c6e863b2a57cf4beae6e40e0229db3e8a88963 bash
  • 对应Dockerfile 查看目录下的问题件
FROM nginx:1.15
COPY dist /etc/nginx/html
COPY conf /etc/nginx
  • 查看打包的内容
    cd /etc/nginx/html
    在这里插入图片描述

  • 查看镜像配置
    cd /etc/nginx
    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值