circle初探

github

注册并添加到circleci中会添加一个钩子,用于在有pr是进行测试,也会有邮件提醒,取决于你的设置

添加.circleci / config.yml文件

在创建.circleci/config.yml文件并将其提交到GitHub储库后,CircleCI会立即检查您的代码并运行配置好的测试代码

jobs:
  build:
    docker:
      - image: circleci/ruby:2.4.1-jessie
    steps:
      - run: |
          bundle install
          bundle exec rake db:schema:load
          bundle exec rspec spec
          bundle exec cucumber

CircleCI每次都在一个干净的容器上运行测试,可以在dashboard中查看,或者邮件查看结果


status_badge.png

集成状态也会出现在拉取请求屏幕上,以显示所有测试都已通过:

status_check.png

部署密钥和用户密钥

如果使用GitHub作为VCS,则GitHub具有公钥,而CircleCI存储私钥。部署密钥使CircleCI可以访问单个存储库。为防止CircleCI推送到您的存储库,此部署密钥是只读的。

示例

在github上创建一个项目 :repo

1,生成密钥: 按照提示生成密钥

会在/Users/yourusername/.ssh下生成一个密钥
2,转到https://github.com/you/test-repo/settings/keys,然后单击“添加部署密钥”。在“标题”字段中输入标题,然后复制并粘贴在步骤1中创建的密钥。选中“允许写访问”,然后单击“添加密钥”。(直接按配置后即可)

hello world

添加.circleci/config.yml。 yml添加:

version: 2.1

orbs:
    hello: circleci/[email protected] # uses the circleci/buildpack-deps Docker image

workflows:
    "Hello Workflow":
        jobs:
          - hello/hello-build

commit and push 即可触发构建

在构建时输出hello world

version: 2
jobs:
  build:
    docker: # use the docker executor type; machine and macos executors are also supported
      - image: circleci/node:4.8.2 # the primary container, where your job's commands are run
    steps:
      - checkout # check out the code in the project directory
      - run: echo "hello world" # run the `echo` command

每次job,ci都会启动一个容器来运行该job

version: 你要使用的ci版本
job:你要执行的 job 清单,集合中的键为 job 的名称,值是具体执行 job 的内容,如果你使用工作流(workflows),则 job 的名称在配置文件中必须唯一,如果你不使用 工作流(workflows),则必须包含名称为build的 job 来作为用户提交代码时的默认 job。
docker :是用来指定 CircleCI 当前 job 使用 docker, 其值image是指 docker 所使用的镜像,必要时你可以同时指定多个镜像,比如你的项目需要依赖 mysql 或者 redis。 第一个列出的容器为主容器,steps 都会在主容器中进行。
steps:当前 job 要运行的 命令 (command) 列表
working_directory: 属性是用来定义steps 在哪个目录运行

构建、测试

  1. 检出代码
- checkout
  1. 安装依赖
- run:
    name: Install local dependencies
    command: pip install -r requirements.txt
  1. 缓存依赖(不懂)先记录
- save_cache:
    paths:
    - ./vendor
    key: v1-dependencies-{{ checksum "composer.json" }}
  1. 测试
- run:
    name: Testing
    command: python3 xxxx.py

运行测试,如果任何测试不通过,本次构建将失败

  1. 打包 docker 镜像
- run:
    name: Build image
    command: |
        docker build -t $FULL_IMAGE_NAME .
        mkdir docker-image
        docker save -o docker-image/image.tar $FULL_IMAGE_NAME

打包 docker 镜像并命名为 $FULL_IMAGE_NAME,并将镜像 保存成 tar 归档文件

  1. 运行并简单测试镜像
- run:
    name: Test image
    command: |
      docker run -d -p 8080:80 --name built-image $FULL_IMAGE_NAME
      sleep 10
      docker run --network container:built-image byrnedo/alpine-curl -I --retry 10 --retry-connrefused http://localhost

运行刚才打包好的镜像,然后使用 curl 对打包好的镜像进行简单测试

  1. 保存镜像
- persist_to_workspace:
    root: .
    paths:
    - docker-image

部署

docker 的推送以及部署,涉及docker,以及部署命令,现在为大概了解ci是怎么样的一个过程,如果有可能,将会对自动化的持续集成有重大意义。待补充开发知识后再做实践

你可能感兴趣的:(circle初探)