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