一、DevOPS_学习笔记
此文档来源于B站"尚硅谷"博主的视频资料汇总,发布此平台的目的主要是为个人笔记所用。
视频地址:
二、基础环境建设
准备CentOS7镜像安装虚拟机,建议初始化后留存一份环境,后续有新的虚拟机使用需求可以使用克隆功能快速搭建环境
配置IP可参考
https://blog.csdn.net/anduchencang/article/details/114524142?spm=1011.2415.3001.5331
1、centos7环境学习阶段可关闭防火墙
markdown
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
# 看到:inactive (dead) 且 Enabled: disabled 就对了
2、修改yum源
markdown
# 1. 备份旧源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 2. 下载阿里云 CentOS 7 源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 3. 清理缓存、重建缓存
yum clean all
yum makecache
# 4.安装字体
yum install -y fontconfig dejavu-sans-fonts dejavu-serif-fonts
3、新建公共目录
mkdir -p /apps/{conf,data,lib,logs,run,sh,sharedstorage,svr,tools}
三、GitLab
新起一台CentOS7
1、提供三种安装方式,三选一
1.1 离线安装(企业级)
官方安装文档:https://gitlab.cn/install/?version=ce
gitlab-ce = 官方原版社区版(国际版,功能一致,原生英文 / 基础汉化)
markdown
# 下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.9.1-ce.0.el7.x86_64.rpm
# 安装
rpm -i gitlab-ce-15.9.1-ce.0.el7.x86_64.rpm
# 编辑 /etc/gitlab/gitlab.rb 文件
# 修改 external_url 访问路径 http://ip:port
http://192.168.127.128:28080/users/sign_in
# 其他配置修改如下
gitlab_rails['time_zone'] = 'Asia/Shanghai'
puma['worker_processes'] = 2
sidekiq['max_concurrency'] = 8
postgresql['shared_buffers'] = "128MB"
postgresql['max_worker_processes'] = 4
prometheus_monitoring['enable'] = false
# 更新配置并重启
gitlab-ctl reconfigure
gitlab-ctl restart
密码存在下面文件中,登录后需要改密码不然24小时之后会失效
vasg
cat /etc/gitlab/initial_root_password
1.2 docker安装(个人/测试)
docker安装可参考上面章节"安装docker"
1.2.1 添加容器(启动GitLab容器)
bash
# 拉取镜像
docker pull registry.gitlab.cn/omnibus/gitlab-jh:latest
# 启动容器
docker run --detach \
--hostname 192.168.127.180 \
--publish 443:443 --publish 80:80 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab:z \
--volume $GITLAB_HOME/logs:/var/log/gitlab:z \
--volume $GITLAB_HOME/data:/var/opt/gitlab:z \
--shm-size 256m \
registry.gitlab.cn/omnibus/gitlab-jh:latest
容器命令
docker start gitlab
docker restart gitlab
查看容器
bash
docker ps -a
进入容器
bash
docker exec -it gitlab /bin/bash
访问GitLab
bash
http://192.168.127.180
首次出现502错误排查
当首次运行出现502错误时,优先排查以下两个原因:
1.虚拟机内存至少需要 4G
2.稍微再等等刷新一下可能就好了
管理员账号登录
用户名:root
密码存在下面文件中,登录后需要改密码不然24小时之后会失效
vasg
cat /etc/gitlab/initial_root_password
1.3 ssh安装
gitlab-jh = 极狐 GitLab(国内维护,适配国内网络、汉化完善、有本土化功能)
1.3.1 安装依赖
sudo yum install -y curl policycoreutils-python oppenssh-server perl
sudo systemctl enable sshd
sudo systemctl start sshd
1.3.2 配置镜像
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash
1.3.3 开始安装
sudo EXTERNAL_URL="http://192.168.127.180" yum install -y gitlab-jh

除非您在安装过程中指定了自定义密码,否则将随机生成一个密码并存储在
/etc/gitlab/initial_root_password 文件中(出于安全原因,24小时后,此文件会被第一次gitlab-ctl
reconfigure 自动删除 , 因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码)。
vasg
cat /etc/gitlab/initial_root_password
1.3.4 gitlab常用命令
markdown
# 启动所有gitlab组件:
gitlab-ctl start
# 停止所有 gitlab组件:
gitlab-ctl stop
# 重启所有 gitlab组件:
gitlab-ctl restart
# 查看服务状态;
gitlab-ctl status
# 启动服务:
gitlab-ctl reconfigure
# 修改默认的配置文件:
vi /etc/gitlab/gitlab.rb
# 查看日志;
gitlab-ctl tail
2、配置GitLab
2.1 页面配置
markdown
# 查看默认密码
cat /etc/gitlab/initial_root_password
# 登录后修改默认密码 > 右上角头像 > Perferences > Access > Password > Change password
# 取消个人全球标识-修改系统配置:点击左上角三横 > Admin
Settings > General > Account and limit > 取消 Gravatar enabled > Save changes
# 关闭用户注册功能
# Settings > General > Sign-up restrictions > 取消 Sign-up enabled > Save changes
新版本在这里 Settings > General > New user account restrictions > Save changes
# 开启 webhook 外部访问
Settings > Network > Outbound requests > Allow requests to the local network from web hooks and services/integrations 勾选 > Save changes
# 设置语言为中文(全局)
Settings > Preferences > Localization > Default language > 选择简体中文 > Save changes
# 设置当前用户语言为中文
右上角用户头像 > Preferences > Localization > Language > 选择简体中文 > Save changes


2.2 为项目配置webhook
markdown
进入项目点击侧边栏设置 > Webhooks 进入配置即可
URL:在 jenkins 创建 pipeline 项目后
触发来源:
推送事件:表示收到新的推送代码就会触发
标签推送事件:新标签推送才会触发
评论:根据评论决定触发
合并请求事件:创建、更新或合并请求触发
添加成功后,可以在下方点击测试按钮查看 jenkins 是否成功触发构建操作
配置token和ssh密钥
2.3 卸载
markdown
# 停止服务
gitlab-ctl stop
# 卸载 rpm 软件(注意安装的软件版本是 ce 还是 ee)
rpm -e gitlab-ce
# 查看进程
ps -ef|grep gitlab
# 干掉第一个 runsvdir -P /opt/gitlab/service log 进程
# 删除 gitlab 残余文件
find / -name *gitlab* | xargs rm -rf
find / -name gitlab | xargs rm -rf
四、Jenkins
1、安装 JDK
1.1 OpenJDK17安装
安装
shell
mv ~/openjdk-17.0.2_linux-x64_bin.tar.gz /apps/svr/
tar -zxvf /apps/svr/openjdk-17.0.2_linux-x64_bin.tar.gz -C /apps/svr/
mv /apps/svr/jdk-17.0.2 /apps/svr/jdk17
rm -f /apps/svr/openjdk-17.0.2_linux-x64_bin.tar.gz
vi /etc/profile
export JAVA_HOME_17=/apps/svr/jdk17
export JAVA_HOME=$JAVA_HOME_17
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
java -version
1.2 JDK8安装
shell
mv ~/OpenJDK8U-jdk_x64_linux_hotspot_8u492b09.tar.gz /apps/svr/
tar -zxvf /apps/svr/OpenJDK8U-jdk_x64_linux_hotspot_8u492b09.tar.gz -C //apps/svr/
mv /apps/svr/jdk8u492-b09 /apps/svr/jdk8
rm -f /apps/svr/OpenJDK8U-jdk_x64_linux_hotspot_8u492b09.tar.gz
vi /etc/profile
export JAVA_HOME_8=/apps/svr/jdk8
export JAVA_HOME_17=/apps/svr/jdk17
# 根据你的常用JDK版本来配置
export JAVA_HOME=$JAVA_HOME_8
#export JAVA_HOME=$JAVA_HOME_17
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
java -version
或者使用yum下载
bash
yum search openjdk
yum install -y 你指定的版本
2、安装 maven
官网
https://maven.apache.org/download.cgi
下载链接
https://dlcdn.apache.org/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz
安装
shell
mv ~/apache-maven-3.9.16-bin.tar.gz /apps/svr/
tar -zxvf /apps/svr/apache-maven-3.9.16-bin.tar.gz -C /apps/svr/
mv /apps/svr/apache-maven-3.9.16 /apps/svr/maven
rm -f /apps/svr/apache-maven-3.9.16-bin.tar.gz
vi /etc/profile
export M2_HOME=/apps/svr/maven
export PATH=$PATH:$M2_HOME/bin
source /etc/profile
mvn --version
配置仓库
shell
mkdir -p /apps/data/repo
vi /apps/svr/maven/conf/settings.xml
<localRepository>/apps/data/repo</localRepository>
<!-- 私服没有可不配置 -->
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>central</mirrorOf>
<url>http://10.231.7.182:8081/repository/maven-public/</url>
</mirror>
<!-- 阿里云仓库 -->
<mirror>
<mirrorOf>central</mirrorOf>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!-- 阿里云https -->
<mirror>
<id>aliyun-central</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven Central</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
验证配置是否生效
shell
# 建临时文件夹
mkdir -p /tmp/maven-test && cd /tmp/maven-test
# 生成空pom
cat > pom.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>maven-demo</artifactId>
<version>1.0.0</version>
<!-- 引入一个常用依赖,比如 hutool 工具包 -->
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
</dependencies>
</project>
EOF
执行依赖拉取命令
mvn clean compile

3、安装 Git
markdown
# 安装git
yum install -y git
[root@localhost srv]# git --version
git version 1.8.3.1
[root@localhost srv]#
支持jDK8、11、17
下载war包
http://mirrors.jenkins.io/war-stable/2.541.3/jenkins.war
安装手册
https://www.jenkins.io/zh/doc/book/installing/
4、安装 jenkins.war
shell
mv ~/jenkins.war /apps/svr
cd /apps/svr
# 控制台启动
java -jar jenkins.war
# 后台启动
nohup java -jar jenkins.war >/dev/null 2>&1 &
# 插件默认安装在这里
~/.jenkins/plugins/
4.1 配置开机自启动(二选一)
4.1.1 rc.local
shell
# 启动命令加入 rc.local
echo "nohup /apps/svr/jdk17/bin/java -jar /apps/svr/jenkins.war >/dev/null 2>&1 &" >> /etc/rc.local
# 赋权
chmod +x /etc/rc.d/rc.local
# 确保 rc-local 服务开机启用
systemctl enable rc-local
systemctl start rc-local
systemctl status rc-local
# 重启验证
reboot

4.1.2 jenkins.service
/etc/systemd/system/jenkins.service
[Unit]
Description=Jenkins standalone WAR service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/root
Environment="JAVA_HOME=/apps/svr/jdk17"
Environment="JENKINS_HOME=/root/.jenkins"
ExecStart=/apps/svr/jdk17/bin/java -jar /apps/svr/jenkins.war --httpPort=8080
Restart=always
RestartSec=10
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
添加开机自启动服务
markdown
# 每次新增或修改 service 文件后,先执行
systemctl daemon-reload
# 开机自启动
systemctl enable jenkins.service
# 验证是否开机自启
systemctl is-enabled jenkins.service
# 启动、关闭、重启、查看状态
systemctl start jenkins
systemctl stop jenkins
systemctl restart jenkins
systemctl status jenkins
4.2 访问
markdown
http://ip:8080
# 密码在这里
/root/.jenkins/secrets/initialAdminPassword
安装推荐的插件


创建第一个管理员账号,保存并完成

4.3 配置 升级站点 为阿里云镜像
markdown
Manage jenkins -> Plugin Manager -> Advanced -> Update Site
# 目前Jenkins官网可访问反而是阿里云的不可访问,信息过时了,这个建议先不配
https://updates.jenkins.io/update-center.json -> https://mirrors.aliyun.com/jenkins/updates/update-center.json
4.4 安装插件
Manage jenkins -> Plugin Manager -> Available
Maven Integration
Pipeline Maven Integration
Pipeline: REST API
Pipeline: Stage View
Docker Pipeline
Blue Ocean
SonarQube
GitLab
SSH Pipeline Steps
Publish Over SSH
Docker
Role-based Authorization Strategy
5、配置
5.1 全局工具配置
Maven Conf、JDK、Maven
/apps/svr/maven/conf/settings.xml
/apps/svr/jdk17
/apps/svr/jdk8
/apps/svr/maven
5.2 添加GitLab凭证
系统管理配置 -> 全局配置 -> 添加GitLab凭证



5.3 新建jenkins任务
配置git仓库
测试时项目给的权限是公开
markdown
# 生产要配置ssh密钥
ssh-keygen -t ed25519 -C [your email] -f ~/.ssh/id_ed25519
回车到底
cat ~/.ssh/id_ed25519.pub
# 把公钥配置到GitLab
手动去jenkins服务器拉一下代码,之后再去走自动化构建任务

选择构建触发器
Build whenever a SNAPSHOT dependency is built(保存快照,pom文件未变化时不去更新依赖)
构建环境
先不配置
Pre Steps 构建前的操作
可以在构建前执行脚本
Build Maven
Root Pom
pom.xml
Global and options
Post Steps 构建完成后的操作
配置归档成品
target/*.jar
target/*.war
可以发布到测试环境
Post Steps 构建完成后的操作 -> 配置归档成品
markdown
# 文件归档
/root/.jenkins/jobs/项目名/builds/构建id
# 工作空间
/root/.jenkins/workspace/项目名
5.4 Publish ssh
系统管理 -> 系统配置 -> 新增ssh服务

配置超时时间

配置构建任务 Post Steps

验证通过、发布成功

6、常见的自动构建方式
-
Build whenever a SNAPSHOT dependency is built
- 当前依赖的快照被构建时执行本job
-
触发远程构建 (例如脚本、GitLab)
- 远程调用本 job 的 restAPI 时调用本 job
-
其他工程构建后触发(例如父项目)
- 当前依赖的 job 被构建时执行本 job
-
定时构建(cron表达式同linux)
- https://crontab.guru/ 可使用这个网站验证cron表达式
-
GitHub hook trigger for GITScm polling(关联)
-
① Push Events 本地 git push 推送代码到远端分支时触发构建
- 场景:你在本地写完代码
git push推送到 jenkins /suyan6082 分支,GitLab 发 WebHook,Jenkins 自动打包; - 配合你上面的多分支配置:只推送白名单内的分支才会构建,其他分支 push 不触发。
- 场景:你在本地写完代码
-
② Push Events in case of branch delete 删除分支时触发构建
- 勾选后:在 GitLab 删除分支,也会调用 Jenkins;
- 一般不需要,默认不选。
-
③ Opened Merge Request Events 新建合并请求 (MR) 时自动构建
- 场景:开发从 suyan6082 提 MR 合并到 jenkins,刚创建 MR 的瞬间,Jenkins 自动拉取 MR 两边代码做合并校验打包;
- 作用:MR 还没合并就提前检测代码编译、单元测试报错,防止合出坏代码。
-
④Build only if new commits were pushed to Merge Request 仅 MR 有新提交才重新构建
- 勾选后:只有往这个 MR 新增 commit 才会触发构建;单纯编辑 MR 标题、描述、指派审核人,不会重复打包;
- 适合频繁改 MR 备注的场景,减少无效构建
-
⑤ Accepted Merge Request Events MR 审核通过、点击合并完成后触发构建
- 场景:代码合并到目标分支后,自动打包部署测试环境;
- 如果你想合并完成后才构建部署,就勾选此项。
-
⑥ Closed Merge Request Events
- MR 被关闭(放弃合并)时触发构建,几乎用不到,不用勾选
-
Rebuild open Merge Requests(对已打开的 MR,哪些操作会重新构建)
-
下拉框
Never:从不自动重跑 MR 构建,只有手动点构建才会执行。可选其他值:
- On push to source branch:源分支更新自动重跑 MR;
- On push to target branch:目标分支更新自动重跑 MR;
- Always:任意变动都重跑。
-
Approved Merge Requests (EE-only)
GitLab 企业版专属:MR 被审核人审批通过后,自动重新跑一次构建。
-
Comments
在 MR 下面评论内容,可触发构建;
配合下方
Comment (regex) for triggering a build正则框使用。举例:下方填写
@build,则在 MR 评论里输入@build,Jenkins 立刻重新打包。 -
Comment (regex) for triggering a build
正则匹配评论关键词,只有评论命中这个正则才会触发构建;
- 空着:任意评论都会触发;
- 填
^start-build$:只有评论完整输入start-build才构建。
-
-
-
轮询 SCM
- 使用 cron 表达式定时主动去访问GitLab检查代码变更,变更后构建本job
6.1 触发远程构建 (例如脚本)
触发方法:http://192.168.127.172:8080/job/test_suyan_mvn/build?token=suyan_token


6.2 webhook调用自动构建

安装插件 build authorization
方法一(更简单):
自动化构建 -> 触发远程构建 -> token
http://192.168.127.172:8080/job/test_suyan_mvn/build?token=suyan_token
方案二:Build when a change is pushed to GitLab
Jenkins配置token
-
源URL: http://192.168.127.172:8080/project/test_suyan_mvn

-
点击用户名 -> Security ->添加新Token -> name:gitlab-webhook -> 1179f6b3e7467c86237c47a9f54dac4735
-
整理后的URL:http://jiayuchao:1179f6b3e7467c86237c47a9f54dac4735@192.168.127.172:8080/project/test_suyan_mvn

GitLab -> 设置 -> 网络 -> 出站请求 -> 允许来自web hooks 和服务对本地网络的请求 + 允许系统勾子向本地网络发起请求

GitLab -> webhooks -> 配置url + 关闭SSL验证 + 和并请求

GitLab配置系统钩子webhook

代码推送后成功触发自动构建

6.3 定时构建(cron表达式同linux)


6.4 SCM调用自动构建

7、配置邮件通知
7.1 qq邮箱配置 SMTP/IMAP
账号管理 -> 安全设置 -> POP3/IMAP/SMTP/Exchange/CardDAV 服务 -> 开启服务 + 生成授权码
qq邮箱配置方法:https://wx.mail.qq.com/list/readtemplate?name=app_intro.html#/agreement/authorizationCode
uqdtmtcjbmfzecei
7.1.1 在第三方客户端/服务设置
登录时,请在第三方客户端的密码输入框 里面填入授权码进行验证。(不是填入QQ的密码)
7.1.1.1 IMAP/SMTP 设置方法
用户名/帐户: 你的QQ邮箱完整的地址
密码: 生成的授权码
电子邮件地址: 你的QQ邮箱的完整邮件地址
接收邮件服务器: imap.qq.com,使用SSL,端口号993
发送邮件服务器: smtp.qq.com,使用SSL,端口号465或587
7.1.1.2 POP3/SMTP 设置方法
用户名/帐户: 你的QQ邮箱完整的地址
密码: 生成的授权码
电子邮件地址: 你的QQ邮箱的完整邮件地址
接收邮件服务器: pop.qq.com,使用SSL,端口号995
发送邮件服务器: smtp.qq.com,使用SSL,端口号465或587
7.2 Jenkins配置
Manage Jenkis -> System Configuration -> Configure System -> Jenkins Location -> 系统管理员邮件地址(系统发件邮箱) + 邮件通知(系统级别的邮件通知)+ Extended E-mail Notification(个性化邮件通知,可以配置各种触发器,需要安装插件,如果安装了系统推荐的插件则自带,没有的话去插件市场安装下)
Default Recipients 收件人列表:cc:someone@example.com, bcc:bob@example.com
配置成功


构建任务 -> 构建后操作 -> E-mail Notification(原生基础)/ Editable Email Notification (扩展邮件 EE)
7.2.1 使用场景建议
-
只勾选 E-mail Notification
适合个人本地测试,不需要美观、不需要附件,简单告警即可;缺点信息太少,排查问题不方便。
-
只使用 Editable Email Notification(推荐)
正式项目统一用这个,功能完整,支持定制化告警,搭配 GitLab 分支、构建产物、错误日志。
注意:不要两个同时勾选,会重复发送两封邮件。


8、Jenkins 集群/并发构建
集群化构建可以有效提升效率,尤其是团队项目较多或是子项目比较多的时候,可以并发在多台机器上执行构建
Manage Jenkins -> Manage Nodes and Clouds -> 新建节点
远程工作目录: /root
标签:jenkins-02
Number of executors : 并发数量
用法:Use this node as much as possible / Only build jobs whth label expressions mathing this node
启动方式:SSH
主机:ip地址
credentials:录入用户、密码、Non verifying
其他的可以先不配置,后根据需要来配置


我之前没有指定Java 路径,默认找到的是系统自带的 Jre8 导致启动 Agent.jar 失败,可以在上面的图指定下,也可以把环境变量往 系统的非交互shell文件同步一份环境变量的配置
markdown
vi /etc/bashrc
# 在文件的最后写入
export JAVA_HOME_8=/apps/svr/jdk8
export JAVA_HOME_17=/apps/svr/jdk17
# 根据你的常用JDK版本来配置
# export JAVA_HOME=$JAVA_HOME_8
export JAVA_HOME=$JAVA_HOME_17
export PATH=$JAVA_HOME/bin:$PATH
# 验证是否生效
bash -c 'echo $PATH; echo $JAVA_HOME'
点击进节点可以查看控制台日志


设置项目 -> Generral -> 在必要的时候并发构建 + 限制项目的运行节点

从节点构建成功

9、pipepline 流水线
流水线既能作为任务的本身,也能作为 Jenkinsfile
使用流水线可以让我们的任务从 ui 手动操作,转换为代码化,像 docker 的 dockefile 一样,从 shell 命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发 jenkinswebui 不能完成的更复杂的构建逻辑,作为开发者可读性也更好
9.1 完整语法
5个必备的组成部分
pipeline: 整条流水线
agent:指定执行器
stages:所有阶段
stage:某一阶段,可有多个
steps:阶段内的每一步,可执行命令
9.2 声明式流水线
好处
- 更像是在 jenkins web ui 中的操作
- 可读性比较高
- 可以使用 blue ocean 自动生成
- 支持语法检查
坏处
- 代码逻辑能力比脚本试弱,不能完成特别复杂的任务
9.3 脚本式流水线(Groovy)
好处
-
更少的代码和弱规范要求
-
更灵活的自定义代码操作
-
不受约束,可以构建特别复杂的工作流和流水线
坏处
-
读写对编程要求比较高
-
比声明式流水线代码更复杂
9.4 测试脚本
Groovy 沙盒(更复杂的构建逻辑会用到,普通的用不到)
安装插件:Pipeline:stage View、Blue ocean
编辑 Pipeline script后,鼠标点击代码框外,出现Approve script需要审批(每次更新脚本都需要做审批),最后点击保存
根据片段生成器生成pipeline语句

9.5 测试服务器新增 jenkins 用户权限
shell
# 编辑sudoers
visudo
# 添加root级别权限
jenkins ALL=(ALL) ALL
9.6 测试案例
shell
pipeline {
agent any
tools {
maven "maven"
jdk "JDK17"
}
stages {
stage('拉取代码') {
steps {
git branch: 'jenkins', url: 'http://192.168.127.180/root/suyan.git'
echo '拉取成功'
}
}
stage('编译代码') {
steps {
sh "java -version"
sh "mvn -version"
sh "pwd"
sh "mvn clean package"
echo '构建成功'
}
}
stage('清理服务器历史文件') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.127.201', sshCredentials: [encryptedPassphrase: '{AQAAABAAAAAQb4cS9qE9yXEmobCj1LRvPTAWZ46tDtmtL78qr1u7UtU=}', key: '', keyPath: '', username: 'root'], transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''PID=$(ps -ef | grep ScannerApi | grep -v grep | awk \'{print $2}\')
if [ -n "$PID" ]; then
kill -15 $PID
sleep 2
kill -9 $PID 2>/dev/null
else
echo "未检测到ScannerApi运行进程,无需关闭"
fi
rm -f /apps/svr/suyan/ScannerApiExt-0.0.2-SNAPSHOT.jar''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo '清理成功'
}
}
stage('推送jar包到服务器') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.127.201', sshCredentials: [encryptedPassphrase: '{AQAAABAAAAAQgRTfse/2CI6/gu56y15gBMh80vWnIgLaMwXDf3fdyps=}', key: '', keyPath: '', username: 'root'], transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup /apps/svr/jdk8/bin/java -jar /apps/svr/suyan/ScannerApiExt-0.0.2-SNAPSHOT.jar >/dev/null 2>&1 &', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/suyan', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo '发布成功'
}
}
}
}
9.7 sshPublisher 模版
sshPublisher(
publishers: [
sshPublisherDesc(
configName: '目标服务器配置名',
transfers: [
// 前置执行脚本
sshTransfer(
cleanRemote: false,
excludes: '',
execCommand: '''echo "PreShell"
''',
execTimeout: 120000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: '',
remoteDirectorySDF: false,
removePrefix: '',
sourceFiles: ''
),
// 上传压缩包
sshTransfer(
cleanRemote: false,
excludes: '',
execCommand: '',
execTimeout: 120000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: '/vmsnginx/html',
remoteDirectorySDF: false,
removePrefix: 'dist',
sourceFiles: 'dist/static.zip'
),
// 后置解压、重启服务脚本
sshTransfer(
cleanRemote: false,
excludes: '',
execCommand: '''echo "PostShell"
echo "update html start"
cd /vmsroot/app/vmsnginx/html/
rm -rf ./static/
unzip -q ./static.zip
chmod 755 -R ./static/
/vmsroot/script/vms_service.sh/vms_service.sh restart vmshttp
echo "update html success"''',
execTimeout: 120000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: '',
remoteDirectorySDF: false,
removePrefix: '',
sourceFiles: ''
)
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: false
)
]
)
9.8 Groovy格式化
npm install -g npm-groovy-lint
npm-groovy-lint --format Jenkinsfile
五、docker
https://docs.gitlab.cn/jh/install/docker.html
安装所需最小配置
- 内存至少4G
- 系统内核至少在3.10以上 uname -r 命令可查看系统内核版本
markdown
# 操作系统
Centos7
# 安装docker依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 设置docker的yum源
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看源中可用版本
yum list docker-ce --showduplicates | sort -r
# 安装20.10
yum install -y docker-ce-20.10.24-3.el7 docker-ce-cli-20.10.24-3.el7 containerd.io
# 指定镜像地址
mkdir -p /etc/docker
# 写入配置文件
tee /etc/docker/daemon.json <<-'EOF'
{
"dns": ["8.8.8.8", "114.114.114.114"],
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.baidubce.com",
"https://hub-mirror.c.163.com"
]
}
EOF
# 重启docker
systemctl daemon-reload
systemctl restart docker
# 配置开机启动项
systemctl enable docker
# 安装docker compose
curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋权
chmod +x /usr/local/bin/docker-compose
# 测试版本
[root@bogon yum.repos.d]# docker-compose -v
Docker Compose version v2.20.3
# 注意
Docker 20.10 在 CentOS 7 上有一个 BUG:
配置了 daemon.json 镜像加速,但是不生效!依然强制走官方 registry-1.docker.io
所以后面安装sonarqube的yaml配置了镜像前缀
1、docker compose 命令
markdown
# 查看状态
docker-compose ps
# 查看日志
docker-compose logs 容器名
# 停止并删除容器,但不会删除数据
docker-compose down
# 启动所有服务,后台运行
docker-compose up -d
# 先停止,再启动(相当于重启)
cd /apps/svr/harbor
docker-compose down
docker-compose up -d
# 或者直接用 restart
docker-compose restart
# 升级(仅替换镜像版本即可)
docker-compose pull && docker-compose up -d
六、nexus
待补充
七、harbor
新起一台centos7
docker安装可参考上面章节"安装docker"
1、安装
markdown
# 下载 harbor 安装包
https://github.com/goharbor/harbor/releases/download/v2.15.0/harbor-offline-installer-v2.15.0.tgz
mv ~/harbor-offline-installer-v2.15.0.tgz /apps/svr
tar -zxvf /apps/svr/harbor-offline-installer-v2.15.0.tgz -C /apps/svr/
rm -f /apps/svr/harbor-offline-installer-v2.15.0.tgz
# 复制配置文件
cd /apps/svr/harbor
cp harbor.yml.tmpl harbor.yml
# 修改配置
hostname: 192.168.127.181
port: 80
harbor_admin_password: Harbor1234i5
# 注释https相关配置
# https:
# port: 18443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# 执行 install.sh
/apps/svr/harbor/install.sh
# 验证容器是否启动成功
docker-compose ps
# 修改配置后的正确重启流程
1. 重新生成配置:
./prepare
2. 停止旧实例:
docker-compose down
3. 启动新实例:
docker-compose up -d


2、登录验证
markdown
# 登录harbor网站
http://192.168.127.180:28080/
admin/你的密码
八、SonarQube
可以和GitLab放在同一台机器上
1、安装
shell
# 配置宿主机内核参数
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
echo "fs.file-max=65536" >> /etc/sysctl.conf
sysctl -p
# 创建部署目录
mkdir -p /apps/svr/sonarqube && cd /apps/svr/sonarqube
mkdir -p /apps/data/sonarqube
mkdir -p /apps/logs/sonarqube
mkdir -p /apps/extensions/sonarqube
mkdir -p /apps/data/postgresql
# 创建 docker-compose.yml
vi docker-compose.yml
配置文件如下
yaml
version: '3.8'
services:
# 数据库(SonarQube 推荐 PostgreSQL)
postgres:
image: postgres:15
container_name: sonar-postgres
restart: always
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar@123 # 请修改为强密码
POSTGRES_DB: sonar
volumes:
- ./postgresql/data:/apps/data/postgresql
networks:
- sonar-net
# SonarQube 社区版 (LTS 长期支持版)
sonarqube:
image: sonarqube:lts-community # 9.9 LTS 最稳定
container_name: sonarqube
restart: always
depends_on:
- postgres
environment:
# 数据库连接
SONAR_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar@123 # 与上面密码一致
# JVM 内存配置 (服务器内存 >= 4G)
SONAR_JAVA_OPTS: "-Xms2g -Xmx2g"
SONAR_WEB_JAVA_OPTS: "-Xms1g -Xmx1g"
SONAR_CE_JAVA_OPTS: "-Xms512m -Xmx1g"
SONAR_ES_JAVA_OPTS: "-Xms512m -Xmx1g"
ports:
- "9000:9000" # Web 访问端口
volumes:
- ./sonarqube/data:/apps/data/sonarqube
- ./sonarqube/logs:/apps/logs/sonarqube
- ./sonarqube/extensions:/apps/extensions/sonarqube
networks:
- sonar-net
networks:
sonar-net:
driver: bridge
启动服务
markdown
# 可以先尝试拉取镜像,拉取失败的情况下可以在自己本机安装的docker来拉取下,猜测可能是docker不兼容(Docker 20.10 在 CentOS 7 上有一个 BUG:
配置了 daemon.json 镜像加速,但是不生效!依然强制走官方 registry-1.docker.io)centos7?
docker pull postgres:15
docker pull sonarqube:lts-community
# 离线导入 或者推送到 harbor
docker save -o postgres_15.tar postgres:15
docker save -o sonarqube_lts-community.tar sonarqube:lts-community
docker load -i postgres_15.tar
docker load -i sonarqube_lts-community.tar
docker-compose up -d
# 查看日志
docker-compose logs -f sonarqube


2、登录页面
markdown
# 默认9000端口
http://192.168.127.180:9000/
# 使用默认账号密码登录
admin/admin

3、生成服务token
markdown
# 登录到 sonarqube 后台,点击头像 > MyAccount > Security > Generate Tokens > generate 生成 token 并复制
4、创建webhook
markdown
# 点击顶部菜单栏的配置 > 配置(小三角) > 网络调用
Name:wolfcode-jenkins
URL:http://<sonar ip>:<sonar port>/sonarqube-webhook/
5、创建项目
markdown
# SonarQube 顶部菜单栏 Projects > Create new project > 配置基础信息并保存 > Provide a token > Generate 生成 token > Continue
# 分别选择 Java / Maven 后,按照脚本配置 Jenkinsfile 中的 sonar 配置信息
mvn sonar:sonar -Dsonar.projectKey=k8s-cicd-demo
6、创建 gitlab 访问凭证
markdown
系统管理 > 安全 > Manage Credentials > System > 全局凭据(unrestricted) > Add Credentials
范围:全局
用户名:root
密码:wolfcode
ID:gitlab-user-pass
待完善
``markdown
可以先尝试拉取镜像,拉取失败的情况下可以在自己本机安装的docker来拉取下,猜测可能是docker不兼容(Docker 20.10 在 CentOS 7 上有一个 BUG:
配置了 daemon.json 镜像加速,但是不生效!依然强制走官方 registry-1.docker.io)centos7?
docker pull postgres:15
docker pull sonarqube:lts-community
离线导入 或者推送到 harbor
docker save -o postgres_15.tar postgres:15
docker save -o sonarqube_lts-community.tar sonarqube:lts-community
docker load -i postgres_15.tar
docker load -i sonarqube_lts-community.tar
docker-compose up -d
查看日志
docker-compose logs -f sonarqube
[外链图片转存中...(img-mJ438ADG-1782399280628)]
[外链图片转存中...(img-1X4OHUvr-1782399280628)]
### 2、登录页面
```markdown
# 默认9000端口
http://192.168.127.180:9000/
# 使用默认账号密码登录
admin/admin
```
[外链图片转存中...(img-wcpqhOF0-1782399280628)]
### 3、生成服务token
```markdown
# 登录到 sonarqube 后台,点击头像 > MyAccount > Security > Generate Tokens > generate 生成 token 并复制
```
### 4、创建webhook
```markdown
# 点击顶部菜单栏的配置 > 配置(小三角) > 网络调用
Name:wolfcode-jenkins
URL:http://<sonar ip>:<sonar port>/sonarqube-webhook/
```
### 5、创建项目
`````markdown
# SonarQube 顶部菜单栏 Projects > Create new project > 配置基础信息并保存 > Provide a token > Generate 生成 token > Continue
# 分别选择 Java / Maven 后,按照脚本配置 Jenkinsfile 中的 sonar 配置信息
mvn sonar:sonar -Dsonar.projectKey=k8s-cicd-demo
6、创建 gitlab 访问凭证
markdown
系统管理 > 安全 > Manage Credentials > System > 全局凭据(unrestricted) > Add Credentials
范围:全局
用户名:root
密码:wolfcode
ID:gitlab-user-pass
待完善