应用jenkins 自动更新部署vuepress到服务器
docker 安装 jenkins
准备工作
cd /Users/dftshine/Career/LocalDocker/docker_volumes/
创建文件夹
mkdir -p jenkins/jenkins_home
找到本机部署的 maven、
/Users/dftshine/Career/Develop/Tools/apache-maven-3.9.6
找到宿主机部署的jdk
/Library/Java/JavaVirtualMachines/jdk-17.0.13.jdk/Contents/Home
注:macos 默认不能使用用户主目录外的资源,需要在docker desktop 配置中增加Resource
iterm2 容器构建命令
docker run -d \
-p 8888:8080 \
-p 50000:50000 \
--privileged=true \
-v /Users/dftshine/Career/LocalDocker/docker_volumes/jenkins/jenkins_home:/var/jenkins_home \
-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \
--restart=always \
--name=jenkins \
-u root \
-v /Users/dftshine/Career/Develop/Tools/apache-maven-3.9.6:/data/maven \
-v /Library/Java/JavaVirtualMachines/jdk-17.0.13.jdk/Contents/Home:/data/jdk17 \
-v /Users/dftshine/Career/LocalDocker/docker_volumes/jenkins/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
jenkins/jenkins
查看jenkins管理员密码
通过进程得到容器id - 8c29cee6e981
docker ps -a | grep jenkins
8c29cee6e981 jenkins/jenkins "/usr/bin/tini -- /u…" 18 hours ago Up 18 hours 0.0.0.0:50000->50000/tcp, 0.0.0.0:8888->8080/tcp jenkins
进入容器
docker exec -it 8c29cee6e981 /bin/bash
查看初始管理员密码
cat /var/jenkins_home/secrets/initialAdminPassword
进入jenkins网址,输入管理员密码后继续
http://localhost:8888/jenkins
基础配置、初始化
admin 密码、邮箱..
选择推荐的插件即可(自带git)
注:此时安装的jenkins版本为 2.523
jenkins 配置
安装插件
进入jenkins配置页面
进入plugins管理页面
安装NodeJS Plugin(编译打包前端代码)
在Avaliable Plugins 查询NodeJS Plugin,勾选后安装
安装之后,回到Jenkins配置页面,进入Tools 管理页面,滚动页面到最下面,NodeJS安装部分, 新增NodeJS
别名:NodeJS 的名称,用于区分不同版本,此处配置NodeJS-18
勾选自动安装
版本,选择为NodeJS 18.20.4 (注:参考开发环境使用的版本号)
其余不变,点保存即可。
安装Publish Over SSH 插件(部署服务器)
在Avaliable Plugins 查询Publish Over SSH, 勾选后安装
安装之后,回到Jenkins配置页面,进入System管理页面,滚动页面到最下面, SSH Server 部分配置 部署服务器的信息
Name: SSH Server 的名字,用于区分不同部署服务,此处配置ECS
Hostname:部署服务器的IP地址,此处配置的是XXX.XXX.XXX.XXX
Username:部署服务器的用户名,此处配置的是root
Remote Directory : 部署工程dist的路径, 此处配置的是 /opt/webserver/nginx/dist
注:此处不配置服务器的密码或者key
其余不变,点保存即可。
其他
代码仓库及账号密码获取
此处使用服务器自行搭建的gogs git服务, 前端工程URL 为 {http://...git} 账号密码分别为 {用户名}
部署服务器公钥访问
部署服务器上,进入 ~/.ssh 目录,生成公钥私钥对。
cd ~/.ssh/
ssh-keygen -t rsa
一路回车,即可完成,然后~/.ssh 目录下多了两个文件
id_rsa id_rsa.pub
其中id_rsa 为私钥,cat命令查看其中的内容,可以复制出来保存,之后在客户端(jenkins)配置时使用。
其中id_rsa.pub 为公钥,需要放到服务器下 ~/.ssh/authorized_keys 中,如果没有此文件,先创建
touch authorized_keys
cat id_rsa.pub >> authorized_keys
jenkins配置项目任务
新建部署任务
新建item,此处任务名配置为 spads-blog, 类型选择 Freestyle project
任务配置
进入任务中,点击配置,进入配置页面
General
此处指配置描述即可
源码管理
选择Git,进行相关配置
Repositories
Repositories URL:配置git仓库URL
Credentials:配置git仓库的用户名密码
Branches to build
指定分支,此处默认 */master
Additional Behaviours
此处不配置
Trigger
此处无配置
Environment
此处勾选 Provide Node & npm bin/ folder to PATH,然后进行配置
Node JS installation:选择安装配置的工具 NodeJS-18
,其他默认即可。
Build Steps
选择执行 shell,命令内容如下(进行安装依赖和打包)
npm i && npm run docs:build
构建后操作
选择Send Build artifacts over SSH,配置如下:
SSH Server:
Name:选择system配置中SSH Server 的名字, ECS
展开高级,配置服务器登录信息,
Credentials:
username:配置SSH Server 用户名,此处配置为root
Key:此处配置服务器上生成的私钥(id_rsa)中的内容(注:需要带着-----BEGIN RSA PRIVATE KEY-----
和 -----END RSA PRIVATE KEY-----
)
Transfer Set:
Source files:配置vuepress工程打包后的dist目录位置,此处配置为 docs/.vuepress/dist/**/*
Remove prefix: 配置移除的文件夹前缀,此处配置为 docs/.vuepress/dist/
Remote directory: SSH Server 配置的远程目录后面追加的路径,因为SSH Server 中直接配置的目标路径,此处配置选择不配置。
Exec command:需要执行的命令,此处配置 /opt/webserver/nginx/sbin/nginx -s reload
注:如果同一个SSH server部署多个项目或服务,比如前后端分别部署,SSH Server那个位置可以选择一个大致位置,可以通过此处Remote directory来区分具体位置。需要特别注意的是 选择的文件夹,需要有相应权限。 此外,如果执行命令没有权限也会报错,最好指定要运行的程序的全路径。
保存
点击保存,完成配置
执行构建
回到项目页面,执行 立即构建
构建执行后,在左下角builds列表会新增一个记录,点击后进入可查看控制台输出日志,如果有报错,针对报错信息进行处理,直至构建成功:
检查成果
访问服务器URL 查看部署后的内容是否更新。