安利 GitHub action - 挺香的

首先安利一波 github action ,它是免费的功能,目前正在使用它来帮助我构建 docker image 镜像。

我自己开发了一个个人博客,现在基本上实现了自动化部署。目前的流程是这样的:

  1. 本地修改代码
  2. git push
  3. github action 构建镜像并把镜像推送到腾云 docker 镜像仓库
  4. 云服务器定时检测 docker image 是否有更新,有则拉取镜像,重新部署

基本上算是解放了劳动力了,每次修改功能,只需要推代码就可以,香。

关于构建

前端构建

我在项目中写了一个 dockerfile


FROM node as builder

WORKDIR /srv

COPY ./ /srv

ARG BLOG_BACKEND_API

RUN npm install -g @quasar/cli \
  && npm install \
  && touch /srv/.env \
  && echo API=${BLOG_BACKEND_API} > /srv/.env \
  && quasar build -m ssr

FROM node:lts-alpine

WORKDIR /srv

COPY --from=builder /srv/dist/ssr /srv

RUN npm install

ENTRYPOINT [ "npm", "start"]

github action 可以基于此 dockerfile ,帮我跑 quasar build -m ssr ,打包我的 vue 代码。原本需要在本地打包,但是现在由 github action 帮我完成,省下了不少时间。

后端构建

依然是基于 dockerfile


FROM composer as builder

WORKDIR /srv

COPY ./ /srv

ARG SSH_PRIVATE_KEY

ARG TOKEN_FOR_COMPOSER

RUN mkdir /root/.ssh/ \
    && echo ${SSH_PRIVATE_KEY} > /root/.ssh/id_rsa \
    && chmod 600 /root/.ssh/id_rsa \
    && touch /root/.ssh/known_hosts \
    && ssh-keyscan github.com >> /root/.ssh/known_hosts \
    && composer config -g github-oauth.github.com ${TOKEN_FOR_COMPOSER} \
    && composer install --ignore-platform-reqs --no-dev

FROM php:7.4.4-apache

WORKDIR /srv

COPY --from=builder /srv /srv

RUN docker-php-ext-install pdo_mysql \
    && chown -R www-data:www-data /srv/storage \
    && cp ./run.sh /usr/local/bin/run \
    && chmod u+x /usr/local/bin/run \
    && apt-get update \
    && apt-get -y install vim \
    && a2enmod rewrite

CMD ["/usr/local/bin/run"]

此 dockerfile 是常规操作。跑 composer install 安装依赖,完事后,安装一些扩展,例如我安装了 pdo_mysql ,然后开启 apache rewrite ,最终构建起一个可以跑 laravel 的镜像。

如何编写 action 文件

首先,应该新建一个 workflow 。在 Actions 选项卡页面,即可新建一个 workflow,如图,点击 New workflow 按钮即可。

安利 GitHub action - 挺香的

然后编写 yml 文件。例如针对上面的前端构建,我写了这样一个 yml文件

# 指定名字为 CI
name: CI

# 指定当 master 有 push 或者 pr 的时候执行
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

# 指定 jobs 
jobs:
 # 第一个 job ,叫做 build
  build:
    # 指定跑在 ubuntu 上
    runs-on: ubuntu-latest

    # 每一个 job 又是由多个 steps 构成
    steps:
    # 这是官方提供的一个 action ,大概的作用可以理解为:把该仓库的代码拉到该 ubuntu 上
    - uses: actions/checkout@v2

    # 定义一个名为 Build image 的step,并执行我指定的命令,这里的命令是跑 docker build 指令,以构建镜像。这里有操作空间,可以干其他事请,例如发个邮件什么的。
    - name: Build image
      run: docker build . -t hkccr.ccs.tencentyun.com/qingfengbaili/blog-frontend --build-arg BLOG_BACKEND_API=${{ secrets.BLOG_BACKEND_API }}
    # 登录腾讯的 docker 镜像仓库
    - name: Login to tencnet docker image registry
      run: echo "${{ secrets.TENCENT_REGISTRY_PASSWORD }}" |  docker login --username=100011753229 hkccr.ccs.tencentyun.com --password-stdin
    # 把构建好的镜像推送到腾讯仓库
    - name: Push image to tencent docker image registry
      run: docker push hkccr.ccs.tencentyun.com/qingfengbaili/blog-frontend

上面代码中的 secrets.XXX 是一些秘钥,github 为了保护你的秘钥,提供了使用变量的办法,我们可以在仓库的 Settings -> Secrets 中定义变量,然后按照 ${{ secrets.XXX }} 的格式,即可拿到变量值。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

搭车安利一下自己的博客迁移到 Kubernetes 以及配置 CI/CD 的过程:

3年前 评论
ㅤㅤ (楼主) 3年前
Wi1dcard (作者) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!