前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CircleCI 自动化部署

CircleCI 自动化部署

原创
作者头像
发声的沉默者
修改2021-06-17 11:54:51
9640
修改2021-06-17 11:54:51
举报
文章被收录于专栏:江歌闲谈江歌闲谈

什么是 CircleCI

CircleCI 是一个持续集成/持续部署的服务,开源项目可以免费使用,他的价格取决于你需要并发构建实例的数量,单个实例是免费的。

添加 ssh 密钥

$ ssh host_name

$ cd ~/.ssh/

$ ssh-keygen -t rsa创建公钥(.pub)和私钥

$ cat id_rsa 复制私钥所有内容

要使 CircleCI 能够将文件发送到服务器,单击"构建"屏幕上项目名称旁边的 cog 来访问项目的构建设置。在设置屏幕上,找到权限部分下的 SSH 权限链接。单击“ 添加 SSH 密钥”按钮,然后添加服务器的主机名和私钥的内容

gifhome_2878x1580
gifhome_2878x1580

要将此密钥导入 CI 环境,我们使用 add_ssh_keys 添加 SSH 密钥后,CircleCI 在设置屏幕上显示密钥的指纹。复制此指纹并将其插入上述命令,我们的构建环境现在可以使用该密钥。

image
image

提供 Hostkey 进行验证

CircleCI 服务器尝试连接到您的主机时,它可能会提示您验证主机密钥。提示是自动化的氪星石:CI 环境将无限期挂起,等待用户给出响应。可以禁用此验证,但将正确的密钥添加到 known_hosts 文件是一个更好的解决方案。CircleCI 没有用于添加主机密钥的语义解决方案,但一种选择是将主机密钥添加为环境变量。要添加环境变量,请转到项目设置,然后单击"构建设置"下的"环境变量”链接。单击“ 添加变量”按钮,然后添加一个以 REMOTE_HOSTKEY 服务器主机密钥内容命名的新值。要获取主机密钥,请在终端中运行以下

image
image

复制下ip ecdsa-sha2-nistp256 这个开头的所有内容,$ cd ~/.ssh/粘贴到 known_hosts

新建环境变量

在这个页面进行新建环境变量

image
image
代码语言:txt
复制
$REMOTE_HOSTKEY   //刚复制的主机密钥
$SSH_USER     // 服务器用户名
$SSH_IP           // 服务器ip
image
image

然后我们可以在构建环境中使用此变量将主机密钥添加到 known_hosts 文件中

部署命令

image
image

剩下的就是将文件传输到远程服务器上

针对 master 分支进行

最终配置文件

代码语言:txt
复制
version: 2.0
jobs:
  build:
    docker:
      - image: circleci/node:latest
    working_directory: ~/circleci-demo-workflows
    steps:
      - checkout
      - run: sudo npm install -g npm@6
      - run: npm install
      - save_cache:
          key: v1-dependencies-{{ checksum "package.json" }}
          paths:
            - node_modules
      - run: npm run build
      - run: echo '部署开始'
      - run: sudo apt-get update && sudo apt-get install rsync
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "package.json" }}
            - v1-dependencies
      - add_ssh_keys:
          fingerprints:
            - "bd:dd:23:90:d7:86:80:d8:92:31:1b:41:09:09:27:87"
      - run: echo $REMOTE_HOSTKEY >> ~/.ssh/known_hosts
      - deploy:
          name: deploy
          command: |
            if [ "${CIRCLE_BRANCH}" = "master" ]; then
              rsync -avce ssh build $SSH_USER@$SSH_IP:/data/corki-ui-web/
            else
              echo "Not master branch, dry run only"
            fi
      - run: echo '部署完毕'
workflows:
  version: 2
  scheduled-workflow:
    triggers:
      - schedule:
          cron: "0 0 * * *"
          filters:
            branches:
              only: master
    jobs:
      - build

代码流程:

  • 安装特定版本 npmsudo npm install -g npm@6
  • 安装 npmnpm install
  • 缓存文件 save_cache
  • 打包 npm run build
  • 安装传输命令 sudo apt-get update && sudo apt-get install rsync
  • 恢复缓存 key restore_cache,需先缓存
  • 添加 ssh 密钥 add_ssh_keys
  • 推送文件到服务器 deploy

部署

image
image
  • 选择环境
  • 选择 docker 镜像(这里以 node 为例)
  • 开始构建

例子

image
image

总结

超级简单有木有,部署完成后,只要 master 分支有了改动,就会自动发布,哈哈哈。再也不用去手动发布了。

博客

欢迎关注我的博客

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 CircleCI
  • 添加 ssh 密钥
  • 提供 Hostkey 进行验证
  • 新建环境变量
  • 部署命令
  • 最终配置文件
  • 部署
  • 例子
  • 总结
  • 博客
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档