惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
V
Visual Studio Blog
T
Tor Project blog
量子位
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
有赞技术团队
有赞技术团队
博客园 - 司徒正美
博客园_首页
罗磊的独立博客
美团技术团队
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
C
Check Point Blog
博客园 - 聂微东
爱范儿
爱范儿
Schneier on Security
Schneier on Security
T
Threat Research - Cisco Blogs
T
Tailwind CSS Blog
L
LINUX DO - 热门话题
大猫的无限游戏
大猫的无限游戏
V
Vulnerabilities – Threatpost
C
Cisco Blogs
GbyAI
GbyAI
Spread Privacy
Spread Privacy
博客园 - 叶小钗
博客园 - 【当耐特】
T
Tenable Blog
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
J
Java Code Geeks
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
Simon Willison's Weblog
Simon Willison's Weblog
N
Netflix TechBlog - Medium
T
The Exploit Database - CXSecurity.com
腾讯CDC
C
CERT Recently Published Vulnerability Notes
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
Scott Helme
Scott Helme
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Martin Fowler
Martin Fowler

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 mysql | 线程上限问题处理 麒麟 7.6 安装谷歌 OTP 认证模块 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | 自动更新系统代理 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist shell | 检测网站存活并自动钉钉告警 Zabbix | 监控端口连通性并自动追踪 TCP 路由 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小 shell | centos 初始化 loki (二) 部署 loki (一) 简介 prometheus (六) Alertmanager prometheus (五) 记录规则与告警规则 prometheus (四) 黑盒监控 prometheus (三) 服务发现 prometheus (二) 静态配置 prometheus (一) 简介及部署 traefik (四) TraefikService 服务 traefik (三) Middleware 中间件 traefik (二) ingressRoute 路由 traefik (一) 简介、部署和配置 kubernetes | Gateway API 简介及部署 linux | dns 配置文件中 search 和 options ndots 详解 kubernetes | command args 和 dockerfile 中的 ENTRYPOINT CMD kubernetes | statefulset 控制器详解 docker | dockerfile 最佳实践 docker | dockerfile 指令详解 linux | kill 命令详解以及 linux 中的信号 troubleshooting | elasticsearch 安装插件报错 shell | if 条件判断 docker | 下载外网镜像的几种方式 python | 鬼谷子数学问题 steam挂刀教程 linux | history 命令的格式化输出 shell | 将本地镜像批量推送到 harbor windows | hosts 文件修复 kubernetes | configmap & secret kubernetes | RBAC 鉴权和 NetworkPolicy kubernetes | service & ingress kubernetes | 存储 kubernetes | 滚动升级和自动伸缩 kubernetes | 控制器 kubernetes | 日志 kubernetes | 调度 kubernetes | pod kubernetes | 杂记 linux | set 命令详解 ceph | openeuler 部署 ceph-v16 ceph | ceph-v16 离线安装解决方案 pxe 如何应对复杂的服务器硬件环境 python | 批量修改目录下文件名 《微习惯》 ceph | openeuler (aarch64) 部署 ceph-v16 troubleshooting | glibc 误升级后修复 pxe 安装配置大全 《人间失格》 跑步日常 [置顶] Hello, hugo! shell | 检索某 url 中所有文件的内容 shell | 不同执行方式的区别 shell | 开启 debug 模式 vscode | 常见问题 windows & linux 多网卡时设置默认路由以及添加静态路由 mysql (二) 主从复制原理 GTID 并行复制 mysql (一) 部署 mysql | 杂记 httpd 源码打包编译成 rpm 包 openssl 源码打包编译成 rpm 包 centos7 | 修改网卡名称 ceph | pool pg_num 配置 docker | 脚本方式批量导出/导入镜像 centos 密码尝试次数过多问题处理 centos7 | 升级内核至 5.10 CVE-1999-0526 ceph | centos7 部署 ceph-v12 python | 修改 pip 源 troubleshooting | 安装 cloud-init 后导致 ssh 连接失败 windows | autohotkey 常用脚本
cicd | jenkins 部署 mall-swarm 项目
lvbibir · 2022-03-15 · via lvbibir's Blog
文章目录
  • 0 前言
  • 1 系统配置
  • 2 docker
  • 3 jenkins
    • 3.1 启动容器
    • 3.2 跳过在线验证
    • 3.3 插件配置
    • 3.4 权限配置
  • 4 gitlab
    • 4.1 启动容器
    • 4.2 配置
    • 4.3 上传项目
  • 5 依赖服务部署
    • 5.1 前期配置
    • 5.2 启动服务
    • 5.3 服务配置
  • 6 jenkins 手动发布项目
    • 6.1 脚本配置
    • 6.2 jenkins 配置
      • 6.2.1 mall-admin 工程配置
      • 6.2.2 其他模块工程配置
    • 6.3 开始构建

0 前言

基础环境

  • 系统:Centos 7.9.2009 minimal
  • 配置:4 cpus / 24G mem / 50G disk
  • 网卡:1.1.1.4/24

我这里采用的是 all-in-one 的配置,即所有操作都在一台主机上,如资源充足可以将 jenkins 和 gitlab 与后续项目容器分开部署

1 系统配置

防火墙、selinux、yum

sed -i '/SELINUX/s/enforcing/disabled/' /etc/sysconfig/selinux
setenforce 0
iptables -F
systemctl disable firewalld
systemctl stop firewalld

mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

curl http://mirrors.aliyun.com/repo/Centos-7.repo -o /etc/yum.repos.d/Centos-Base.repo
sed -i '/aliyuncs.com/d' /etc/yum.repos.d/Centos-Base.repo

yum clean all
yum makecache fast
yum install -y wget net-tools vim bash-completion unzip

mkdir /mydata

2 docker

先安装 docker-compose

wget https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -O /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose version

安装 docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
mkdir -p /etc/docker
# 镜像加速器
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://jc0srqak.mirror.aliyuncs.com"]
}
EOF

允许 docker 守护进程的 tcp 访问,为了后续 jenkins 构建时调用,以生成 docker 镜像

[root@localhost ~]# vim /usr/lib/systemd/system/docker.service
# 修改如下内容
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

systemctl daemon-reload
systemctl restart docker && systemctl enable docker

查看端口,确保修改正确

[root@localhost ~]# ss -tnlp | grep 2375
LISTEN   0   128  [::]:2375   [::]:*  users:(("dockerd",pid=1124,fd=4))

安装一系列后续需要的镜像,镜像文件比较大,这步比较耗时

docker pull jenkins/jenkins:lts
docker pull gitlab/gitlab-ce:latest
docker pull mysql:5.7
docker pull redis:7
docker pull nginx:1.22
docker pull rabbitmq:3.9-management
docker pull elasticsearch:7.17.3
docker pull logstash:7.17.3
docker pull kibana:7.17.3
docker pull mongo:4
docker pull nacos/nacos-server:v2.1.0

3.1 启动容器

docker run -d --restart=always \
-p 8080:8080 -p 50000:5000 \
--name jenkins -u root \
-v /mydata/jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts

# 获取初始管理员密码
[root@localhost ~]# cat /mydata/jenkins_home/secrets/initialAdminPassword
bd5b64c7c8c8467985a0faa6fbe1848f

3.2 跳过在线验证

启动成功访问 http://1.1.1.4:8080 ,等出现密码界面后输入密码应该会进入一个离线页面,如下

image-20230315161553373

❗ 这个界面不要关,新开一个窗口访问 http://1.1.1.4:8080/pluginManager/advanced

将 update site 的 url 修改为 http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json,这步是为了加速插件安装

image-20230315161635537

接下来跳过 jenkins 的在线验证,在终端再执行

docker exec -it jenkins /bin/sh -c "echo 127.0.0.1 www.google.com >> /etc/hosts"
docker exec -it jenkins cat /etc/hosts

然后回到第一个离线页面刷新一下,应该可以看到离线状态消除了,这里是因为 jenkins 在 /mydata/jenkins_home/updates/default.json 中定义了通过访问 google 来判断 jenkins 节点是否是在线状态

之后选择安装推荐的插件,进入插件安装界面,这个过程耗时会比较长,如果有插件安装失败可以重试

image-20230315162316804

之后创建管理员用户,一路确定后到主页

3.3 插件配置

dashboard -> 系统管理 -> 插件管理中安装 ssh 插件和 Role-based Authorization Strategy 插件,安装完成后重启 jenkins

image-20230315171029905

新增 ssh 凭据

image-20230315172425485

新增 ssh 配置,配置好之后右下角测试一下,连接正常后保存

image-20230315172224961

新增 maven 配置

image-20230315170741500

3.4 权限配置

我们可以使用 Jenkins 的角色管理插件来管理 Jenkins 的用户,比如我们可以给管理员赋予所有权限,运维人员赋予执行任务的相关权限,其他人员只赋予查看权限。

在系统管理 -> 全局安全配置中启用基于角色的权限管理:

image-20230315172813560

关闭代理,保存

image-20230315172855436

分配管理员、运维和 other 三个角色,分别配置对应权限

image-20230315173418268

image-20230315173251456

将用户和角色绑定

image-20230315173353689

4 gitlab

4.1 启动容器

docker run --detach --restart=always\
  -p 10443:443 -p 1080:80 -p 1022:22 \
  --name gitlab \
  --restart always \
  --volume /mydata/gitlab/config:/etc/gitlab \
  --volume /mydata/gitlab/logs:/var/log/gitlab \
  --volume /mydata/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest
  
# 获取密码
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

访问 http://1.1.1.4:1080/, 默认用户为 root

4.2 配置

配置中文,修改完后刷新网页即可

image-20230315174825623

修改默认密码

image-20230316102521034

4.3 上传项目

新建空白项目

image-20230316100124782

新建 mall-swarm 项目

image-20230316103923131

clone github 上的原项目,我是 windows 系统,所以这里用的是 git-bash

git clone https://github.com/macrozheng/mall-swarm.git
cd mall-swarm

# 重命名github远端仓库
git remote rename origin github
# 添加gitlab仓库
git remote add gitlab http://1.1.1.4:1080/root/mall-swarm.git
git remote -v

image-20230316101527597

修改一下 docker.host 变量

image-20230316101902285

新建 commit 并提交到 gitlab 仓库,初次提交需要输入 gitlab 的用户名密码

git add .
git commit -m "change docker.host -> 1.1.1.4"
git push gitlab master

image-20230316103602343

默认配置不合理,修改 docker-compose-env.yml 中 nginx 的配置文件挂载

      - /data/nginx/nginx.conf:/etc/nginx/nginx.conf #配置文件挂载

image-20230316123226022

上传到 gitlab

git add .
git commit -m "update nginx volume config in document/docker/docker-compose.env.yml"
git push gitlab master

5 依赖服务部署

需要上传到服务器的配置文件准备,如下图所示,为了方便可以将整个 document 目录传到服务器

image-20230316105111389

5.1 前期配置

Elasticsearch

  • 设置内核参数,否则会因为内存不足无法启动
sysctl -w vm.max_map_count=262144
sysctl -p
  • 创建数据目录并设置权限,否则会报权限错误
mkdir -p /mydata/elasticsearch/data/
chmod 777 /mydata/elasticsearch/data/

Nginx

  • 创建目录,上传配置文件
mkdir -p /mydata/nginx/conf/
cp /mydata/document/docker/nginx.conf /mydata/nginx/conf/

Logstash

  • 创建目录上传配置文件
mkdir /mydata/logstash
cp /mydata/document/elk/logstash.conf /mydata/logstash/

5.2 启动服务

docker-compose -f /mydata/document/docker/docker-compose-env.yml up -d

docker-compose 会自动创建一个 docker_default 网络,所有容器都在这个网络下

image-20230316110813031

启动完成后 rabbitmq 由于权限问题未能正常启动,给 log 目录设置权限,再执行 docker-compose 启动异常的容器

chmod 777 /mydata/rabbitmq/log/
docker-compose -f /mydata/document/docker/docker-compose-env.yml up -d

确保所有容器正常启动

5.3 服务配置

mysql

需要创建 mall 数据库并授权给 reader 用户

  • 将 sql 文件拷贝到容器
docker cp /mydata/document/sql/mall.sql mysql:/
  • 进入 mysql 容器执行如下操作
# 进入mysql容器
docker exec -it mysql /bin/bash
# 连接到mysql服务
mysql -uroot -proot --default-character-set=utf8
# 创建远程访问用户
grant all privileges on *.* to 'reader' @'%' identified by '123456';
# 创建mall数据库
create database mall character set utf8;
# 使用mall数据库
use mall;
# 导入mall.sql脚本
source /mall.sql;
# 退出数据库
exit
# 退出容器
ctrl + d

Elasticsearch

注意版本需要与 elasticsearch 的版本一致

  • 上传到服务器并解压到 plugins 目录
mkdir /mydata/elasticsearch/plugins/analysis-ik
unzip /mydata/elasticsearch-analysis-ik-7.17.3.zip -d /mydata/elasticsearch/plugins/analysis-ik/
  • 重启容器
docker restart elasticsearch

Logstash

  • 安装 json_lines 插件并重启
docker exec -it logstash /bin/bash
logstash-plugin install logstash-codec-json_lines
docker restart logstash

rabbitmq

需要创建一个 mall 用户并设置虚拟 host 为/mall

  • 访问管理页面: http://1.1.1.4:15672/ 默认账户密码: guest / guest
  • 创建管理员用户: mall / mall

image-20230316121205905

  • 创建一个新的虚拟 host 为 /mall

image-20230316121307706

  • 点击 mall 用户进入用户配置界面

image-20230316121408922

  • 给 mall 账户配置虚拟 host /mall 的权限

image-20230316121547316

nacos

  • 由于我们使用 Nacos 作为配置中心,统一管理配置,所以我们需要将项目 config 目录下的所有配置都添加到 Nacos 中 Nacos 访问地址:http://1.1.1.4:8848/nacos/ 账号密码:nacos / nacos

  • 需要上传的配置

image-20230316124304792

  • 上传配置

image-20230316124618771

  • 全部上传完成

image-20230316124828650

6 jenkins 手动发布项目

6.1 脚本配置

Jenkins 自动化部署是需要依赖 Linux 执行脚本的

添加执行权限

chmod a+x /mydata/document/sh/*.sh

之前使用的是 Docker Compose 启动所有依赖服务,会默认创建一个网络,所有的依赖服务都会在此网络之中,不同网络内的服务无法互相访问。所以需要指定 sh 脚本中服务运行的的网络,否则启动的应用服务会无法连接到依赖服务。

修改脚本内容,为每个脚本添加 --network docker_default \

sed -i '/^docker run/ a\--network docker_default \\' /mydata/document/sh/*.sh

确认修改是否成功

image-20230316125833420

6.2 jenkins 配置

6.2.1 mall-admin 工程配置

由于各个模块执行任务的创建都大同小异,下面将详细讲解 mall-admin 模块任务的创建,其他模块将简略讲解。

image-20230316131035301

源码管理

image-20230316131241019

创建一个构建,构建 mall-swarm 项目中的依赖模块,否则当构建可运行的服务模块时会因为无法找到这些模块而构建失败

# 只install mall-common,mall-mbg两个模块
clean install -pl mall-common,mall-mbg -am

创建一个构建,单独构建并打包 mall-admin 模块

clean package
${WORKSPACE}/mall-admin/pom.xml

image-20230316131838994

再创建一个构建,通过 SSH 去执行 sh 脚本,这里执行的是 mall-admin 的运行脚本:

image-20230316132503984

6.2.2 其他模块工程配置

以 mall-gateway 为例

输入任务名称,直接复制 mall-admin 工程配置

image-20230316132845976

修改第二步构建中的 pom 文件位置和第三步构建中的 sh 文件位置

image-20230316133013058

6.3 开始构建

单击开始构建即可开始构建任务,可以实时看到任务的控制台输出

image-20230316134827150

由于作为注册中心和配置中心的 Nacos 已经启动了,其他模块基本没有启动顺序的限制,但是最好还是按照下面的顺序启动。

推荐启动顺序:

  • mall-auth
  • mall-gateway
  • mall-monitor
  • mall-admin
  • mall-portal
  • mall-search

以上