Skip to main content

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 服务

  1. 安装好 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
  1. 修改 jenkins 的默认端口
// /etc/sysconfig/jenkins
JENKINS_HOME -- Jenkins的主目录
JENKINS_USER -- Jenkins的用户,拥有$JENKINS_HOME和/var/log/jenkins的权限
JENKINS_PORT -- Jenkins的端口,默认端口是8080,建议改变,防止占用端口冲突
  1. 启动服务和开机自启
systemctl start jenkins
systemctl enable jenkins

新建流水线

  1. 新建任务,输入应用名称,选择构建一个自由风格的软件项目
  2. 输入 Github 项目(对应仓库首页的 url)
  3. 源码管理选择Git(如果是私有仓库,要创建带 ssh 秘钥的凭据,通过 ssh 方式连接仓库)
  4. 构建触发器选择 GitHub hook trigger for GITScm polling
  5. 构建环境选择 node,需要先配置 nodejs 插件
  6. 构建脚本选择 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 部署应用

image.png

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。还没试过