前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Argo CD系列视频图文版之Github 实现全自动化 CICD

Argo CD系列视频图文版之Github 实现全自动化 CICD

作者头像
LinuxSuRen
发布2022-03-31 14:02:03
6370
发布2022-03-31 14:02:03
举报
文章被收录于专栏:JenkinsJenkins

配套视频

http://mpvideo.qpic.cn/0bc3oiaawaaa7mac2jveojqva4wdbnzaacya.f10002.mp4?dis_k=0377bc3b10a320fa1c8a85ee40d76ea8&dis_t=1648706234&vid=wxv_2156802563935993863&format_id=10002&support_redirect=0&mmversion=false

开篇

本期视频,我们来解决上节课发现的两个问题。问题一是业务源码和部署清单放在同一个仓库,耦合严重。问题二,需要实现 CICD 的自动化

第一个问题很简单,业务源码和部署清单拆分成两个仓库,我们只需要建立新建两个 Github 仓库,分别把 flask-demokustomize 目录移过去就可以啦;

flask-demo[1]

flask-demo-kustomize[2]

第二个问题我们基于 Github Action 来实现。对于使用 Gitlab 的企业用户,也可以通过 Gitlab-ci 实现;这部分内容,大家可以留言或加群咨询。Github Action,是 Github 推出的工作流引擎,可以帮助开发者实现非常多的自动化操作。

这节课的重点,在于如何配置 Github Action,实现全自动持续集成,持续交付。开发人员只需提交代码,合并后的动作,全自动处理。

我们先来解释整体的 CICD 工作流。

流程规划

flask-demo 提交代码后,自动构建容器镜像,并将制品推送到 docker hub 中,再触发 flask-demo-kustomize action,修改部署清单仓库中的镜像地址。ArgoCD 会每隔 3 分钟自动检查部署清单,应用最新的配置。

#todo 流程图

源码仓库工作流

在配置 Github Action 之前,我们还要做一些准备工作。

1. 添加 docker hub 账号密码

为不在工作流中暴露认证信息,需要将 docker hub 账号密码以 secret 的形式存储在源码仓库中。

账号密钥

2. 添加触发 CI 的 Token

我们需要源码仓库的工作流自动触发部署清单仓库中的工作流,此时需要创建具有 workflow 权限的 Personal access token。按照步骤 1 同样存储在 secret 中。

person token

3. 创建 github workflow

该工作流由下面几个步骤组成:

  1. 下载源码到当前目录
  2. 登录 docker hub
  3. 打包源码镜像并推送到镜像仓库
  4. 触发 flask-demo-customize 的工作流
name: CI
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      - name: Docker Login
        uses: docker/login-action@v1.10.0
        with:
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
          logout: true

      - name: build image
        run: |
          make image
          docker tag flask-demo:latest ${{ secrets.USERNAME }}/flask-demo:${{ github.sha }}
          docker push ${{ secrets.USERNAME }}/flask-demo:${{ github.sha }}

      - name: Trigger CI
        uses: InformaticsMatters/trigger-ci-action@1.0.1
        with:
          ci-owner: pyfs
          ci-repository: flask-demo-kustomize
          ci-ref: refs/heads/master
          ci-user: pyfs
          ci-user-token: ${{ secrets.CI_TOKEN }}
          ci-name: CI
          ci-inputs: >-
            image=${{ secrets.USERNAME }}/flask-demo
            sha-tag=${{ github.sha }}

部署清单工作流

此工作比较简单,由以下几个步骤组成:

  1. 下载部署清单到当前目录
  2. 执行 kustomize edit set image 命令修改镜像
  3. 提交对 kustomization.yaml 文件的变更
name: CI
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  workflow_dispatch:
    inputs:
      image:
        required: true
        description: 'docker image name'
      sha-tag:
        required: true
        description: 'docker image tag'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
     if: ${{ github.event.inputs.image }}
      
      - name: kustomize edit
     if: ${{ github.event.inputs.image }}
        run: |
          curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash
          kustomize edit set image ${{ github.event.inputs.image }}:${{ github.event.inputs.sha-tag }}
          rm -f kustomize
      
      - name: Git Commit/Push Changes
        uses: actions-x/commit@v2
  if: ${{ github.event.inputs.image }}
        with:
          message: "kustomize set image to ${{ github.event.inputs.image }}:${{ github.event.inputs.sha-tag }}"

配置 ArgoCD 应用

配置 ArgoCD 应用并演示自动化执行效果

结束语

通过仓库拆分和 Github Action 的工作流编排,我们实现了全自动化的 GitopsArgoCD 官方强烈推荐的最佳实践,也差不多是这样的。但是,我们仍然有问题需要解决,这也是 Gitops 中的一个重点。

观察我们的配置清单仓库,会发现 secret 中存储的是数据库连接信息,这么重要的信息,竟然只用 base64 加密就直接存储在代码仓库中。不但加密方式可逆,而且加密方法还是全网都知道的。

虽然 git 仓库作为我们实践 Gitops 的单一可信任源,但在 git 仓库中泄露敏感数据的案例却比比皆是。所以如何处理 Secret 中的数据加密问题,关系到 Gitops 项目能否成功落地。

ArgoCD 社区,给出了多种解决方案,但没有尽善尽美的银弹。下期视频,咱们找一种方案研究研究。

参考资料

[1]flask-demo: git@github.com:pyfs/flask-demo.git

[2]flask-demo-kustomize: https://github.com/pyfs/flask-demo-kustomize

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Jenkins 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配套视频
  • 开篇
  • 流程规划
  • 源码仓库工作流
    • 1. 添加 docker hub 账号密码
      • 2. 添加触发 CI 的 Token
        • 3. 创建 github workflow
        • 部署清单工作流
        • 配置 ArgoCD 应用
        • 结束语
          • 参考资料
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档