V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
dcalsky
V2EX  ›  分享创造

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

  •  
  •   dcalsky · 2020-03-01 21:50:24 +08:00 · 2603 次点击
    这是一个创建于 1728 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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/[email protected]
          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 环境又有什么高见呢?

    4 条回复    2020-08-05 19:29:05 +08:00
    scriptB0y
        1
    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
        2
    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
        3
    lasuar  
       2020-08-05 17:24:17 +08:00
    有没有办法在其中搭建一个临时 db 环境?比如 mysql 、redis 用于测试
    dcalsky
        4
    dcalsky  
    OP
       2020-08-05 19:29:05 +08:00
    @lasuar 这是只是前端 CD
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   914 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:22 · PVG 06:22 · LAX 14:22 · JFK 17:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.