DevOps自动化三:简单完整的模板案例(1),你不懂还不学

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

  • 基本流程:下载代码 -> 执行扫描命令
  • 目标:用最简单的方式演示完整模板功能

实现思路

分三步:

  1. 编写project.yaml:描述项目、运行环境、编排模板、环境配置等信息
  2. 定义模块:定义扫描代码的执行脚本
  3. 执行:构造请求参数和执行

应用模板的所有配置文件如下图:

编写project.yaml

包含内容如图

project.yaml内容(编排模板另建文件编写,核心且较复杂):

kind: Project
apiVersion: api/v1
metadata:
  name: sonar # 项目名称
spec:
  engine:
    sonar: |  # 定义编排模板(一般较复杂且核心,因此另建文件管理)
      %{readText "\_projects/sonar.engine.yaml" | indent 6}%
  default:  # 设置全局的默认属性
    env:
      info:
        sonar:  # 设置所有环境的默认sonar地址和token
          url: http://xxx:9090
          token: xxx
  envs:
    prod:
      code:
        branch: master # 按环境设置默认分支
      mvn:
        profile: prod  # maven管理代码 设置profile为prod


编排模板(_projects/sonar.engine.yaml)内容:

first: &first # 扫描的第一部分代码
  sonar:
  - name: common

second: &second # 扫描的第二部分代码
  sonar:
    - name: user

metadata:
  annotations:
    notify-types: "group,personal"
    template: 'sonar:latest'
spec:
  global:
    workflow: # 定义工作流信息
      parallelism: 256  # 并发任务数
      ttlStrategy:
        secondsAfterCompletion: 86400 # 结束工作流保留1天时间
        secondsAfterSuccess: 86400  # 结束工作流保留1天时间
        secondsAfterFailure: 172800 # 失败工作流保留2天时间
    kube: # 定义k8s的运行环境信息
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: app
                    operator: In
                    values:
                      - ops
      tolerations:
        - key: cattle.io/os
          operator: Equal
          value: linux
          effect: "NoSchedule"
        - key: app
          operator: Equal
          value: ops
          effect: "NoSchedule"
  @{- $part := $.params.annotations.part }@
  stages:
    - name: "sonar"
      desc: "代码质量扫描"
      modules:
        @{- if eq $part "first" }@
        <<: \*first  # 当代码仓库数量很多,而资源又有限时分开扫描
        @{- else if eq $part "second" }@
        <<: \*second # 当代码仓库数量很多,而资源又有限时分开扫描
        @{- else if eq $part "bigdata" }@ # 分类扫描:为大数据独立构建工作流
        sonar:
          - name: bigdata
        @{- end }@


定义模块

包含内容如图:

模板内容如下(执行脚本较复杂,也另建文件管理):

sonar:
  \_\_global\_\_: # 模块层的全局配置
    execTmpl: |
 %{readText "code/sca.yaml" | indent 34}%
    default:  # 模块级的默认配置
      type: git # 类型都为git
      config: ""  # 表示不需要生成配置文件
  common:
    labels:
      package: true # 表示公共库
    settings:
      repo: http://xxx/common.git
      mvn:
        api: # 只上传jar包 不打包和构建镜像
          dir: ""
      sonar:
        exclusions: 'src/main/java/xxx/protobuf/\*\*'  # sonar扫描排除pb代码
  user:
    labels:
      role: user  # 属于用户中心;默认(和不填)为公共模块,服务于所有部门;支持多个归属
    settings:
      repo: http://xxx/user.git
      mvn:
        api:
          dir: user-api
        service:
          dir: user-service
  bigdata:
    labels:
      role: bigdata  # 属于大数据中心;默认(和不填)为公共模块,服务于所有部门;支持多个归属
    settings:
      repo: http://xxx/bigdata.git
      branch: dev
      mvn:
        api:
          dir: flink-stream
      sonar:
        exclusions: 'src/main/\*\*/proto/\*\*'

执行脚本模板(code/sca.yaml)如下:

# 分两步:
# 1. 下载代码
# 2. 扫描代码
@{- $env := .env -}@
@{- $repoName := repoName .settings.repo}@
@{- $parent := . }@

- name: git
  image: busybox
  command: [/bin/sh, -c]
  args:
    - |
 echo 下载代码 @{.settings.repo}@ branch:@{ or .settings.tag .settings.branch (render $env.code.branch .) }@

@{- range $type,$val := .settings.mvn}@
- name: mvn-sast-@{$type}@
  depends: [git]
  image: busybox
  command: [/bin/sh, -c]
  args:
    - |
 echo 代码扫描 
 @{- $projName := $repoName }@
 @{- if $val.dir }@
 @{- $projName = concat $projName ":" $val.dir }@
 @{- end}@
 @{- $projName = replace $projName "/" ":" -1 }@
      
      echo 'mvn clean package sonar:sonar -DskipTests -U -P @{$env.mvn.profile}@  \
        @{- if (or $parent.settings.sonar.exclusions "") }@
        -Dsonar.exclusions=@{ $parent.settings.sonar.exclusions }@ \
        @{- end}@
        -Dsonar.projectKey=SAST:@{$projName}@ \
        -Dsonar.projectName=SAST:@{$projName}@ \
        -Dsonar.host.url=@{$env.info.sonar.url}@ \
        -Dsonar.login=@{$env.info.sonar.token}@'

@{- end }@


执行编排

分两步:

  1. yaml定义参数
  2. cli执行

完整的执行脚本(Makefile)如下:

server=http://localhost:8888

# OPS\_USER需设置环境变量,eg:export OPS\_USER=xxx
apply-sonar:
	ops apply -p sonar -s ${server} -u ${OPS\_USER} -f sonar/project.yaml
	ops apply -p sonar -s ${server} -u ${OPS\_USER} -f sonar/definitions/main.yaml
	#扫描common代码
	ops apply -p sonar -s ${server} -u ${OPS\_USER} -f sonar/engines/params-common.yaml
	#扫描user代码
	ops apply -p sonar -s ${server} -u ${OPS\_USER} -f sonar/engines/params-user.yaml
	#扫描大数据代码
	ops apply -p sonar -s ${server} -u ${OPS\_USER} -f sonar/engines/params-bigdata.yaml

扫描第一部分代码(common)

参数定义:



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
![img](https://img-blog.csdnimg.cn/img_convert/21fc33c36ac6e2978ce705640be146a6.png)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**




参数定义:



网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-ebXOvbda-1713118714428)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值