Appearance
Jenkins部署
容器化部署
拉取镜像
jenkins/jenkins:2.440.2-lts启动
shell
docker run -itd \
-uroot \
-p 80:8080 \
-p 50000:50000 \
--name jenkins \
--restart=always \
-v /data/jenkins_data:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
jenkins/jenkins:2.440.2-lts注意
/data/jenkins_data目录换成自己需要的目录
启动后浏览器访问:http://Jenkins服务器IP:暴露端口
初始化
容器化部署参考以下三种方式
非容器化部署可以根据实际目录调整,找到安装目录下的secrets/initialAdminPassword即可
注意initialAdminPassword初始化后就会被删除
首次访问会需要初始密码,密码可以在以下位置找到
法一:使用docker logs jenkins 中间的 32 位字符串就是了
bash
$ docker logs jenkins
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
5306e7c366364bac9e9975979582009e
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************法二:
进入容器,查看文件/var/jenkins_home/secrets/initialAdminPassword
bash
$ docker exec -it jenkins bash
$ cat /var/jenkins_home/secrets/initialAdminPassword法三:
直接通过映射出来的目录查看文件
bash
$ cat /data/jenkins_data/secrets/initialAdminPassword
# /data/jenkins_data : 映射的宿主机路径,具体看你映射的路径
第一次使用可以使用“安装推荐的插件” 如果有使用经验可以考虑 “选择插件来安装”

这里以“安装推荐的插件” 为例,会进入插件安装
如果离线环境,可以在有网络的地方初始化完成后,再将数据目录拿过去/直接把插件目录拿过去

根据提示创建第一个管理用户,点击保存并完成

输入Jenkins资源的根地址,如果是域名,自己做好解析/代理,点击保存并完成

点击,开始使用Jenkins

此时就进入了Jenkins首页
如果重启时遇到下图的情况,别担心它只是没有重启好,重启好后会进入登录页面

插件安装
【推荐安装第一次有安装汉化包,但是需要重启才会有,如有需要可以在安装完成后直接重启即可】
点击 Manage Jenkins ——> Plugins ——> Available plugins
搜索需要的插件,点击安装,然后根据需要重启Jenkins即可
NodeJS多版本
在Jenkins中找到 系统管理 --> 插件管理 --> 可选插件 中搜索 NodeJS,选择后点击安装,安装后重启

在Jenkins中找到 系统管理 --> 全局工具配置 --> 在底部 选择具体版本安装

配置项目nodejs

其他步骤正常配置即可
git-parameter参数化构建过程
-> 可选插件
搜索git-parameter,安装完成后重新启动jenkins

丢弃旧的构建,使用时一定要勾选。不勾选的话
jenkins空间会占用巨大,访问速度也很受影响。 这里可以根据实际需求设置保留天数和构建保留最大数
源码管理:指定分支(为空时代表any):$branch,$开头,使用参数化构建过程中的名称
Publish Over SSH远程
在Jenkins中找到 Manage Jenkins -> Manage Plgins->可选插件中搜索Publish Over SSH 安装 重启Jenkins

配置SSH秘钥
这一步是为了Jenkins所在的服务器通过SSH访问目标机器时获得免密授权 登录Jenkins所在的服务器,执行 ssh-keygen
将公钥拷贝到authorized_keys文件
bash
cat id_rsa.pub >> authorized_keys执行完 会生成一个authorized_keys文件,将生成的authorized_keys拷贝至需要连接的linux机器上的对应用户或者直接root下的.ssh文件夹下
配置目标服务器路径
在服务器中配置完秘钥之后,接下来需要在Jenkins中做配置: Jenkins --> 系统管理 --> 系统配置,找到Publish over SSH

Publish over SSH公共配置:
Passphrase: 在Jenkins服务生成秘钥时如果有输入密码 则填写 没有填写则空着
Path to key:秘钥的路径
Key:生成的私钥 也就是生成的id_rsa文件 可以在服务器上通过命令cat id_rsa获取到SSH Server私有配置:
Name: 服务名称 自定义 方便区分即可
Hostname: 目标服务器的IP地址
Username: 目标服务器的用户名
Remote Directory: 目标服务器的目录名称 Jenkins推送过来的包会放在这个位置(注: 刚才填写的用户名需要有权限对此文件目录有读写权限)其他的不必配置
注意
Gitlab等SSH Keys使用的是公钥,如果是-----BEGIN OPENSSH PRIVATE KEY——开头的则需要重新生成,生成代码见:ssh-keygen -m PEM -t rsa -b 4096
在使用时,选择 增加构建步骤--> Send files or execute commands over SSH
SSH Server配置:
Name : 选择服务名称 在Jenkins --> 系统管理 --> 系统设置中已经配置 下拉选择即可
Source files :源文件目录 这个目录对应的是仓库代码的根目录,这个地址必须是基于根目录的相对路径,不可以放到根目录外面的路径, 不可以用../../XXX这样的路径来访问 否则会出现SSH: Transferred 0 file(s)的问题,文件传送不过去! 【大坑大坑大坑大坑】
Remove prefix : 要去除的前缀 把Source files文件目录地址去掉即可 否则会在目标机器上创建对应的目录
Remote directory : 要传送文件到的目标机器的目录 即刚才在
Jenkins -->系统管理-->系统设置中配置的目录,所以此处是相对于已经创建的目录作为根目录开始的, 填写/即可Exec command : 传输代码完成后 执行的脚本 可以用来做对包的解压 重启
Nginx等操作
此处可以验证下是否能传过去,再继续,配置
Exec command样例
shell
# 切换目录【这里是可以写对应服务器绝对路径的,从/开始】
cd /data/nginx/data
# 判断文件是否存在
if [ ! -f "dist.tar" ];then
echo "文件不存在" >> ${log_file}
exit 1
else
echo "更新"
tar -xf dist.tar.gz
rm -rf dist.tar.gz
echo "更新完成"
fi
# 正常更新前端不需要重启nginx,根据需要脚本自行调整然后保存Jenkins配置,重新构建一下Jenkins任务,来看一下前端是否更新。
Maven插件
Maven是一个用于自动化构建项目的Java工具,可以帮助开发者管理和构建项目依赖、编译Java代码、运行测试等。Jenkins也支持Maven集成,通过安装Maven插件,Jenkins可以更好地与Maven项目配合使用。
在Jenkins中找到 系统管理 --> 插件管理 --> 可选插件 中搜索 Maven Integration,选择后点击安装,安装后重启

在新建任务时能看见 构建一个maven项目 则表示安装成功了

在Jenkins中找到 系统管理 --> 全局工具配置 --> 找到 JDK 安装 ,输入别名、点击自动安装 从java.sun.com安装【也可以选其他方式】,同意协议
第一次需要输入oracle.com的账号密码

在Jenkins中找到 系统管理 --> 全局工具配置 --> 找到 Maven 安装 ,点击新增Maven,输入Name、勾选自动安装,选择自己需要的maven版本即可

Build时填写
mvn package -Dmaven.test.skip=true
流水线
构建前端【示例:Vue】
新建任务
在Jenkins首页点击“新建任务”,输入任务名称,选择自由风格的软件项目【也可以选择其他的,这里仅供参考】,点击确认

参数化构建过程
选择 参数化构建过程 【可选】

源代码管理

凭据【Credentials】配置
在Gitee仓库对应的项目的配置里找到 “部署公钥管理” ,点击右上角的添加部署公钥

填写标题和公钥

公钥获取方式,在容器内生成,然后再将id_ed25519.pub内的容器粘贴过来,然后点击左下角添加
bash
# 进入容器
docker exec -it jenkins bash
# 生成密钥
ssh-keygen -t ed25519 -C "Gitee SSH Key"
# -t key 类型
# -C 注释然后就能看到以下内容

然后在Jenkins页面【Credentials】选择框下方点击【添加】配置,然后填写如下内容

错误解决
安全问题
bash# 可能Jenkins容器/服务器生成密钥时使用的是 ssh-keygen -t rsa # 换成再试试 ssh-keygen -t ed25519 -C "Gitee SSH Key"如果还是有问题,可以参考下方配置试试:
系统管理 --> 全局安全配置,滑倒底部选择为:
配置构建环境
如果jenkins容器/服务器没有安装node环境,可以参考插件安装部分 NodeJS多版本 安装
也可以自己封装/安装nodes环境
镜像封装方法:
在官网下载合适的二进制包,然后在Dockerfile同级目录解压,改名为node16
Dockerfile
dockerfileFROM jenkins/jenkins:2.440.2-lts COPY node16 /opt/node16/ ENV PATH="${PATH}:/opt/node16/bin"重新构建镜像
bash$ docker build -t jenkins/jenkins:2.440.2-lts-node16将现有的容器直接删除,然后使用此镜像,并使用原来的数据目录再次运行新的容器,然后正常使用即可,如果自己构建对应版本的镜像忽略此步
选择对应版本的node,如果没有对应版本可以参考 NodeJS多版本 新增

前端工程构建
选择增加构建步骤 ——> 执行 shell ,添加如下内容
shell
echo "========== 开始打包 =========="
# 安装依赖
npm install
# 删除旧的dist文件
rm -rf dist dist.tar
# Build代码
npm run build
# 将dist打包
tar -zcf dist.tar.gz dist
echo "========== 打包完毕 =========="部署
选择增加构建步骤 ——> Send files or execute commands over SSH ,Exec command添加如下内容,其他参考图片说明
bash
if [ ! -f "dist.tar" ];then
echo "更新文件不存在"
exit 1
else
echo "更新"
tar -xf dist.tar.gz
rm -rf dist.tar.gz
echo "更新完成"
fi
如果Nginx代理了对应目录,可以尝试进行访问,看页面是否出来,亦或者直接在对应目录看是否有对应内容
Nginx代理vue前端参考:
nginx
server {
listen 80;
server_name docs.liulike.top;
# 代理到后端
location /api {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header HOST $host:$server_port;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 代理前端打包后的静态资源
location / {
root /data/doc/dist;
try_files $uri $uri/ /index.html;
}
}
