Jenkins
基于 Github+jenkins+nginx 实现个人应用的自动化部署,我的服务器操作系统是 centos7
用 Jenkins 实现自动化部署的配置流程是:
- 设置 github 项目 webhook
- github 代码更新,触发 webhook
- jenkins 执行脚本
- 拉取最新代码到指定目录(覆盖)
- 安装依赖
- 执行项目
nginx
安装
yum install nginx
systemctl start nginx
systemctl enable nginx
# 常用命令
# systemctl restart nginx
# systemctl status nginx
# systemctl stop nginx
修改配置
先找个目录用于部署个人应用,然后修改下 nginx 配置
# /etc/nginx/nginx.conf
#...
# 新增
server {
listen 80;
# 注意:如果是用二级域名,需要先在域名控制台解析对应的二级域名
server_name docs.zhouweibin.top;
location / {
root /home/docs;
index index.html;
}
}
# https
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name docs.zhouweibin.top;
root /usr/share/nginx/html;
# 注意:密钥需要预先生成并上传,这里不能为空
# 可以在服务器对应云服务商里免费申请和下载,之后上传到指定目录即可
ssl_certificate "/etc/ssl/xxx.pem";
ssl_certificate_key "/etc/ssl/xxx.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
root /home/docs;
index index.html;
# try_files $uri $uri/ /index.html;
}
}
#...
二级域名和 ssl 证书配置可以参考 https://docs.zhouweibin.top/docs/awesome-dev/%E6%9C%8D%E5%8A%A1%E5%99%A8/
如果没有 ssl 证书,可以先注释掉 https 的配置。接下来先在本地打包,将 build 里的所有文件上传到 nginx 指定目录下,然后重启 nginx 访问尝试下
systemctl restart nginx
先完成这一步再接着往下!
jenkins
主要是拉取 github 项目,将其部署到服务器上。在提交代码到 github 时,可以通过 webhook 触发 jenkins 自动部署
搭建服务
按照官方指引新建 jenkins 服务
- 安装好 java 环境和 jenkins
yum install -y java
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install -y jenkins
- 修改 jenkins 的默认端口
// /etc/sysconfig/jenkins
JENKINS_HOME -- Jenkins的主目录
JENKINS_USER -- Jenkins的用户,拥有$JENKINS_HOME和/var/log/jenkins的权限
JENKINS_PORT -- Jenkins的端口,默认端口是8080,建议改变,防止占用端口冲突
- 启动服务和开机自启
systemctl start jenkins
systemctl enable jenkins
新建流水线
- 新建任务,输入应用名称,选择构建一个自由风格的软件项目
- 输入 Github 项目(对应仓库首页的 url)
- 源码管理选择
Git
(如果是私有仓库,要创建带 ssh 秘钥的凭据,通过 ssh 方式连接仓库) - 构建触发器选择
GitHub hook trigger for GITScm polling
- 构建环境选择
node
,需要先配置 nodejs 插件 - 构建脚本选择
shell
,脚本可以参考下面的代码片段
# 注意 _name_ 要替换成你自己的应用名
#!/bin/sh
cd /var/lib/jenkins/workspace/_name_
rm -rf node_modules dist
node -v
npm -v
npm config set registry https://registry.npm.taobao.org/
npm install #安装项目中的依赖
#!/bin/sh
npm run build
cd dist
rm -rf _name_.tar.gz #删除上次打包生成的压缩文件
tar -zcvf _name_.tar.gz * #把生成的项目打包成压缩包,方便移动到项目部署目录
cd /home #进入web项目根目录
if [ ! -d "_name_" ]; then
sudo mkdir _name_
fi
cd /home/_name_ #进入web项目根目录
sudo mv /var/lib/jenkins/workspace/_name_/dist/_name_.tar.gz ./ #移动刚刚打包好的项目到web项目根目录
sudo tar -zxvf _name_.tar.gz -C ./ #解压项目到dist目录
sudo rm -rf _name_.tar.gz #删除压缩包
ssh 方式连接仓库,需要先在主机(你的服务器)生成 ssh key,cd /.ssh 查看密钥,pub 结尾的为公钥,追加到在 settings > SSH And GPG keys 的 ssh keys 列表中
ssh-keygen -t rsa -b 4096 -C "your email"
ll /.ssh
关联 github 仓库
新建仓库不用教了吧,主要是关联下 webHook,在 push 代码到指定分支时触发 jenkins 部署应用
b.新建凭据。setting --> Personal Access Token --> Generate new token
,需要配置读写权限,之后会生成一个 token,作为凭据的内容(secret key)。
c.在 github > settings
配置 webhook。这一步是为了后续 github 项目在触发对应节点时能发送请求给 jenkins。在[项目仓库] > settings > webhooks
里面新增一个,Payload URL
格式类似于
http://[ip]:[jenkins port]/github-webhook/
之后可以在 Recent Deliveries
里面看最近的触发记录
d.git push
触发自动构建试试!
其他方案
- 手动部署:本地打包后把打包产物上传到 nginx 指定目录就行啦(FileZilla 或者 ssh 上传)
- vercel。还没试过