Docker+github actions部署前端项目

Docker+github actions部署前端项目

前言

在进行本篇实践前,建议先了解一下:使用linux+Nginx部署,使用docker部署,使用github actions部署.



实现自动化部署的整体流程应该是:

  • 在 vue 项目中增加 Dockerfile 文件 和 nginx.conf 配置文件
  • 部署时,首先将 dist + Dockerfile + nginx.conf 打成镜像 (docker build 相关明令)
  • 将打包出来的镜像上传至存储应用的服务器或DockerHub(私服仓库)
  • 最后在部署服务器上从存储镜像的那台服务器上拉取镜像,执行 docker run 相关命令进行发布

因为这些步骤在前面的文章中都有相关的更详细的解释,所以这里并不会进行很详细的解释,更多的是将这些分散的步骤进行串联起来。


1.Docker相关文件配置

在根目录下创建Dockerfile文件

FROM node:14
COPY ./ /app
WORKDIR /app
RUN yarn install && yarn build

FROM nginx
RUN mkdir /app
COPY --from=0 /app/dist /app
COPY default.conf /etc/nginx/nginx.conf

在项目根目录创建 .dockerignore 文件

  • 设置 .dockerignore 文件能防止 node_modules 和其他中间构建产物被复制到镜像中导致构建问题。
**/node_modules
**/dist

在项目根目录创建 nginx.conf 文件,名字是什么无所谓,但是要注意与上面的Dokcerfile文件中的名字相对应。

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
  worker_connections  1024;
}
http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
  access_log  /var/log/nginx/access.log  main;
  sendfile        on;
  keepalive_timeout  65;
  server {
    listen       80;
    server_name  localhost;
    location / {
      root   /app;
      index  index.html;
      try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
  }
}

我们这里还是使用的容器的80端口。


2.创建自己的dokcer hub仓库

和创建github仓库类似,按照步骤走即可。

并且我们可以体验一下,先使用手动执行命令来pull和push镜像。

一个demo:

  • 首先执行:dokcer build -t [要设置的镜像名] [文件的具体目录],这样就打包好了一个镜像

    比如我的:docker build -t actions:latest .

  • docker run -d -p 5555:80 --name actions mengqiuleo/actions-image:latest ,我们使用该命令将容器运行起来

    actions是我运行的容器名,actions mengqiuleo/actions-image:latest是我的镜像名

  • 然后将该镜像上传到docker hub,使用命令:docker push mengqiuleo/actions-image:latest

    如果不知道要设置的镜像名是什么,可以登录到docker hub 中进行查看,

    在这里插入图片描述

    在这里插入图片描述


其他命令

移除容器与镜像:

docekr rmi 镜像id

docker rm 容器id

docker stop 容器id

docker tag : 标记本地镜像,将其归入某一仓库。

语法

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

实例

将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像。

root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker images   runoob/ubuntu:v3
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
runoob/ubuntu       v3                  4e3b13c8a266        3 months ago        136.3 MB

3.yml文件配置

name: CI/CD
# 触发条件为 push
on: [push] # 执行时机
# 任务
jobs:  
  test:
    # 运行的环境
    runs-on: ubuntu-latest
    # 步骤
    steps:
      - uses: actions/checkout@v2 # git pull
      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 14
      - name: 打包镜像, 上传 Docker Hub
        run: |
          docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
          docker build -t actions:latest  .
          docker tag actions:latest ${{ secrets.DOCKER_REPOSITORY }}
          docker push ${{ secrets.DOCKER_REPOSITORY }}:latest

      - name: 登录服务器, 执行脚本
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}   
          username: ${{ secrets.SSH_USERNAME }}
          password: ${{ secrets.SSH_PASSWORD }}
          script: |
            docker stop actions
            docker rm actions
            docker rmi mengqiuleo/actions-image:latest
            docker pull mengqiuleo/actions-image:latest
            docker run -d -p 5555:80 --name actions mengqiuleo/actions-image:latest  

在这里解释一下,上面的一些操作步骤:

首先是:

          docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
          docker build -t actions:latest  .
          docker tag actions:latest ${{ secrets.DOCKER_REPOSITORY }}
          docker push ${{ secrets.DOCKER_REPOSITORY }}:latest
  • 先登录自己的dokcer hub,DOCKER_USERNAMEDOCKER_PASSWORD是私有变量,内容对应的是我们的docker hub账号和密码

  • 然后构建一个镜像,我的镜像名为 actions:latest,要进行构建的文件目录在.目录下

  • 然后给actions:latest打tag,标记名为DOCKER_REPOSITORY

    注意,这里的DOCKER_REPOSITORY是有要求的,内容为自己的区域名再加上仓库名(镜像名)。比如你有一个区域叫aaa,然后你创建了一个仓库希望存放的镜像是bbb,那你的DOCKER_REPOSITORY应该为aaa/bbb,而不是单纯的bbb

  • 因为构建的时候,我们不是很方便的查看哪里报错了,所以最好在执行github actions之前我们可以进行手动构建,保证整个流程是通的,不要出现不存在某个仓库或文件的错误

  • 标记完后就是将这个镜像推送到远程仓库

然后解释,在服务器上拉取镜像并构建容器运行的相关脚本:

            docker stop actions
            docker rm actions
            docker rmi mengqiuleo/actions-image:latest
            docker pull mengqiuleo/actions-image:latest
            docker run -d -p 5555:80 --name actions mengqiuleo/actions-image:latest  

因为我们构建的容器名叫actions,所以先停止容器,移出容器与镜像,再拉取镜像,并运行新的容器


一些小的疑惑?

在执行整个自动化构建的流程之前,我们需要自己手动先运行一次相关命令,为了保证云服务上存在actions的容器和相关镜像。

否则直接执行yml文件的话,在最后的脚本中,我们无法移除容器与镜像,会报错:不存在镜像与容器。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
感谢您的提问!以下是从0到1使用 Docker、Jenkins、Git、Pytest以及Allure搭建项目自动化框架的步骤: 1. 安装 Docker 首先,您需要在您的机器上安装 Docker。您可以通过Docker官网提供的安装指南来完成安装:https://docs.docker.com/get-docker/ 2. 创建 Docker 镜像 接下来,您需要创建一个 Docker 镜像,这个镜像将用于运行项目自动化框架。您可以通过 Dockerfile 文件来创建镜像,以下是一个示例 Dockerfile 文件: ``` FROM python:3.8 WORKDIR /app COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["pytest"] ``` 在该示例中,我们使用 Python 3.8 作为基础镜像,并将工作目录设置为 /app。然后,我们将 requirements.txt 文件复制到工作目录中,并使用 pip 安装其中的依赖。最后,我们将项目文件复制到工作目录中,并设置 pytest 命令作为默认命令。 要创建镜像,请使用以下命令: ``` docker build -t <image-name> . ``` 其中,<image-name> 为您的镜像名称,"." 表示 Dockerfile 文件所在的目录。 3. 创建 Git 仓库 接下来,您需要创建一个 Git 仓库来存储项目代码。您可以选择使用 GitHub、GitLab 或者其他 Git 托管服务。 在创建 Git 仓库之后,您需要将项目代码上传到仓库中。 4. 创建 Jenkins 任务 在 Jenkins 中创建一个自由风格的项目,并配置以下步骤: - SCM:选择 Git,并填写您的 Git 仓库地址、分支等信息。 - Build:选择 Execute shell,并填写以下命令: ``` docker run -v $WORKSPACE:/app <image-name> /bin/bash -c "pytest --alluredir=/app/allure-results && allure generate /app/allure-results -o /app/allure-report" ``` 其中,<image-name> 为您的 Docker 镜像名称。 该命令将在 Docker 容器中运行 pytest 命令,并生成 Allure 报告。报告将存储在 $WORKSPACE/allure-report 目录中。 - Post-build Actions:选择 Publish Allure Report,并填写 Allure 报告存储路径为 $WORKSPACE/allure-report。 5. 运行 Jenkins 任务 现在,您可以运行 Jenkins 任务并查看 Allure 报告。在 Jenkins 任务页面上,您可以找到 "Build Now" 按钮,并单击它来启动构建。 构建完成后,在 Jenkins 任务页面上,您可以找到 "Allure Report" 按钮,并单击它来查看 Allure 报告。 希望这些步骤对您有所帮助,祝您成功搭建项目自动化框架!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛小y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值