今天我 devops 了一下

发表于 3年以前  | 总阅读数:360 次

今天花了一天时间,优化了一下代码。

原来是这样的。

public int sum(int a, int b) {
    return b + a;
}

被我优化成了这样。

public int sum(int a, int b) {
    return a + b;
}

我满意地看着自己的成果,熟练地用 commit + push 推送到了远程仓库 gitee 上。

git commit -am "修改了底层的计算逻辑,提升了代码的可读性,同时对调用方保持兼容和透明"
git push

由于我提前在 gitee 开启了 devops 流水线

并且写好了流水线触发规则以及要做的事情,就在 deploy.yml 这个文件里。

name: pm-api-display
# 设置 master 分支在产生代码 push 时精确触发(PRECISE)构建
triggers:
  push:                                    
    - matchType: PRECISE
      branch: master
commitMessage: ''
# 构建阶段配置
stages:
  - stage:
      name: spring-boot-stage
      displayName: 'Spring Boot Stage'
      failFast: false
      # 构建步骤配置
      steps:
        # 第一步                               
        - step: mavenbuild@1
        ...
        # 第二步
        - step: agent-deploy@1
        ...

所以当我在 master 分支上提交代码时,这个流水线将会被执行。

执行分为两步,这也是我自己提前写好的。

第一步,maven 打包并上传到制品库 zhipinku。

- step: mavenbuild@1               # 采用 Maven 编译环境
  name: spring-boot-build-step     # 定义一个 ID 标识为 spring-boot-build-step ,名为「编译构建」的阶段
  displayName: '编译构建'
  inputs:                          # 构建输入参数设定
    jdkVersion: 8                  # 指定 JDK 环境版本为 1.8
    mavenVersion: 3.6              # 指定 Maven 环境版本为 3.6
    goals: |                       # 使用 mvnw 打包编译,并将构建的 Jar 包
      mvn clean package
      mkdir output-artifact
      cp target/*.jar output-artifact/
      cp target/start.sh output-artifact/
      cp target/Dockerfile output-artifact/
    uploadArtifact: true                    # 构建完成后是否将构建物作为制品产出,非必填项,与下方上传参数需同时定义
    uploadArtifactOptions:                  # 构建物上传参数,非必填项,与 `uploadArtifact` 参数需同时定义
      artifactPath: './output-artifact'     # 构建完成后要打包的构建物所在路径
      artifactRepository: 'zhipinku'         # 制品库名称,可以理解为一批构建物的集合
      artifactName: 'spring-boot-jar'        # 构建物打包后的制品名

制品库也是我提前创建好的,其实就是一个可以存放文件的地方。

第二步,将制品库的文件上传到目标服务器,用 docker 跑起来。

- step: agent-deploy@1                                # 定义通过 SA 部署插件
  name: deploy                                        # Step 唯一标识
  dependsOn: spring-boot-build-step
  displayName: '部署发布'                              # Step 显示名称
  inputs:                                             # Step 入参
    hostGroupID: 'aliyun'                       # 指定部署主机组ID
    minComplicating: 0                                # 允许的最小并发部署数量
    maxComplicating: 2                                # 允许的最大并发部署数量
    deployArtifact:                                   # 上传的制品项
      - name: 'compiled-artifact'                     # 上传部署的制品名(仅作为显示,无具体作用,允许重复)
        source: build@spring-boot-stage/spring-boot-build-step   # 部署制品文件引用自上游流水线 Stage/Step 的制品
        artifactRepository: 'compiled-artifact'       # 当制品引用自流水线,此参数可忽略
        artifactName: 'server'                        # 当制品引用自流水线,此参数可忽略
        target: /data                                 # 目标机器制品上传目录
        isForce: true                                 # 当目标存在时是否强制覆盖,默认为 true,可选
    script: |                                         # 部署脚本,到目标机器制品上传目录解压并启动构建程序,并通过curl检测
      cd /data
      ls
      tar -zxf spring-boot-jar.tar.gz
      cd output-artifact
      if test -z "$(docker ps -a -f NAME=pm-api -q)"; then echo "new docker run"; else docker rm -f $(docker ps -a -f NAME=pm-api -q); fi
      if test -z "$(docker images pm-api:0.1 -aq)"; then echo "new docker images"; else docker rmi -f $(docker images pm-api:0.1 -aq); fi
      docker build -t pm-api:0.1 .
      docker run -dit --name pm-api -p 8080:8080 pm-api:0.1
      echo "Deploy Success"
      sleep 10
      curl 127.0.0.1:8080

看,之前打包在制品库的文件 spring-boot-jar.tar.gz 会被上传到 aliyun 这个主机组。这个主机组也是我提前配置好的。 主机组下面有我添加的主机,是我自己购买的阿里云服务器。 当然,你可以自己再添加一个新主机。 按照它上面的说明,把命令复制到你的主机上执行一下,过一会下面就出现了可添加的主机了。

制品库文件上传到主机并解压后,随后执行的关键命令就是这两句。

docker build -t pm-api:0.1 .
docker run -dit --name pm-api -p 8080:8080 pm-api:0.1

这是首先用 docker build 构建一个镜像,然后用 docker run 启动这个镜像,生成一个 docker 容器。

当然更专业的方式是,提前将镜像上传到一个统一的镜像仓库,这里就直接把本地当做镜像仓库了。

这个 docker 容器对外暴露 8080 端口,并且和主机的 8080 端口绑定。浏览器访问 8080 端口,就可以看到最新的效果了。

从我 commit 代码并 push 到远程仓库后,我就没有做任何的事情,全部由各种自动执行并触发后续操作的流水线帮我们去做,省去了人工部署代码的麻烦。

整个过程也可以直观地看到,包括进度和失败与成功日志。

这就是 devops

结束得有点突兀,但 devops 就是这样,之后遇到什么需要手动处理的嫌麻烦的,都可以在流水线上不断加更加复杂和便捷的自动化脚本,其实是牺牲了配置流水线和维护流水线的时间,但方便了开发者除了写代码本身一切工作。

另外,现在的基础设施越来越强大了,就我上面实现的这个小 demo 产生的效果,在几年前可能是人们梦寐以求但不敢想象的,但现在几乎是点点点就能实现了。

springboot 一键搭建 web 应用,docker 搭建环境,各平台的 devops 集成工具也是越来越傻瓜式,还有无数云原生开发者以及爱好者在基础设施层自发贡献着力量,相信未来基础设施层会大有可为!

本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/vZhImjCED9kxAUAHT-l3qw

 相关推荐

刘强东夫妇:“移民美国”传言被驳斥

京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。

发布于:1年以前  |  808次阅读  |  详细内容 »

博主曝三大运营商,将集体采购百万台华为Mate60系列

日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。

发布于:1年以前  |  770次阅读  |  详细内容 »

ASML CEO警告:出口管制不是可行做法,不要“逼迫中国大陆创新”

据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。

发布于:1年以前  |  756次阅读  |  详细内容 »

抖音中长视频App青桃更名抖音精选,字节再发力对抗B站

今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。

发布于:1年以前  |  648次阅读  |  详细内容 »

威马CDO:中国每百户家庭仅17户有车

日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。

发布于:1年以前  |  589次阅读  |  详细内容 »

研究发现维生素 C 等抗氧化剂会刺激癌症生长和转移

近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。

发布于:1年以前  |  449次阅读  |  详细内容 »

苹果据称正引入3D打印技术,用以生产智能手表的钢质底盘

据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。

发布于:1年以前  |  446次阅读  |  详细内容 »

千万级抖音网红秀才账号被封禁

9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...

发布于:1年以前  |  445次阅读  |  详细内容 »

亚马逊股东起诉公司和贝索斯,称其在购买卫星发射服务时忽视了 SpaceX

9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。

发布于:1年以前  |  444次阅读  |  详细内容 »

苹果上线AppsbyApple网站,以推广自家应用程序

据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。

发布于:1年以前  |  442次阅读  |  详细内容 »

特斯拉美国降价引发投资者不满:“这是短期麻醉剂”

特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。

发布于:1年以前  |  441次阅读  |  详细内容 »

光刻机巨头阿斯麦:拿到许可,继续对华出口

据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。

发布于:1年以前  |  437次阅读  |  详细内容 »

马斯克与库克首次隔空合作:为苹果提供卫星服务

近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。

发布于:1年以前  |  430次阅读  |  详细内容 »

𝕏(推特)调整隐私政策,可拿用户发布的信息训练 AI 模型

据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。

发布于:1年以前  |  428次阅读  |  详细内容 »

荣耀CEO谈华为手机回归:替老同事们高兴,对行业也是好事

9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI操控无人机能力超越人类冠军

《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI生成的蘑菇科普书存在可致命错误

近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。

发布于:1年以前  |  420次阅读  |  详细内容 »

社交媒体平台𝕏计划收集用户生物识别数据与工作教育经历

社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”

发布于:1年以前  |  411次阅读  |  详细内容 »

国产扫地机器人热销欧洲,国产割草机器人抢占欧洲草坪

2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。

发布于:1年以前  |  406次阅读  |  详细内容 »

罗永浩吐槽iPhone15和14不会有区别,除了序列号变了

罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。

发布于:1年以前  |  398次阅读  |  详细内容 »
 相关文章
Android插件化方案 5年以前  |  237229次阅读
vscode超好用的代码书签插件Bookmarks 2年以前  |  8063次阅读
 目录