<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          今天我 devops 了一下

          共 10294字,需瀏覽 21分鐘

           ·

          2021-08-23 13:47

          低并發(fā)編程
          戰(zhàn)略上藐視技術,戰(zhàn)術上重視技術

          今天花了一天時間,優(yōu)化了一下代碼。
          原來是這樣的。
          public int sum(int a, int b) {
              return b + a;
          }
          被我優(yōu)化成了這樣。
          public int sum(int a, int b) {
              return a + b;
          }
          我滿意地看著自己的成果,熟練地用 commit + push 推送到了遠程倉庫 gitee 上。
          git commit -am "修改了底層的計算邏輯,提升了代碼的可讀性,同時對調用方保持兼容和透明"
          git push
          由于我提前在 gitee 開啟了 devops 流水線。

          并且寫好了流水線觸發(fā)規(guī)則以及要做的事情,就在 deploy.yml 這個文件里。
          name: pm-api-display
          # 設置 master 分支在產生代碼 push 時精確觸發(fā)(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 分支上提交代碼時,這個流水線將會被執(zhí)行。
          執(zhí)行分為兩步,這也是我自己提前寫好的。
          第一步,maven 打包并上傳到制品庫 zhipinku。
          - step: mavenbuild@1               # 采用 Maven 編譯環(huán)境
            name: spring-boot-build-step     # 定義一個 ID 標識為 spring-boot-build-step ,名為「編譯構建」的階段
            displayName: '編譯構建'
            inputs:                          # 構建輸入參數設定
              jdkVersion: 8                  # 指定 JDK 環(huán)境版本為 1.8
              mavenVersion: 3.6              # 指定 Maven 環(huán)境版本為 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'        # 構建物打包后的制品名
          制品庫也是我提前創(chuàng)建好的,其實就是一個可以存放文件的地方。

          第二步,將制品庫的文件上傳到目標服務器,用 docker 跑起來。
          - step: agent-deploy@1                                # 定義通過 SA 部署插件
            name: deploy                                        # Step 唯一標識
            dependsOn: spring-boot-build-step
            displayName: '部署發(fā)布'                              # Step 顯示名稱
            inputs:                                             # Step 入參
              hostGroupID: 'aliyun'                       # 指定部署主機組ID
              minComplicating: 0                                # 允許的最小并發(fā)部署數量
              maxComplicating: 2                                # 允許的最大并發(fā)部署數量
              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 這個主機組。
          這個主機組也是我提前配置好的。
          主機組下面有我添加的主機,是我自己購買的阿里云服務器。
          當然,你可以自己再添加一個新主機。
          按照它上面的說明,把命令復制到你的主機上執(zhí)行一下,過一會下面就出現了可添加的主機了。
          制品庫文件上傳到主機并解壓后,隨后執(zhí)行的關鍵命令就是這兩句。
          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 容器。
          當然更專業(yè)的方式是,提前將鏡像上傳到一個統(tǒng)一的鏡像倉庫,這里就直接把本地當做鏡像倉庫了。
          這個 docker 容器對外暴露 8080 端口,并且和主機的 8080 端口綁定。
          瀏覽器訪問 8080 端口,就可以看到最新的效果了。
          從我 commit 代碼并 push 到遠程倉庫后,我就沒有做任何的事情,全部由各種自動執(zhí)行并觸發(fā)后續(xù)操作的流水線幫我們去做,省去了人工部署代碼的麻煩。
          整個過程也可以直觀地看到,包括進度和失敗與成功日志。

          這就是 devops。
          結束得有點突兀,但 devops 就是這樣,之后遇到什么需要手動處理的嫌麻煩的,都可以在流水線上不斷加更加復雜和便捷的自動化腳本,其實是犧牲了配置流水線和維護流水線的時間,但方便了開發(fā)者除了寫代碼本身一切工作。
          另外,現在的基礎設施越來越強大了,就我上面實現的這個小 demo 產生的效果,在幾年前可能是人們夢寐以求但不敢想象的,但現在幾乎是點點點就能實現了。
          springboot 一鍵搭建 web 應用,docker 搭建環(huán)境,各平臺的 devops 集成工具也是越來越傻瓜式,還有無數云原生開發(fā)者以及愛好者在基礎設施層自發(fā)貢獻著力量,相信未來基礎設施層會大有可為!
          瀏覽 77
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜福利亚洲视频 | 影视先锋男人资源网 | 靠逼网站视频 | 色哟哟一区二区三区四区 | 国内毛片毛片毛片毛片毛片毛片毛片 |