代码之家  ›  专栏  ›  技术社区  ›  revy

GitHub操作:在作业之间共享公共操作

  •  0
  • revy  · 技术社区  · 4 年前

    正在从切换 Travis CI GitHub Actions ,我想知道是否有一种方法可以在工作之间共享共同的步骤。对于一个项目,我需要每个作业从3个操作开始:签出存储库代码、安装Node.jsv12、从缓存还原Node\u模块(如果可用)。实际上,我已经为每个作业添加了这3个操作,虽然有效,但有点冗长。有没有一种说法:“每个作业必须先运行这些操作”之类的?

    name: ci
    on: [push, workflow_dispatch]
    
    jobs:
      setup:
        runs-on: ubuntu-latest
        steps:
          - name: Check out repository code
            uses: actions/checkout@v2
    
          - name: Setup node
            uses: actions/setup-node@v2
            with:
              node-version: '12'
    
          - name: Cache node_modules
            id: cache-node-modules
            uses: actions/cache@v2
            with:
              path: node_modules
              key: node-modules-${{ hashFiles('package-lock.json') }}
    
          - name: Install dependencies
            run: npm install
    
      test_mysql:
        runs-on: ubuntu-latest
        needs: setup
        steps:
          - name: Check out repository code
            uses: actions/checkout@v2
    
          - name: Setup node
            uses: actions/setup-node@v2
            with:
              node-version: '12'
    
          - name: Restore node_modules
            id: cache-node-modules
            uses: actions/cache@v2
            with:
              path: node_modules
              key: node-modules-${{ hashFiles('package-lock.json') }}
    
          - name: Test MySQL 5
            run: npm run test-mysql
            env:
              DOCKER_MYSQL_TAG: 5
    
          - name: Test MySQL 8
            run: npm run test-mysql
            env:
              DOCKER_MYSQL_TAG: 8
    
      test_postgres:
        runs-on: ubuntu-latest
        needs: setup
        steps:
          - name: Check out repository code
            uses: actions/checkout@v2
    
          - name: Setup node
            uses: actions/setup-node@v2
            with:
              node-version: '12'
    
          - name: Restore node_modules
            id: cache-node-modules
            uses: actions/cache@v2
            with:
              path: node_modules
              key: node-modules-${{ hashFiles('package-lock.json') }}
    
          - name: Test Postgres 10
            run: npm run test-postgres
            env:
              DOCKER_POSTGRES_TAG: 10
    
          - name: Test Postgres 11
            run: npm run test-postgres
            env:
              DOCKER_POSTGRES_TAG: 11
    
          - name: Test Postgres 12
            run: npm run test-postgres
            env:
              DOCKER_POSTGRES_TAG: 12
    
      test_mariadb:
        runs-on: ubuntu-latest
        needs: setup
        steps:
          - name: Check out repository code
            uses: actions/checkout@v2
    
          - name: Setup node
            uses: actions/setup-node@v2
            with:
              node-version: '12'
    
          - name: Restore node_modules
            id: cache-node-modules
            uses: actions/cache@v2
            with:
              path: node_modules
              key: node-modules-${{ hashFiles('package-lock.json') }}
    
          - name: Test MariaDB 10.4
            run: npm run test-mariadb
            env:
              DOCKER_MARIADB_TAG: 10.4.12
    
      test_mssql:
        runs-on: ubuntu-latest
        needs: setup
        steps:
          - name: Check out repository code
            uses: actions/checkout@v2
    
          - name: Setup node
            uses: actions/setup-node@v2
            with:
              node-version: '12'
    
          - name: Restore node_modules
            id: cache-node-modules
            uses: actions/cache@v2
            with:
              path: node_modules
              key: node-modules-${{ hashFiles('package-lock.json') }}
    
          - name: Test MSSQL 2017
            run: npm run test-mssql
            env:
              DOCKER_MSSQL_TAG: 2017-CU17-ubuntu
    
          - name: Test MSSQL 2019
            run: npm run test-mssql
            env:
              DOCKER_MSSQL_TAG: 2019-latest
    
      test_sqlite:
        runs-on: ubuntu-latest
        needs: setup
        steps:
          - name: Check out repository code
            uses: actions/checkout@v2
    
          - name: Setup node
            uses: actions/setup-node@v2
            with:
              node-version: '12'
    
          - name: Restore node_modules
            id: cache-node-modules
            uses: actions/cache@v2
            with:
              path: node_modules
              key: node-modules-${{ hashFiles('package-lock.json') }}
    
          - name: Test SQLite
            run: npm run test-sqlite
    
      publish:
        runs-on: ubuntu-latest
        needs: [test_mysql, test_postgres, test_mariadb, test_mssql, test_sqlite]
        steps:
          - name: Check out repository code
            uses: actions/checkout@v2
    
          - name: Setup node
            uses: actions/setup-node@v2
            with:
              node-version: '12'
    
          - name: Restore node_modules
            id: cache-node-modules
            uses: actions/cache@v2
            with:
              path: node_modules
              key: node-modules-${{ hashFiles('package-lock.json') }}
    
          - name: Build
            run: npm run build
    
          - name: Check version changes
            uses: EndBug/version-check@v1
            id: check
    
          - name: Publish
            if: steps.check.outputs.changed == 'true' && github.ref == 'refs/heads/master'
            run: |
              npm set registry "https://registry.npmjs.org"
              npm set //registry.npmjs.org/:_authToken ${{ secrets.NPM_PUBLISH_TOKEN }}
              npm publish
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Krzysztof Madej    4 年前

    如果你想分享的步骤是 uses .

    应该由我来处理 composite actions but

    复合运行步骤目前支持什么?

    • 名称
    • 运行
    • 环境

    有关详细信息,请参阅文档。

    我们不支持设置条件,出错时继续,超时分钟, “使用” ,以及合成动作中各个步骤的秘密。

        2
  •  0
  •   Kiran Indukuri    4 年前

    needs: setup . 这不是在运行内部的步骤吗 setup