docker+jenkins+nginx前端自动化部署

1,894 阅读3分钟

前言

前端项目每次打包上线都要手动打包上传到服务器,就想着弄一个Jenkins做自动化部署,这样就方便多了。所以写个教程记录一下。

一、centOS安装docker

  1. 如果之前安装过docker,使用以下命令卸载
    yum remove docker \
      docker-client \
      docker-client-latest \
      docker-common \
      docker-latest \
      docker-latest-logrotate \
      docker-logrotate \
      docker-selinux \
      docker-engine-selinux \
      docker-engine \
      docker-ce 
  1. 安装yum工具
    yum install -y yum-utils \ 
        device-mapper-persistent-data \ 
        lvm2 --skip-broken
  1. 设置docker镜像源,依次执行以下命令
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast
  1. 安装docker yum install -y docker-ce

  2. 查看并启动docker

    docker -v
    
    systemctl start docker # 启动docker服务 
    systemctl stop docker # 停止docker服务 
    systemctl restart docker # 重启docker服务

如果启动时报错 提示:Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 执行以下操作

cd /etc/docker/ 

# 修改daemon的类型 
mv daemon.json daemon.conf 

# 重启docker
systemctl restart docker
  1. 安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

docker-compose权限提升

sudo chmod +x /usr/local/bin/docker-compose

二、安装git

. . .

查看git版本

git -v

配置密钥 生成id_rsa_pub(公钥)id_rsa(私钥)

ssh-keygen -t rsa -C "root"

添加公钥到gitlab 或者 其他代码仓库的 SSH key

输入cd /root/.ssh

image.png

三、安装jenkins

安装Jenkins:lts

docker pull jenkins/jenkins:lts

创建jenkins文件夹

mkdir /usr/local/docker 
mkdir /usr/local/docker/compose 
mkdir /usr/local/docker/jenkins

创建jenkins配置文件 docker-compose.yml

cd /usr/local/docker/compose 
touch docker-compose.yml
version: '3' 
networks: 
    frontend: 
        external: true 
        
services: # 容器 
    docker_jenkins: 
        user: root # root权限 
        restart: always # 重启方式 
        image: jenkins/jenkins:lts # 使用的镜像 
        container_name: jenkins # 容器名称 
        ports: # 对外暴露的端口定义 
            - 8090:8080 # 对外暴露的端口:Jenkins默认端口
            
docker_nginx: # nginx环境 
    restart: always 
    image: nginx 
    container_name: nginx
    ports: 
        - 8001:8001 
    volumes: 
        - usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
        - /usr/local/docker/html:/usr/share/nginx/html 
        - /usr/local/docker/nginx/logs:/var/log/nginx

systemctl start docker # 执行docker启动命令

cd /docker/compose # 进入到对应目录 

docker compose up -d # 执行命令

docker ps -a # 查看docker运行状态

image.png

访问jenkins ip + 设置的端口号 初始化默认密码在/usr/local/docker/jenkins/secrets/initialAdminPassword

四、安装nginx

创建nginx 文件夹

mkdir /usr/local/docker/nginx 
mkdir /usr/local/docker/nginx/conf 
mkdir /usr/local/docker/html 

创建nginx配置文件 nginx

cd /usr/local/docker/nginx/conf 
touch nginx.conf

修改配置文件,nginx详细参数配置(史上最全)

重启dockersystemctl restart docker

五、配置jenkins

下载插件

image.png

搜索gitlab Nodejs publish Over SSH 这三个插件 image.png

image.png

image.png

image.png

  • Publish Over SSH 连接远程服务器

进入系统配置 image.png

image.png

点击高级 输入密码

image.png

下滑 测试连接 应用保存

image.png

  • 配置nodejs

进入全局配置

image.png

新增nodejs 选择自己本地对应的node版本

image.png

  • 添加凭据

进入凭据管理

image.png image.png

添加凭据

image.png

image.png

  • 创建构建任务

新建任务 image.png

image.png

设置构建触发器 复制好webhooks URLSecret Token下一步 到gitlab上设置webhooks 需要 image.png

image.png

去gitlab 上配置webhooks

image.png

image.png

image.png

  • 设置 Build Steps

image.png

选择配置的node版本 image.png 接着添加构建步骤 添加shell

image.png 添加shell语句

image.png

#!/bin/bash

yarn install --pure-lockfile 
npm run build

rm -rf dist.tar # 先删除已存在的dist压缩包
tar -zcvf dist.tar ./dist # 将dist文件压缩成dist.tar

image.png Source files将/usr/local/docker/jenkins/workspace/test_web/dist.tar 到目标目录 所以是dist.tar Remote directory 将dist文件复制到的目标目录 Exec command 最后执行的命令

image.png

cd /usr/local/nginx/html
rm  -rf   dist/ # 删除已有的dist文件夹
tar zxvf dist.tar # 解压dist压缩包
rm dist.tar # 删除dist压缩包

以上全部配置完成,测试构建成功

image.png