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