前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >镜像发布后自动更新文档网站

镜像发布后自动更新文档网站

作者头像
LinuxSuRen
发布2024-04-16 16:06:47
680
发布2024-04-16 16:06:47
举报
文章被收录于专栏:JenkinsJenkins

比较常见的一个场景是:

对于上面的流水线可以采用 Jenkins、Argo Workflow 或者其他类似工具。至于流水线的自动触发,可以借助代码仓库的 WebHook 或者像 Argo Events 这种事件驱动的框架。

可以选用 Harbor 作为镜像仓库,它包括了:镜像同步、镜像清理、镜像代理、统一身份认证等企业级功能。当然,你需要自己想办法来确保其数据库、缓存的高可用。

最后的环境更新环节,除了可以直接登录环境操作以外,可以采用 Argo CD 这种 GitOps 的方式来维护,也可以采用镜像更新控制器来实现自动更新。Argo 和 Flux 分别都提供了自己的方案:

  • Image Updater
  • Image refector and automation

Flux

下面是 Flux 提供的方案:

这里有两个组件,分别负责:扫描镜像、更新代码仓库。

以 Kubernetes 应用为例,如果把 Deployment、ConfigMap 等清单文件与业务代码保存在同一个代码仓库中的话,需要注意避免镜像更新导致的更新死循环。这种情况,可以在设置 commit message 和事件触发的地方约定一个特殊字符串,下面是 ImageUpdateAutomation 的配置:

代码语言:javascript
复制
apiVersion: image.toolkit.fluxcd.io/v1beta1
kind: ImageUpdateAutomation
metadata:
  name: dev-docs
  namespace: default
spec:
  interval: 3m
  sourceRef:
    kind: GitRepository
    name: dev-docs
  git:
    checkout:
      ref:
        branch: main
    commit:
      author:
        email: someone@github.com
        name: someone
      messageTemplate: 'skip-ci: {{range .Updated.Images}}{{println .}}{{end}}'
    push:
      branch: main
  update:
    path: ./kubernetes
    strategy: Setters

下面是 Argo Events 提供的 Sensor 功能的配置:

代码语言:javascript
复制
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: dev-docs-release
  namespace: default
spec:
  dependencies:
    - name: push
      eventSourceName: default
      eventName: push
      filters:
        exprLogicalOperator: "and"
        data:
          - path: body.object_kind
            type: string
            value:
              - push
          - path: body.project.name
            type: string
            value:
              - dev-docs
        exprs:
          - expr: ref =~ "refs/heads/release-" || ref == "refs/heads/main"
            fields:
              - name: ref
                path: body.ref
          - expr: msg !~ "skip-ci"
            fields:
              - name: msg
                path: commits[0].message

  triggers:
    - template:
        name: trigger
        argoWorkflow:
          operation: submit
          source:
            resource:
              apiVersion: argoproj.io/v1alpha1
              kind: Workflow
              metadata:
                generateName: dev-docs-push-
              spec:
                arguments:
                  parameters:
                    - name: branch
                workflowTemplateRef:
                  name: dev-docs
          parameters:
            - src:
                dependencyName: push
                dataKey: body.ref
              dest: spec.arguments.parameters.0.value

如果希望在某个环境中始终部署主干分支的版本,可以考虑以时间戳为镜像 Tag,并设置 Harbor 仅保留最近(例如:30 天)内推送的镜像。

以下是镜像更新的配置:

代码语言:javascript
复制
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
  name: dev-docs
  namespace: default
spec:
  imageRepositoryRef:
    name: dev-docs
  policy:
    alphabetical:
      order: asc

更多 DevOps 相关教程,请访问:https://github.com/devops-ws

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

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

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

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

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