前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(1/2)集成部署(CICD)· 使用篇

(1/2)集成部署(CICD)· 使用篇

作者头像
老张的哲学
发布2023-01-09 18:45:33
5170
发布2023-01-09 18:45:33
举报
文章被收录于专栏:NetCore 从壹开始NetCore 从壹开始

集成和部署(CICD)

我们需要做持续集成持续部署的工作首先我们需要了解他给我们带来什么 接下来我将使用Jenkins来做CICD的演示 下面先描述并列举一下持续集成持续部署的一些优点概念

优点

  1. 卓越的代码质量
  2. 减少变更和审核时间
  3. 加速发布周期
  4. 故障检测和隔离
  5. 增强测试可靠性
  6. 减少任务堆积
  7. 改善平均解决时间
  8. 降低成本
  9. 增强透明度和责任制
  10. 简化沟通
  11. 频繁的更新和维护
  12. 提升客户满意度
  13. 增强的性能指标*

现在你已经了解实施CI/CD流水线的好处,我觉得是时候做出转变了。

只需记住几件事,你的CI/CD管道步骤越多,你将能获得越多的好处。它将自动提高你的发布速度和质量。请记住,这些好处并不局限于业务,还会影响项目方和最终用户,因为它们能降低成本和更好的投资回报率。

环境准备

系统:Centos7 64位 内核版本:5.0以上 内存大小:8G以上

初始化

这里我们需要执行一些初始化系统的指令

代码语言:javascript
复制
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
# 永久关闭selinux(重启后生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 临时关闭selinux(不需要重启,立即生效)
setenforce 0
# 关闭swap
# 永久关闭swap(重启后生效)
sed -ri 's/.*swap.*/#&/' /etc/fstab 
# 临时关闭swap(不需要重启,立即生效)
swapoff -a
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 立即生效
sysctl --system
# 时间同步
yum install ntpdate -y
ntpdate -u pool.ntp.org
# 添加定时
crontab  -l
*/20 * * * * /sbin/ntpdate -u pool.ntp.org > /dev/null 2>&1

升级系统内核

首先我们查看系统内核版本 输入下面指令会出现如下列表 0 : CentOS Linux (3.10.0-1160.53.1.el7.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.11.1.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core) 3 : CentOS Linux (0-rescue-ccae925869aa43f9b2868f73a0a778e7) 7 (Core) 会看到系统内核版本才3.10 所以这时候我们需要升级内核

代码语言:javascript
复制
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
或者
rpm -qa kernel

接下来我们先导入内核源

代码语言:javascript
复制
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # 导入elrepo的签名
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-5.el7.elrepo.noarch.rpm # 升级elrepo源

导入软件yum源

这里使用的阿里巴巴的软件源

你也可以使用其他比如清华,163等等

代码语言:javascript
复制
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo --no-check-certificate
yum makecache

查看系统可用版本,我们看可以看到两个大版本

kernel-lt 基于长期支持分支

kernel-ml 基于主线稳定分支

代码语言:javascript
复制
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

这里我们使用ml主线稳定分支版本即可

执行安装指令

代码语言:javascript
复制
yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel -y

安装内核会等个几分钟

这里需要耐心等待

安装完成后

再次查看内核

我们看到5.19内核已经安装成功了

代码语言:javascript
复制
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

设置最新内核为第一启动项

代码语言:javascript
复制
grub2-set-default 0

接着重启即可

查看内核是否升级成功

代码语言:javascript
复制
uname -a

安装Docker

执行下面命令安装docker

代码语言:javascript
复制
#安装wget
yum install wget -y
#下载docker-ce源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#查看可以安装的docker版本
yum list docker-ce --showduplicates | sort -r
#安装docker
yum install -y docker-ce-20.10.10 docker-ce-cli-20.10.10 containerd.io-1.4.12
#查看docker版本
docker -v
#创建docker配置目录
mkdir /etc/docker
#配置docker源
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
#重载
systemctl daemon-reload
#设置开机启动
systemctl enable docker
#启动docker服务
systemctl start docker
#旧版docker迁移
grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'
systemctl stop docker
systemctl start docker
#查看docker
docker -v

查看docker

出现版本号说明安装成功

代码语言:javascript
复制
docker -v

自此系统环境准备完成

安装软件-Jenkins

gitlab github 这里我们用到Jenkins作为集成部署工具 文档:https://hub.docker.com/_/jenkins

编写Dockerfile

首先我们来编写一个Jenkins的Dockerfile文件

代码语言:javascript
复制
cat > Dockerfile << EOF
FROM jenkins/jenkins:lts
USER root 
#指定容器的源
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt clean
#安装集成部署需要用到软件
RUN apt-get update
RUN apt-get install -y wget 
RUN apt-get install -y iputils-ping
#RUN apt-get install -y libltdl7 
RUN apt-get install -y apt-transport-https
#RUN apt-get install -y npm 
ENTRYPOINT ["/sbin/tini","--","/usr/local/bin/jenkins.sh"]
EOF

执行完成后在当前目录下可以看到一个Dockerfile文件

此文件类似于一个安装清单

编写执行脚本

接下来就是编写Jenkins的安装脚本并启动在Docker中

接下来就是创建一个执行脚本文件Jenkins.sh 来创建Jenkins软件

代码语言:javascript
复制
cat > Jenkins.sh << EOF
echo 创建Jenkins数据目录
mkdir jenkins_home
echo 停止容器中...
docker stop jenkinsserver
echo 删除容器中...
docker rm jenkinsserver 
echo 删除镜像中...
docker rmi myjenkins 
echo 构建镜像中...
docker build -t myjenkins .
echo 创建容器中...
docker run --restart=always --name jenkinsserver \
--env JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m" \
-e TZ=Asia/Shanghai \
-p 8888:8080 -p 50000:50000 \
-u 0 \
-v /var/ans/jenkins/home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-d myjenkins
EOF

可以看到我们安装脚本创建成功了

执行安装

代码语言:javascript
复制
bash Jenkins.sh

当执行后等待几分钟

当看到一串字母就说明成功了

我们也可以执行Docker指令查看Jenkins运行状态

代码语言:javascript
复制
docker ps

访问Jenkins服务

这时候可以通过web服务访问Jenkins 这儿等待Jenkins初始化完成我们就可以进行登录

获取初始密码

初始化完成会出现获取初始化密码的界面

获取初始化登录密码

获取后输入到文本框然后继续

代码语言:javascript
复制
docker exec -u 0 jenkinsserver /bin/sh -c "cat /var/jenkins_home/secrets/initialAdminPassword"

等待初始化

接着让你选择默认设置还是自定义设置 这里就选择默认设置即可 接着就会出现安装界面 等待安装完成即可

登录系统

接着设置账号密码

配置访问的url

如果在外网访问就需要

这里默认即可

登录成功

安装svn组件

这里我们在Jenkins中安装svn代码获取组件

以便于我们在后面创建项目时可以选择svn仓库中的代码进行集成部署

安装svn组件成功后重启Jenkins服务 重启Jenkins服务后我们就开始创建Jenkins的CICD任务

集成部署任务

环境和软件都搭建好了 接下来创建一个集成部署任务测试一下

创建任务

点击创建任务 输入一个任务名称 然后选择构建一个自由风格的软件项目

填写代码仓库地址

填写仓库地址 这里先用我自己gitlab做演示吧 当然你也可以用svn的地址或者github地址都是可以的

编写构建部署脚本

编写构建脚本

代码语言:javascript
复制
echo 构建app中...
docker build -t myapp .
echo 创建容器中...
docker run --restart=always --name myapp \
-e TZ=Asia/Shanghai \
-p 8080:80 \
-d myapp
echo 构建并部署完成

查看日志

保存任务后我们手动执行CI/CD任务 此时我们打开任务控制台查看日志 可以看到任务是先拉取仓库代码 然后执行Docker构建任务

构建部署结果

可以看到Success的标志 说明构建部署任务已经完成

访问部署服务

此时我们尝试访问构建成功的一个web服务 上面用到的端口是 8080端口 可以看到我们访问web服务的一个接口成功返回了数据

至此我们的CI/CD基础搞清楚了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NetCore 从壹开始 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 集成和部署(CICD)
    • 优点
      • 环境准备
        • 初始化
        • 升级系统内核
        • 安装Docker
      • 安装软件-Jenkins
        • 编写Dockerfile
        • 编写执行脚本
        • 获取初始密码
        • 等待初始化
        • 登录系统
        • 安装svn组件
      • 集成部署任务
        • 创建任务
        • 填写代码仓库地址
        • 编写构建部署脚本
        • 查看日志
        • 构建部署结果
        • 访问部署服务
    相关产品与服务
    持续部署
    CODING 持续部署(CODING Continuous Deployment,CODING-CD)用以管理软件在经过构建之后的发布和部署交付过程,可以无缝对接上游 Git 仓库、制品仓库实现全自动化部署,同时支持 Webhook 等外部对接能力,方便集成各种开发、运维工具。在配以合适的技术架构、运维工具的基础上,可以方便地实现蓝绿发布、灰度发布(金丝雀发布)、滚动发布、快速回滚等功能。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档