03、Kubernetes 实战 - ci-server 构建节点 Docker、Jenkins 环境搭建
一,前言
上一篇,主要介绍了阿里云服务器的采购和简单配置:
三台服务器规划如下:
服务 | 配置 | 内网IP | 外网IP | 说明 |
---|---|---|---|---|
ci-server | 2c4g | 172.17.178.104 | 182.92.4.158 | Jenkins + Nexus + Docker |
k8s-master | 2c4g | 172.17.178.105 | 47.93.9.45 | Kubernetes + Docker |
k8s-node | 2c1g | 172.17.178.106 | 39.105.58.35 | Kubernetes + Docker |
本篇,对 ci-server 进行环境安装与配置;
二,ci-server 构建机的 CI 流程简介
构建机ci-server(2c4g),用于提供 ci 所需的 Jenkins 服务、 Docker 私有仓库;
流程如图:
CI流程如下:
- IDE 本地开发,上传代码到 Git 仓库;
- 手动或自动触发 jenkins 拉取指定代码仓库并执行构建任务;
- 构建 docker 镜像并发布至私有镜像仓库;
三,安装 docker
1,docker 简介
- Docker 是 Docker.Lnc 公司开源的,基于 LXC 技术之上搭建的 Container 容器引擎,属于Linux容器的一种封装,提供简单易用的容器使用接口;
- Docker 使用 Go 语言开发实现,基于 Linux 内核的 cgroup,namespace,OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器
- Docker 将应用程序与该程序的依赖,打包在一个文件里面,运行这个文件,就会生成一个虚拟容器
2,安装 docker
添加docker 阿里云镜像源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker 社区版本:docker-ce
yum install docker-ce -y
启动docker
systemctl start docker
设置docker 开机启动
systemctl enable docker
3,配置镜像加速
配置阿里云安装源:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"]
}
EOF
重启docker 使镜像配置生效
// 重载配置文件
sudo systemctl daemon-reload
sudo systemctl restart docker
四,安装 Jenkins
1,Jenkins 简介
- Jenkins:一个基于 Java 语言开发的持续构建工具平台,用于持续、自动的构建和测试你的软件和项目。
- Jenkins 能够执行预设的构建脚本、与 Git 代码仓库集成,实现自动/定时触发构建任务;
2,安装 Jenkins
安装java
yum install -y java
切换jenkins 安装源
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
安装jenkins
yum install jenkins -y
启动jenkins 服务
systemctl start jenkins.service
注意,此时还无法访问,需要系统关闭防火墙、开放端口访问
关闭防火墙
// 关闭防火墙
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=50000/tcp --permanent
// 重启防火墙
systemctl reload firewalld
开放端口访问
配置ECS 实例安全组:添加 8080 入方向,开放 8080 端口给外部访问:
这样就可以正常访问 Jenkins:http://182.92.4.158:8080/login
3,配置 Jenkins
获取管理员密码
首次访问 Jenkins 需要使用管理员密码登录并重置密码
页面显示了 jenkins 默认密码所在位置,打开文件获得解锁 jenkins 的密码:
[root@iZ2ze7rkgit9zoa18pxu73Z ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
26b889490519462f978276eb8f43882d
输入默认密码解锁 jenkins,进入 jenkins 初始化;
安装 jenkins 插件
修改jenkins 安装源
在安装插件前,需要先切换 jenkins 安装源,否则会很慢;
修改jenkins 插件安装的路径,加快插件安装的速度:
// 将 jenkins 官方源,修改为 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
说明:sed:修改字符串;-i:替换字符串;原地址;目标地址;
jenkins 插件的安装源更新完成后,继续操作 jenkins 初始化,安装插件:
选择“安装推荐的插件”,等待 3~5 分钟插件安装完成:
创建管理员账户
保存并完成
保存并完成
开始使用 Jenkins
至此,jenkins 安装并初始化完成;
五,测试并解决问题
1,测试 Jenkins 构建
新建item
输入任务名称,选择自由项目,点击确定
暂不配置 Git 仓库,单纯构建空项目用于测试:
立即构建
查看构建日志:
进入构建
查看控制台输出
2,测试拉取 docker 镜像(解决权限问题)
任务配置:
添加构建步骤:执行 shell
shell 内容:查看 docker 版本并拉取 node 最新镜像:
保存后,重新构建任务,查看日志:
拉取镜像失败,原因:没有权限
报错原因:
当前jenkins 用户不能访问 docker 服务;
解决方案:
需要将jenkins 添加至 docker 的 group 中,
jenkins 用户属于 docker 组,就可以访问 docker 服务了;
// 创建 docker 组
[root@iZ2ze7rkgit9zoa18pxu73Z ~]# groupadd docker
groupadd:“docker”组已存在
// 将 jenkins 用户添加到 docker 组中
[root@iZ2ze7rkgit9zoa18pxu73Z ~]# gpasswd -a jenkins docker
正在将用户“jenkins”加入到“docker”组中
// 更新 docker 组
[root@iZ2ze7rkgit9zoa18pxu73Z ~]# newgrp docker
[root@iZ2ze7rkgit9zoa18pxu73Z ~]#
再次构建还是失败!需要重启 jenkins,使配置生效:
systemctl restart jenkins.service
等待jenkins 重启完成之后,再次构建;
此时,可以正常拉取 docker 镜像,等待构建完成:
jenkins 构建成功;
3,Jenkins 任务添加 node 支持
安装 NodeJS 插件
系统管理 => 插件管理 => 可选插件 => 搜索并安装“NodeJS”插件
安装node 插件,为项目构建添加 node 支持(构建时可以使用 node 脚本)
安装完成后,勾选重启 jenkins,重启完成后,重新登录;
配置 NodeJS
系统管理 => 全局工具配置 => NodeJS => 新增 NodeJS:
找到NodeJS,选择 node 版本,起别名,新增安装(选择从镜像安装)
备注:构建 vue 项目选择 15 版本会失败,12 版本可以成功;
配置nodejs 镜像
完成后,保存应用;这样,就完成了 node 环境的添加
任务添加 nodejs 支持
任务配置 => 构建环境 => 勾选 Provide Node & npm bin/ folder to PATH
将nodejs 和 npm 的 bin 目录添加到 PATH 中:
保存/应用后,构建阶段就可以使用 node 环境了;
测试 Jenkins 任务构建
重新启动构建:
备注: 第一次会稍慢一些,要下载并解压 nodejs,第二次开始构建就会比较快了;
有了node 环境,构建脚本可以执行基于 node 的构建命令;
六,结尾
本篇,完成了 ci-server 的构建环境配置:
- ci-server 构建机的 CI 流程简介;
- Docker 的安装、配置、测试;
- Jenkins 的安装、配置、测试;
下一篇,K8S 集群搭建;