jenkins运维——离线安装

1、安装jdk11

下载jdk11
oracle登录账号:eddy1365@163.com
密码:Asdf*****
tar zxf jdk-11.0.21_linux-x64_bin.tar.gz
mv jdk-11.0.21 /opt/jdk
cat >>/etc/profile <<EOF
export JAVA_HOME=/opt/jdk
export PATH=/opt/jdk/bin:\$PATH
EOF
source /etc/profile

2、下载并安装jenkins

下载jenkins的war包
mkdir /opt/jenkins
mv jenkins.war /opt/jenkins
cat >/lib/systemd/system/jenkins.service <<EOF
[Unit]
Description=jenkins
After=network.target
[Service]
WorkingDirectory=/opt/jenkins
ExecStart=/opt/jdk/bin/java -Xms1024m -Xmx1024m -XX:PermSize=512M -XX:PermSize=1024M -jar /opt/jenkins/jenkins.war --httpPort=18080
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now jenkins
第一次运行会产生一个admin的密钥token,查看位置:
/root/.jenkins/secrets/initialAdminPassword
记下来,安装过程中需要填写的
Tips:
限制jenkins 启动占用内存
/opt/jdk/bin/java -Xms1024m -Xmx1024m -XX:PermSize=512M -XX:PermSize=1024M -jar /opt/jenkins/jenkins.war --httpPort=18080
访问:http://<ip>:18080
第一次需要填写进去上面记录下来的token解锁,通过引导步骤完成初始化 tips:插件这个步骤,选择插件来安装,然后选择“无”再进行下一步。


找一台能联网的机器,安装Jenkins,安装插件,然后将整个/root/.jenkins打包,传到离线环境服务器上解压后再启动jenkins。
插件安装:Maven Integration plugin,才能支持构建maven项目。
下载插件:https://mirrors.nju.edu.cn/jenkins/plugins/publish-over-ssh/1.25/publish-over-ssh.hpi
安装插件:
在 Dashboard - Manage Jenkins - Plugins
Deploy Plugin -> File 上传插件进行安装
插件安装过程中hang住的的处理办法:Install after restart+安装完成后重启Jenkins(空闲时)


更改插件源为国内源(加速)
Dashboard - Manage Jenkins - Plugins - Advanced settings
Update Site - URL: 
默认是:https://updates.jenkins.io/update-center.json
修改为以下之一:
南京大学镜像:https://mirrors.nju.edu.cn/jenkins/updates/update-center.json
清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
中国科学技术大学镜像:http://mirrors.ustc.edu.cn/jenkins/updates/update-center.json


在 Dashboard - Manage Jenkins - Tools里设置maven、git、jdk:

系统设置:

maven项目配置这几个地方:

一、

这里,我们浏览器直接访问:http://210.14.75.1:9980/job/nhlrs-social-service-server/build?token=iKQWQbHhf8FCtNDq9wS9fglXHLGG1A1ZyMMftJiXqgY, 通过观察控制台发现会自动触发构建任务,但是我们换个浏览器或者用postman的话会提示我们需要登录。需要安装个插件,可以让我们启用token之后免登录。

在Jenkins得Plugin Manager的可选插件中搜索Build Authorization Token Root

安装完插件之后,用postman测试:http://210.14.75.1:18080/buildByToken/build?job=nhlrs-social-service-server&token=iKQWQbHhf8FCtNDq9wS9fglXHLGG1A1ZyMMftJiXqgY

clean package -Dmaven.test.skip=true

【可选】加速的参数:-T 1C -Dmaven.test.skip=true -nsu -B 

参数含义是否推荐
-T 1C多线程构建:使用 CPU 核心数 × 1 个线程✅ 强烈推荐加速构建
-Dmaven.test.skip=true跳过测试的编译和执行✅ 可大幅加快构建速度
-nsuno-snapshot-updates,跳过 SNAPSHOT 依赖的远程检查更新✅ 可减少网络请求
-Bbatch mode:非交互式模式,适合在 CI(Jenkins)中使用✅ 必须用于自动化

如果是微服务,要用:clean package -am -pl:ruoyi-gateway-Dmaven.test.skip=true

clean package -am -pl :ruoyi-file -Dmaven.test.skip=true

这个命令是Maven的命令行指令,用于构建项目。

解释:

  • clean:表示清理项目,删除target目录。
  • package:表示打包项目,生成jar或者war文件。
  • -am:表示也构建项目所依赖的模块。
  • -pl:表示指定构建的模块,:ruoyi-file表示要构建的模块。
  • -Dmaven.test.skip=true:表示跳过测试。


#!/bin/bash
echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no /root/.jenkins/workspace/nhlrs-social-service-server/social-admin/target/social-admin.jar root@210.14.75.1:/mnt/nhlrs3/nginx1.24/html/nhlrs/admin
echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@210.14.75.1 <<EOF
cd /mnt/nhlrs3/nginx1.24/html/nhlrs/admin
/bin/bash ./social-admin.sh
echo "等待日志输出(pause 13s)"
sleep 13
cat ./social-admin.log
EOF

social-admin.sh

#!/bin/bash
oldpid=`ps -ef |grep "[s]ocial-admin.jar" |awk '{print $2}'`
kill -9 $oldpid
sleep 1
nohup java -Xms128m -Xmx1024m -jar ./social-admin.jar &>./social-admin.log &
sleep 1
newpid=`ps -ef |grep "[s]ocial-admin.jar" |awk '{print $2}'`
echo
echo
echo "$(date +'%D %T') pid: $oldpid -> $newpid"

以下是nodejs项目如何构建的步骤

1、插件安装nodejs

2、本地系统安装nodejs

下载:Index of /nodejs-release/v16.20.1/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

mkdir /opt/node
tar -Jvxf node-v16.20.1-linux-x64.tar.xz -C /opt/node
这里建议再安装一个node-sass的release包,因为每次前端npm install出问题有一半原因都是因为node-sass安装出问题,而且内网也没联网,这里我也就一起离线安装了。这个node-sass版本需要与node版本相匹配,否则会报错
命令行查看需要下载的node-sass安装包
root@nhlrs:~# /opt/node/node-v16.20.1-linux-x64/bin/node -p "[process.platform,process.arch,process.versions.modules].join('-')"                           
linux-x64-93

Releases · sass/node-sass (github.com)找到自己相对应的release包名,下载下来

将二进制文件放到/opt/node/linux-x64-93_binding.node

/etc/profile里加上环境变量:

export PATH=/opt/node/node-v16.20.1-linux-x64/bin:$PATH
export SASS_BINARY_PATH=/opt/node/linux-x64-93_binding.node

3、jenkins设置

root@nhlrs:~# echo $PATH
/opt/node/node-v16.20.1-linux-x64/bin:/opt/apache-maven-3.9.6/bin:/opt/jdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

系统管理-》系统管理-》全局属性-》环境变量-》键值对列表

系统管理-》全局工具配置-》NodeJS安装-》新增NodeJS

4、构建一个自由风格的软件项目

#!/bin/bash
node -v
npm -v
cd /root/.jenkins/workspace/node_test/ruoyi-ui
npm install --registry=https://registry.npmmirror.com
/bin/rm -rf ./dist.zip ./dist
npm run build:stage
zip -r ./dist.zip ./dist
if [ -f "./dist.zip" ];then
  echo "拷贝dist.zip到远程服务器的/tmp目录"
  scp -q -oStrictHostKeyChecking=no ./dist.zip root@210.14.75.1:/mnt/nhlrs3/nginx1.24/html/nhlrs/admin
  echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@210.14.75.1 <<EOF
cd /mnt/nhlrs3/nginx1.24/html/nhlrs/admin
/bin/cp -r ./dist ./备份/dist_$(date +%Y%m%d%H%M%S)
unzip -o ./dist.zip
EOF
else
  echo "dist.zip包没打成功,中断发布"
fi

以下是gitlab的webhook设置,用于触发自动化构建

为了防止出现url 被block阻拦,需要管理员root登录gitlab,在admin area-》settings-》network-》outbound requests里:勾选

Allow requests to the local network from webhooks and integrations

设置webhook,必须至少是某个项目的Maintainer身份

设置身份需要root登录gitlab,在admin area-》projects-》某个项目-》Manage access里设置 。

设置webhook:某个项目-》settings-》webhooks -》webhook settings-》add new webhook

URL填写:http://210.14.75.1:18080/buildByToken/build?job=nhlrs-social-service-server&token=iKQWQbHhf8FCtNDq9wS9fglXHLGG1A1ZyMMftJiXqgY

报错:Hook executed successfully but returned HTTP 403 <html> <head> <meta http-equiv=”Content-Type” content=”text/html;charset=ISO-8859-1″/> <title>Error 403 No valid crumb was included in the request</title> </head> <body><h2>HTTP ERROR 403 No valid crumb was included in the request</h2> <table> <tr><th>URI:</th><td>/job/zjfrpmt-docker/buildWithParameters</td></tr> <tr><th>STATUS:</th><td>403</td></tr> <tr><th>MESSAGE:</th><td>No valid crumb was included in the request</td></tr> <tr><th>SERVLET:</th><td>Stapler</td></tr> </table> <hr/><a href=”https://eclipse.org/jetty“>Powered by Jetty:// 10.0.20</a><hr/> </body> </html>

原因: 是 Jenkins 的CSRF 安全防护机制引起的,意思是:你发出的请求中没有包含 Jenkins 要求的“Crumb”验证令牌

解决方法:

生成API Token

  1. 获取Token路径登录Jenkins后,点击右上角用户名 →ConfigureAPI Token区域,点击Add new Token生成。生成的Token需立即保存,关闭页面后无法再次查看

  2.设置Webhook

在Git仓库的Webhook配置中填入Jenkins的API触发URL,格式为:http://<用户名>:<API_TOKEN>@<JENKINS_URL>/job/<JOB_NAME>/build?token=<REMOTE_TRIGGER_TOKEN> 例如:http://whq:1129ea792d7a71afd634f9a62b5b61cd93@192.168.1.50:8888/job/zjfrpmt-docker/buildWithParameters?token=f5eaa756-fa17-472a-8138-0a290ecf65c3&branch=origin/master

http://whq:1129ea792d7a71afd634f9a62b5b61cd93@192.168.1.50:8888/job/zjfrpmt-front-docker/build?token=e3875dd9-1911-4d50-b9e1-01ab0701980f

⚠️没有选择基于参数的构建时,不得使用buildWithParameters,否则会报500错误。

  • 测试Webhook能否成功触发构建

钉钉消息通知:

0、钉钉群设置机器人:

添加机器人:

1、jenkins安装DingTalk插件:

2、jenkins系统管理里设置插件:

webhook:填写钉钉机器人的webhook内容。

加密:填写钉钉机器人设置中安全选项“加签”的内容。

3、项目设置中的机器人配置:

Categories: 系统运维