CircleCI:使用单独的作业创建工作流程。每个环境一个构建和不同的部署

时间:2017-12-19 18:17:56

标签: yaml circleci

大家。我需要一些帮助来解决我为Angular项目配置circleCi所面临的一些问题。

我用于构建和部署过程的 config.yml 详述如下。目前,我已经决定为每个环境执行单独的工作,每个工作都包括构建和部署。这种方法的问题在于我正在重复自己,而且我无法找到在同一工作流程中部署先前作业中构建的工件的正确方法。

version: 2
jobs:
  build:
    docker:
      - image: circleci/node:8-browsers
    steps:
      - checkout
      - restore_cache:
          key: dependency-cache-{{ checksum "package.json" }}
      - run:
          name: Install dependencies
          command: npm install
      - save_cache:
          key: dependency-cache-{{ checksum "package.json" }}
          paths:
            - .node_modules
      - run:
          name: Build Application (Production mode - aot enabled)
          command: npm run build:prod
      - store_artifacts:
          path: dist
          destination: dist
  deploy_prod:
    docker:
      - image: circleci/node:8-browsers
    environment:
      - FIREBASE_TOKEN: "1/AFF2414141ASdASDAKDA4141421sxscq"
    steps:
      - checkout
      - restore_cache:
          key: dependency-cache-{{ checksum "package.json" }}
      - run:
          name: Install dependencies
          command: npm install
      - save_cache:
          key: dependency-cache-{{ checksum "package.json" }}
          paths:
            - .node_modules
      - run:
          name: Build Application (Production mode - aot enabled)
          command: npm run build:prod
      - store_artifacts:
          path: dist
          destination: dist
      - run:
          command: ./node_modules/.bin/firebase use default
      - deploy:
          command: ./node_modules/.bin/firebase deploy --token=$FIREBASE_TOKEN
  deploy_qa:
    docker:
      - image: circleci/node:8-browsers
    environment:
      - FIREBASE_TOKEN: "1/AFF2414141ASdASDAKDA4141421sxscq"
    steps:
      - checkout
      - restore_cache:
          key: dependency-cache-{{ checksum "package.json" }}
      - run:
          name: Install dependencies
          command: npm install
      - save_cache:
          key: dependency-cache-{{ checksum "package.json" }}
          paths:
            - .node_modules
      - run:
          name: Build Application (Production mode - aot enabled)
          command: npm run build:prod
      - store_artifacts:
          path: dist
          destination: dist
      - run:
          command: ./node_modules/.bin/firebase use qa
      - deploy:
          command: ./node_modules/.bin/firebase deploy --token=$FIREBASE_TOKEN
workflows:
  version: 2
  build-and-deploy:
    jobs:
      - build:
          filters:
            branches:
              only:
                - master
              ignore:
                - /feat-.*/
      - deploy_prod:
          filters:
            branches:
              ignore:
                - /.*/
            tags:
              only:
                - /v[0-9]+(\.[0-9]+){2}/
      - deploy_qa:
          filters:
            branches:
              ignore:
                - /.*/
            tags:
              only:
                - /v[0-9]+(\.[0-9]+){2}-BETA-([0-9]*)/
  • 据我所知,每个作业都使用不同的泊坞窗图片,因此这会阻止我在同一个工作区上工作。

    问:如何在同一工作流程中为不同的作业使用相同的泊坞窗图像?

  • 我认为store_artifacts认为它可以帮助我,但我读到的是它只适用于通过仪表板或API使用。

    问:我是否能够在需要存储工件的不同作业的作业上恢复工件?

  • 我知道我正在重复自己,我的目标是根据标签提供每个环境部署作业所需的构建作业'名称。所以我的deploy_ {env}作业主要是firebase命令。

    workflows:
      version: 2
      build-and-deploy:
        jobs:
        - build:
            filters:
              branches:
                only:
                  - master
                ignore:
                  - /feat-.*/
              tags:
                only:
                  - /v[0-9]+(\.[0-9]+){2}/
                  - /v[0-9]+(\.[0-9]+){2}-BETA-([0-9]*)/
        - deploy_prod:
            requires:
              - build
            filters:
              branches:
                ignore:
                  - /.*/
              tags:
                only:
                  - /v[0-9]+(\.[0-9]+){2}/
        - deploy_qa:
            requires:
              - build
            filters:
              branches:
                ignore:
                  - /.*/
              tags:
                only:
                  - /v[0-9]+(\.[0-9]+){2}-BETA-([0-9]*)/
    

    问:此解决方案的建议步骤(最佳做法)是什么?

1 个答案:

答案 0 :(得分:0)

  

问:如何在同一工作流程中为不同的作业使用相同的泊坞窗图像?

可能有两种解决方法:

1。)Docker Layer Caching:https://circleci.com/docs/2.0/docker-layer-caching/

2。)缓存.tar文件:https://circleci.com/blog/how-to-build-a-docker-image-on-circleci-2-0/

  问:我能否在需要不同的工作上恢复工件   存储工件的工作?

persist_to_workspaceattach_workspace密钥在这里应该会有所帮助:https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs

  

问:此解决方案的建议步骤(最佳做法)是什么?

这里不确定!无论哪种方式对你来说都是最快最干净的。 :)