在 IT 領(lǐng)域,自動(dòng)化無疑已成為提高工作效率和減少人為錯(cuò)誤的關(guān)鍵。Sealos 作為一個(gè)強(qiáng)大的云操作系統(tǒng),已經(jīng)為許多企業(yè)和開發(fā)者提供了穩(wěn)定可靠的服務(wù)。與此同時(shí),隨著技術(shù)不斷發(fā)展,集成更多的功能和服務(wù)變得尤為重要??紤]到這一點(diǎn),本文將介紹如何利用 GitHub Action 來進(jìn)一步豐富 Sealos 在應(yīng)用更新方面的自動(dòng)化體驗(yàn)。
原文鏈接:https://forum.laf.run/d/1059
GitHub Action 介紹
在現(xiàn)代軟件開發(fā)中,持續(xù)集成 (CI) 和持續(xù)部署/交付 (CD) 是至關(guān)重要的環(huán)節(jié)。它們可以幫助開發(fā)團(tuán)隊(duì)高效地驗(yàn)證代碼的質(zhì)量并確保其準(zhǔn)確無誤地交付到生產(chǎn)環(huán)境中。GitHub Action 正是在這個(gè)背景下誕生的 CI/CD 工具,致力于為開發(fā)者提供一種簡(jiǎn)潔且高效的自動(dòng)化工具。
簡(jiǎn)單來說,GitHub Action 是一個(gè) CI/CD 工具,它允許開發(fā)者在 GitHub 倉(cāng)庫(kù)中自動(dòng)執(zhí)行多種任務(wù),從而極大地提高了工作效率。它可以自動(dòng)進(jìn)行代碼的構(gòu)建、測(cè)試和部署等關(guān)鍵步驟,確保在每次代碼更新或合并請(qǐng)求中都能夠進(jìn)行快速而準(zhǔn)確的驗(yàn)證和交付。
但 GitHub Action 不僅僅是一個(gè)傳統(tǒng)的 CI/CD 工具。其獨(dú)特之處在于,它與 GitHub 倉(cāng)庫(kù)實(shí)現(xiàn)了無縫集成。這意味著開發(fā)者無需離開 GitHub 環(huán)境,就能夠配置和管理整個(gè)自動(dòng)化流程,極大地簡(jiǎn)化了操作過程。此外,由于 GitHub 是目前世界上最大的代碼托管平臺(tái),這種深度整合使得大量開發(fā)者能夠輕松上手并利用 GitHub Action 進(jìn)行自動(dòng)化操作。
Sealos:同時(shí)面向初學(xué)者與專家
Sealos 的可視化桌面環(huán)境極大簡(jiǎn)化了用戶對(duì)分布式應(yīng)用的管理和維護(hù),用戶不再需要進(jìn)行復(fù)雜的操作或擁有深厚的技術(shù)背景就能輕松管理分布式應(yīng)用。通過減少?gòu)?fù)雜性和提供直觀的界面,Sealos 顯著地降低了用戶的心智負(fù)擔(dān),使其可以更加集中地完成工作。
Sealos 海外集群:https://cloud.sealos.io
Sealos 國(guó)內(nèi)集群:https://cloud.sealos.top
但 Sealos 不僅僅適用于普通用戶,對(duì)于云原生領(lǐng)域的專業(yè)人員,提供了終端,您可以在終端中執(zhí)行各種命令行操作。
同時(shí)還提供了 kubeconfig 文件的下載功能。擁有這個(gè)文件,專業(yè)人員可以將其下載到本地電腦,并使用 kubectl 命令行工具來直接管理和操作 Sealos 中的應(yīng)用資源。這為那些希望深入管理和配置的云原生專家們提供了極大的靈活性。
有了 kubeconfig 之后,我們可以用來實(shí)現(xiàn)各種神奇的功能,比如本文將要介紹的自動(dòng)更新應(yīng)用鏡像。
GitHub Action 自動(dòng)構(gòu)建鏡像
對(duì)于自己開發(fā)的應(yīng)用,要想自動(dòng)更新應(yīng)用的鏡像,前提是得先自動(dòng)構(gòu)建鏡像。
GitHub Action 完美集成在 GitHub 平臺(tái)上,無需額外配置或切換到其他平臺(tái)即可基于源碼來構(gòu)建鏡像。對(duì)于公開的倉(cāng)庫(kù),GitHub 提供了一定的免費(fèi)計(jì)算額度,適合小型項(xiàng)目或個(gè)人開發(fā)者。
使用 GitHub Action 自動(dòng)構(gòu)建并推送鏡像的流程如下:
-
創(chuàng)建工作流文件:在你的 GitHub 倉(cāng)庫(kù)中創(chuàng)建一個(gè)
.github/workflows
目錄,并在該目錄下創(chuàng)建一個(gè)工作流配置文件,例如docker_build.yml
。 -
配置 Secret:為了安全地推送鏡像到 Docker Hub 和 ghcr.io,你需要在 GitHub 倉(cāng)庫(kù)的 "Secrets" 部分配置相應(yīng)的認(rèn)證信息。通常,這包括你的 Docker Hub 用戶名、密碼,以及 ghcr.io 的 token。例如:
-
編寫工作流腳本:在配置文件中,定義所需的觸發(fā)條件(如
push
到master
分支)、運(yùn)行環(huán)境以及執(zhí)行的命令。示例:
# 定義工作流的名稱 name: Build and Push Docker Image # 定義觸發(fā)工作流的條件 on: workflow_dispatch: # 允許手動(dòng)觸發(fā)工作流 push: # 當(dāng)有代碼推送事件發(fā)生時(shí) branches: - master # 只有推送到 master 分支時(shí)才觸發(fā) # 定義工作流的任務(wù) jobs: build-image: # 定義運(yùn)行此任務(wù)的環(huán)境:最新版本的 ubuntu runs-on: ubuntu-latest # 定義任務(wù)中的步驟 steps: # 檢出代碼。只檢出最新的1次提交 - uses: actions/checkout@v3 with: fetch-depth: 1 # 設(shè)置 QEMU 模擬器,這通常用于多平臺(tái)的 Docker 構(gòu)建 - name: Set up QEMU uses: docker/setup-qemu-action@v2 # 設(shè)置 Docker Buildx,用于構(gòu)建多平臺(tái)的 Docker 鏡像 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 # 登錄到 Docker Hub - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} # 使用存儲(chǔ)在 GitHub Secrets 中的 DockerHub 用戶名 password: ${{ secrets.DOCKER_PASSWORD }} # 使用存儲(chǔ)在 GitHub Secrets 中的 DockerHub 密碼 # 登錄到 ghcr.io (GitHub Container Registry) - name: Login to ghcr.io uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} # 使用倉(cāng)庫(kù)的擁有者名作為用戶名 password: ${{ secrets.GHCR_TOKEN }} # 使用存儲(chǔ)在 GitHub Secrets 中的 ghcr.io 的訪問令牌 # 構(gòu)建并推送 Docker 鏡像到 docker.io 和 ghcr.io - name: Build and push Docker images to docker.io and ghcr.io uses: docker/build-push-action@v2 with: platforms: linux/amd64 # 設(shè)置構(gòu)建平臺(tái)為 linux/amd64 context: . # Docker 構(gòu)建上下文設(shè)置為當(dāng)前目錄 push: true # 設(shè)置為真以確保構(gòu)建后的鏡像被推送 tags: | # 定義推送的標(biāo)簽 ${{ secrets.DOCKER_USERNAME }}/xxxx:latest ghcr.io/${{ github.repository_owner }}/xxxx:latest
-
觸發(fā)工作流:每當(dāng)符合觸發(fā)條件的事件發(fā)生時(shí),GitHub Action 就會(huì)自動(dòng)執(zhí)行定義的工作流,從而構(gòu)建和推送 Docker 鏡像。
-
監(jiān)控與調(diào)試:你可以在 GitHub 倉(cāng)庫(kù)的 "Actions" 標(biāo)簽頁(yè)中,查看工作流的執(zhí)行情況,包括日志、狀態(tài)和結(jié)果。
使用 GitHub Action 自動(dòng)構(gòu)建鏡像不僅可以簡(jiǎn)化開發(fā)流程,還可以確保每次代碼的更改都得到了有效且一致的處理,大大提高了開發(fā)效率和代碼質(zhì)量。同時(shí)通過使用 GitHub 的 secrets 功能,還確保了認(rèn)證信息的安全。
自動(dòng)更新 Sealos 應(yīng)用鏡像
現(xiàn)在我們來到了最后一步。要想自動(dòng)更新鏡像,首先我們來回顧一下整個(gè)流程:
首先,當(dāng)你的應(yīng)用代碼更新并合并到主分支時(shí),GitHub Action 會(huì)自動(dòng)觸發(fā)構(gòu)建鏡像的任務(wù)。構(gòu)建完成后,新的應(yīng)用鏡像會(huì)被推送到鏡像倉(cāng)庫(kù)。
接下來,你需要在 GitHub Action 中調(diào)用 kubectl,更新 Sealos 集群中對(duì)應(yīng)的 Deployment 或 StatefulSet。這樣,Sealos 集群的應(yīng)用就會(huì)使用新的鏡像版本進(jìn)行滾動(dòng)更新。
我們可以利用一個(gè)特定的 GitHub Action:actions-hub/kubectl
。這個(gè) Action 提供了在 GitHub Actions 工作流中執(zhí)行 kubectl
命令的能力。
以下是如何在你的 GitHub Actions 工作流中使用 actions-hub/kubectl
來更新 Sealos 應(yīng)用鏡像:
設(shè)置 kubeconfig
為了讓 kubectl
能夠與你的 Sealos 或其他 Kubernetes 集群進(jìn)行通信,你需要提供一個(gè)有效的 Kubeconfig,Sealos 的 kubeconfig 可以在桌面中下載。
下載完成后,你需要將其中的內(nèi)容轉(zhuǎn)換為 base64 格式:
$ cat kubeconfig.yaml | base64
然后將轉(zhuǎn)換后的內(nèi)容存儲(chǔ)到 GitHub 倉(cāng)庫(kù)的 Secret 中,假設(shè) Secret 名為 KUBE_CONFIG
。Secret 配置方式參考上文。
使用 actions-hub/kubectl
現(xiàn)在您只需要在前面自動(dòng)構(gòu)建鏡像的工作流腳本中添加一個(gè)新的 job 來調(diào)用 kubectl 即可。例如:
# 定義工作流的名稱
name: Build and Push Docker Image
# 定義觸發(fā)工作流的條件
on:
workflow_dispatch: # 允許手動(dòng)觸發(fā)工作流
push: # 當(dāng)有代碼推送事件發(fā)生時(shí)
branches:
- master # 只有推送到 master 分支時(shí)才觸發(fā)
# 定義工作流的任務(wù)
jobs:
build-image:
...
...
deploy:
needs: build-image
runs-on: ubuntu-latest
if: github.repository == '<your_repository>'
steps:
- name: Checkout code
uses: actions/checkout@v3
- uses: actions-hub/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: rollout restart deployment my-deployment
在這個(gè)例子中,我們更新一個(gè)名為 my-deployment
的 Deployment,更新的方法非常簡(jiǎn)單:直接滾動(dòng)重啟。因?yàn)?Deployment 的 imagePullPolicy
默認(rèn)都是 Always,且鏡像 tag 保持 latest 不變,所以直接重啟就會(huì)拉取最新的鏡像。
如果您的鏡像每次構(gòu)建的 tag 都不同,那可以使用這個(gè)命令來更新鏡像:
...
with:
args: set image deployment/my-deployment my-container=my-repo/my-image:<tag>
在這個(gè)例子中,我們更新一個(gè)名為 my-deployment
的 Deployment,將 my-container
的鏡像設(shè)置為 my-repo/my-image:<tag>
。其中 tag 可以通過環(huán)境變量的形式從構(gòu)建鏡像的 job 中獲取。文章來源:http://www.zghlxwxcb.cn/news/detail-711543.html
如果您的應(yīng)用不是自己開發(fā)的,且這個(gè)應(yīng)用已提供了鏡像,那么您可以設(shè)計(jì)一個(gè)定時(shí)觸發(fā)的工作流,工作流的任務(wù)是檢測(cè)鏡像倉(cāng)庫(kù)(例如 Docker Hub)的鏡像有沒有更新,如果更新了,就調(diào)用 kubectl 來更新鏡像。文章來源地址http://www.zghlxwxcb.cn/news/detail-711543.html
到了這里,關(guān)于使用 GitHub Action 自動(dòng)更新 Sealos 集群的應(yīng)用鏡像的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!