這篇文章給大家介紹如何使用CODING DevOps部署Serverless 應(yīng)用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
成都創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元羅定做網(wǎng)站,已為上家服務(wù),為羅定各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
CI/CD 已成為軟件開發(fā)環(huán)節(jié)的標(biāo)配,倡導(dǎo)將一切自動化,這里期待在代碼提交到 master 分支后就會自動部署應(yīng)用。
因?yàn)榇a 托管在 GitHub 上,首先考慮的是使用 GitHub Actions 部署應(yīng)用。
然而在使用 GitHub Actions 時,總是會超時失敗,這是因?yàn)?GitHub Actions 官方托管服務(wù)器在國外,在部署到國內(nèi)的環(huán)境時,網(wǎng)絡(luò)延遲很大,從而導(dǎo)致失敗。
于是暫時放棄使用 GitHub Actions 部署戰(zhàn)點(diǎn),并考慮使用國內(nèi)的免費(fèi) CI/CD 工具,在調(diào)研后選擇了騰訊旗下的 CODING DevOps。
考慮到國內(nèi)拉取 GitHub 代碼會比較慢, 這里首先使用 GitHub Actions 將代碼自動同步到 coding.net 的代碼倉庫,然后再使用 CODING 持續(xù)集成進(jìn)行自動化部署。
GitHub Actions 有一個特別好的功能是:有一個 GitHub Marketplace,目前有 7000 多個 Action,開發(fā)者可以從中挑選適合自己的 Action。
開發(fā)者也可以定義自己的 Action,也可以將自己的 Action 發(fā)布到 GitHub Marketplace。
這里定制了一個 Action 用于同步代碼到 CODING: https://github.com/marketplace/actions/sync-repo-to-coding
每個倉庫可以配置多個 workflow,在 GitHub 倉庫的 .github/workflows 下添加用來定義 workflow 的 YAML 文件即可。
同步代碼到 CODING 的 workflow 的 YAML 文件內(nèi)容如下:
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 目標(biāo)倉庫地址 coding-repo: "git@e.coding.net:donghui1/serverlesslife/serverlesslife.git"
每次提交代碼到 master 分支后,都會觸發(fā) sync-to-coding 任務(wù),Actions 日志截圖如下:
CODING 構(gòu)建部署過程中需要用到 Docker 鏡像,如:hugo 和 serverless,分別用于構(gòu)建與部署階段。
從 DockerHub 挑選了下面符合要求的兩個鏡像:
https://hub.docker.com/r/cibuilds/hugo/
https://hub.docker.com/r/amaysim/serverless/
然后從 DockerHub 下載到本地,再手動上傳到了 CODING 的 Docker 制品倉庫。
這樣在構(gòu)建過程中可以快速下載鏡像(如果從 DockerHub 下載,不僅速度慢,還有下載次數(shù)限制)。
CODING 持續(xù)集成功能是基于 Jenkins 二次開發(fā)的,支持 Jenkins Pipeline。
如果熟悉 Jenkins,那么上手 CODING 持續(xù)集成就會很容易。
值得一提的是 CODING 持續(xù)集成提供了圖形化編輯生成 Jenkinsfile 的功能,大大降低了使用成本。
當(dāng)然圖形化編輯器也有美中不足之處,它不會支持所有 Jenkins 步驟。
下面是使用圖形化編輯器可視化編輯 Jenkins Pipeline 的截圖:
添加所需的環(huán)境變量:
這里需要添加兩個環(huán)境變量:TENCENT_SECRET_ID、TENCENT_SECRET_KEY,用于登錄騰訊云。
為了避免密碼明文顯示在控制臺,添加這里的環(huán)境變量時要勾選「保密」。
最終的 Jenkinsfile 內(nèi)容如下:
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 階段主要是用于構(gòu)建,這里使用 hugo 鏡像以及 hugo 命令進(jìn)行構(gòu)建
Deploy 階段則是使用 serverless 鏡像以及 serverless deploy 命令部署應(yīng)用,其中 docker args 中 TZ="Asia/Shanghai” 表示設(shè)置時區(qū)中國區(qū),這樣 serverless 命令行將會將應(yīng)用部署到騰訊云,否則默認(rèn)部署到 AWS
需要特別說明的是用于拉取代碼的 CREDENTIALS_ID 環(huán)境變量和用于拉取 Docker 鏡像的 DOCKER_REGISTRY_CREDENTIALS_ID 是 CODING 持續(xù)集成平臺提供的,無需手動設(shè)置
設(shè)置觸發(fā)規(guī)則:
這里設(shè)置在代碼推送到 master 分支時,自動觸發(fā)構(gòu)建。
至此,整個持續(xù)集成構(gòu)建計劃的配置就完成了。
此后,每次提交代碼到 GitHub 倉庫的 master 后,GitHub Actions 便會將代碼自動同步到 CODING 的代碼倉庫,然后便會觸發(fā) CODING 持續(xù)集成來自動部署網(wǎng)站。
關(guān)于如何使用CODING DevOps部署Serverless 應(yīng)用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。