您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何使用CODING DevOps部署Serverless 應用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
CI/CD 已成為軟件開發環節的標配,倡導將一切自動化,這里期待在代碼提交到 master 分支后就會自動部署應用。
因為代碼 托管在 GitHub 上,首先考慮的是使用 GitHub Actions 部署應用。
然而在使用 GitHub Actions 時,總是會超時失敗,這是因為 GitHub Actions 官方托管服務器在國外,在部署到國內的環境時,網絡延遲很大,從而導致失敗。
于是暫時放棄使用 GitHub Actions 部署戰點,并考慮使用國內的免費 CI/CD 工具,在調研后選擇了騰訊旗下的 CODING DevOps。
考慮到國內拉取 GitHub 代碼會比較慢, 這里首先使用 GitHub Actions 將代碼自動同步到 coding.net 的代碼倉庫,然后再使用 CODING 持續集成進行自動化部署。
GitHub Actions 有一個特別好的功能是:有一個 GitHub Marketplace,目前有 7000 多個 Action,開發者可以從中挑選適合自己的 Action。
開發者也可以定義自己的 Action,也可以將自己的 Action 發布到 GitHub Marketplace。
這里定制了一個 Action 用于同步代碼到 CODING: https://github.com/marketplace/actions/sync-repo-to-coding
每個倉庫可以配置多個 workflow,在 GitHub 倉庫的 .github/workflows 下添加用來定義 workflow 的 YAML 文件即可。
同步代碼到 CODING 的 workflow 的 YAML 文件內容如下:
name: sync-to-coding on: push: branches: - master # Set a branch to deploy jobs: sync: runs-on: ubuntu-latest steps: - name: Sync to CODING uses: serverlesslife-cn/sync-repo-to-coding@master env: # 在 GitHub Settings->Secrets 配置 CODING_PRIVATE_KEY SSH_PRIVATE_KEY: ${{ secrets.CODING_PRIVATE_KEY }} with: # 注意替換為你的 GitHub 源倉庫地址 github-repo: "git@github.com:serverlesslife-cn/serverlesslife.git" # 注意替換為你的 CODING 目標倉庫地址 coding-repo: "git@e.coding.net:donghui1/serverlesslife/serverlesslife.git"
每次提交代碼到 master 分支后,都會觸發 sync-to-coding 任務,Actions 日志截圖如下:
CODING 構建部署過程中需要用到 Docker 鏡像,如:hugo 和 serverless,分別用于構建與部署階段。
從 DockerHub 挑選了下面符合要求的兩個鏡像:
https://hub.docker.com/r/cibuilds/hugo/
https://hub.docker.com/r/amaysim/serverless/
然后從 DockerHub 下載到本地,再手動上傳到了 CODING 的 Docker 制品倉庫。
這樣在構建過程中可以快速下載鏡像(如果從 DockerHub 下載,不僅速度慢,還有下載次數限制)。
CODING 持續集成功能是基于 Jenkins 二次開發的,支持 Jenkins Pipeline。
如果熟悉 Jenkins,那么上手 CODING 持續集成就會很容易。
值得一提的是 CODING 持續集成提供了圖形化編輯生成 Jenkinsfile 的功能,大大降低了使用成本。
當然圖形化編輯器也有美中不足之處,它不會支持所有 Jenkins 步驟。
下面是使用圖形化編輯器可視化編輯 Jenkins Pipeline 的截圖:
添加所需的環境變量:
這里需要添加兩個環境變量:TENCENT_SECRET_ID、TENCENT_SECRET_KEY,用于登錄騰訊云。
為了避免密碼明文顯示在控制臺,添加這里的環境變量時要勾選「保密」。
最終的 Jenkinsfile 內容如下:
pipeline { agent any stages { stage('Checkout') { steps { checkout([ $class: 'GitSCM', branches: [[name: GIT_BUILD_REF]], userRemoteConfigs: [[ url: GIT_REPO_URL, credentialsId: CREDENTIALS_ID ]]]) } } stage('EnvSetUp') { steps { sh 'touch .env' sh 'echo TENCENT_SECRET_ID=${TENCENT_SECRET_ID} >> .env' sh 'echo TENCENT_SECRET_KEY=${TENCENT_SECRET_KEY} >> .env' } } stage('Build') { agent { docker { reuseNode 'true' registryUrl 'https://donghui1-docker.pkg.coding.net' registryCredentialsId "${env.DOCKER_REGISTRY_CREDENTIALS_ID}" image 'serverlesslife/hugo/hugo:latest' } } steps { sh 'HUGO_ENV=production hugo' } } stage('Deploy') { agent { docker { reuseNode 'true' registryUrl 'https://donghui1-docker.pkg.coding.net' registryCredentialsId "${env.DOCKER_REGISTRY_CREDENTIALS_ID}" image 'serverlesslife/serverless/serverless:2.28.0' args '-e TZ="Asia/Shanghai"' } } steps { sh 'serverless deploy' } } } }
對于 Jenkinsfile 做如下說明:
pipeline 由 agent 、stages 和 post 組成,其中 stages 下包括一系列 stage,而 stage 下又有 steps,steps 下則是一些指令
stages 下包括多個 stage:Checkout、EnvSetUp、Build、Deploy
Checkout 階段用于檢出代碼,這里是私有倉庫,用到了 Credentials 插件
EnvSetUp 階段用于生成 .env 文件,用于自動登錄騰訊云
Build 階段主要是用于構建,這里使用 hugo 鏡像以及 hugo 命令進行構建
Deploy 階段則是使用 serverless 鏡像以及 serverless deploy 命令部署應用,其中 docker args 中 TZ="Asia/Shanghai” 表示設置時區中國區,這樣 serverless 命令行將會將應用部署到騰訊云,否則默認部署到 AWS
需要特別說明的是用于拉取代碼的 CREDENTIALS_ID 環境變量和用于拉取 Docker 鏡像的 DOCKER_REGISTRY_CREDENTIALS_ID 是 CODING 持續集成平臺提供的,無需手動設置
設置觸發規則:
這里設置在代碼推送到 master 分支時,自動觸發構建。
至此,整個持續集成構建計劃的配置就完成了。
此后,每次提交代碼到 GitHub 倉庫的 master 后,GitHub Actions 便會將代碼自動同步到 CODING 的代碼倉庫,然后便會觸發 CODING 持續集成來自動部署網站。
關于如何使用CODING DevOps部署Serverless 應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。