抛砖引玉,分享一下我前端项目的 Github Action Workflow

2020-03-01 21:50:24 +08:00
 dcalsky
name: CI/CD

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [13.x]
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - name: Cache node modules
      uses: actions/cache@v1
      with:
        path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
        key: ${{ runner.os }}-build-${{ hashFiles('**/package-lock.json') }}
    - name: Install packages
      run: npm install
    - name: Build
      run: npm run build
    - name: Upload staticfiles to Aliyun OSS
      uses: manyuanrong/setup-ossutil@v1.0
      with:
        endpoint: ${{ secrets.OSS_ENDPOINT }}
        access-key-id: ${{ secrets.OSS_ID }}
        access-key-secret: ${{ secrets.OSS_KEY }}
    - run: ossutil cp -rf build/ oss://<myoss>
    - name: Dockerize
      id: dockerize
      uses: elgohr/Publish-Docker-Github-Action@master
      with:
        name: ${{ secrets.DOCKER_URL }}
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
        registry: ${{ secrets.DOCKER_REGISTRY }}
        snapshot: true
    - name: Send docker image tag to telegram
      uses: appleboy/telegram-action@master
      with:
        token: ${{ secrets.TG_BOT_TOKEN }}
        to: ${{ secrets.TG_BOT_TO }}
        message: "${{ github.repository }} uploaded a new docker image: ${{ secrets.DOCKER_URL }}:${{ steps.dockerize.outputs.snapshot-tag }}"

步骤

  1. checkout 拉代码
  2. 设置 node 环境
  3. 针对 package-lock.json 做缓存检查,如果变了就不加载.npm
  4. npm install 做缓存,存入.npm
  5. npm run build
  6. 推送静态资源到 OSS
  7. Dockerize 并 push 到自己的 Registry ( tag 会自动生成)
  8. 搞定以后把 docker image name 以及 tag 推到 Telegram Bot 里

没做的

  1. 只做到 push docker image 这步,自动部署没搞,现在是全手动修改 tag,并重启 docker-compose
  2. jobs,workflow 按职责分开,但是目前看来没必要

抛砖引玉

如果用 docker-compose 来管理多个项目,各位的 CI/CD 是怎么做的呢?如果有 test 以及 prod 环境又有什么高见呢?

2498 次点击
所在节点    分享创造
4 条回复
scriptB0y
2020-03-01 21:57:09 +08:00
我来个 Python 的:
测试全部通过后,如果在 master 上有 tag,就自动打包发布到 pypi,开一个 github 的 release:

https://github.com/laixintao/iredis/blob/master/.github/workflows/release.yaml
erguotou521
2020-03-02 10:45:43 +08:00
我来分享下我自己的,没用过 actions,用的 drone,但 CI/CD 的思路是一样的。
docker-compose 管理多个项目我是一个项目一个目录,然后目录里一个 docker-compose.yml ,方便应用隔离。
自动重启是用 docker-compose stop -> rm -> pull new image -> start 流程来实现的。
要区分环境的话可以用多分支管理来实现,不同分支下的 docker-comose.yml 文件稍有差别,或者用环境变量来区分也是可以的。
最近我有篇文章写了些相关的内容,你可以参考下 https://blog.erguotou.me/traefik-devops.html 后续会可能写一篇关于具体流程的文章。
lasuar
2020-08-05 17:24:17 +08:00
有没有办法在其中搭建一个临时 db 环境?比如 mysql 、redis 用于测试
dcalsky
2020-08-05 19:29:05 +08:00
@lasuar 这是只是前端 CD

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/648942

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX