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
集成状态也会出现在拉取请求屏幕上,以显示所有测试都已通过:
部署密钥和用户密钥
如果使用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/hello-build@0.0.7 # 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 在哪个目录运行
构建、测试
- 检出代码
- checkout
- 安装依赖
- run:
name: Install local dependencies
command: pip install -r requirements.txt
- 缓存依赖(不懂)先记录
- save_cache:
paths:
- ./vendor
key: v1-dependencies-{{ checksum "composer.json" }}
- 测试
- run:
name: Testing
command: python3 xxxx.py
运行测试,如果任何测试不通过,本次构建将失败
- 打包 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 归档文件
- 运行并简单测试镜像
- 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 对打包好的镜像进行简单测试
- 保存镜像
- persist_to_workspace:
root: .
paths:
- docker-image
部署
docker 的推送以及部署,涉及docker,以及部署命令,现在为大概了解ci是怎么样的一个过程,如果有可能,将会对自动化的持续集成有重大意义。待补充开发知识后再做实践