前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用CircleCI2.0持续集成Angular项目

使用CircleCI2.0持续集成Angular项目

作者头像
mafeifan
发布2019-03-11 14:54:08
8020
发布2019-03-11 14:54:08
举报
文章被收录于专栏:finleyMafinleyMafinleyMa

对于Angular项目,之前处理一个ticket的流程我们的做法:

  1. 启动项目本地开发 npm start
  2. 开发完成,跑代码语法及规范检测 npm run lint
  3. 跑单元测试 npm run test
  4. 构建生产静态资源 npm run build
  5. 打包然后上传到服务器 tar -zcvf oneportal.gz -C dist .

每处理完一个任务都得搞一遍是不是很麻烦?重复而且效率低

这种事情完全可以交给CircleCI来处理。 CircleCI的好处(截止当前的政策2019.2):

  1. 不用自己买服务器,比Jenkins简单。省去了维护和部署。
  2. 每月构建时长1000分钟以内免费 (基本够用)
  3. 提供的构建环境配置2核CPU / 4G内存,(算是很慷慨了) 据测试如果是在1核1G的主机下执行npm run build很容易报内存不足
  4. 有专门的配置文件来定义work flow,而且还很强大。
具体实现

Angular项目根目录新建.circleci目录(注意以点开头),然后在这个目录里面再新建config.yml文件 下面是我正在使用的配置,具体语法可以见官方介绍

# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
# See: https://github.com/ci-samples/angular-cli-circleci/blob/master/.circleci/config.yml
version: 2
jobs:
  build:
    docker:
      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      # specify the version you desire here
      # - image: circleci/node:10.14-browsers
      - image: finleyma/circleci-nodejs-browser-awscli
    working_directory: ~/repo
    # https://circleci.com/docs/2.0/env-vars/
    environment:
      ANGULAR_BUILD_DIR: ~/repo/dist
    steps:
      - checkout
      # Download and cache dependencies
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "package.json" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-
      - run:
          name: install-dependencies
          command: npm install
      - run: node -v
      - run: npm -v
      - run: npm run lint
      - run: npm run ci-test
      - run: npm run ci-build
      - run: tar -zcvf oneportal.gz -C dist .
      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}
      - run: aws --version
      - run:
          name: upload-to-aws-s3
          command: 'aws s3 cp oneportal.gz s3://your-aws-bucket/path/ --region us-east-1'

workflows:
  version: 2
  build-deploy:
    jobs:
      - build:
          filters:
            branches:
              only: daily-build

我需要解释几点:

  1. 使用的Docker镜像是finleyma/circleci-nodejs-browser-awscli,这是我基于CircleCI的镜像又加入了awscli工具。这个镜像包含了node10, Chrome(为了跑单元测试), Python2.7(为了安装AWS CLI), AWS CLI(为了上传打包后的静态资源)
  2. 大致流程就是开头说的,只不过为了统一环境我们的项目是在Docker容器里跑测试和构建。通过之后将打包的待发布的静态资源上传到AWS存储。 还有配置文件里限制了分支,只有往daily-build分支上合并代码才会触发CircleCI的构建。
  3. 其中npm run ci-testnpm run ci-build 需要在项目的package.json定义好,加入了一些参数,比如不输出过程,和加入环境参数配置
    "start": "npm run proxy",
     ...
    "build": "ng build --prod",
    "test": "ng test --configuration=testing",
    "ci-build": "node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --configuration=dev --watch=false --progress=false",
    "ci-test": "ng test --configuration=testing --watch=false --browsers=ChromeHeadless --progress=false",
    "lint": "ng lint",
  1. 需要在CircleCI后台配置AWS的Key和Secret。

当然,你可以直接通过SSH将项目传到站点服务器部署。也需要在后台配置下访问服务器的Key。

效果:
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.02.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 具体实现
  • 效果:
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档