溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用CODING DevOps部署Serverless 應(yīng)用

發(fā)布時(shí)間:2021-11-19 16:56:23 來(lái)源:億速云 閱讀:219 作者:柒染 欄目:云計(jì)算

這篇文章給大家介紹如何使用CODING DevOps部署Serverless 應(yīng)用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

從 GitHub Actions 到 CODING DevOps

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 將代碼自動(dòng)同步到 CODING

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 DevOps部署Serverless 應(yīng)用

準(zhǔn)備 CI 所需的 Docker 鏡像

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 DevOps部署Serverless 應(yīng)用

配置 CODING 持續(xù)集成構(gòu)建計(jì)劃

CODING 持續(xù)集成功能是基于 Jenkins 二次開發(fā)的,支持 Jenkins Pipeline。

如果熟悉 Jenkins,那么上手 CODING 持續(xù)集成就會(huì)很容易。

值得一提的是 CODING 持續(xù)集成提供了圖形化編輯生成 Jenkinsfile 的功能,大大降低了使用成本。

當(dāng)然圖形化編輯器也有美中不足之處,它不會(huì)支持所有 Jenkins 步驟。

下面是使用圖形化編輯器可視化編輯 Jenkins Pipeline 的截圖:

如何使用CODING DevOps部署Serverless 應(yīng)用

添加所需的環(huán)境變量:

這里需要添加兩個(gè)環(huán)境變量:TENCENT_SECRET_ID、TENCENT_SECRET_KEY,用于登錄騰訊云。

為了避免密碼明文顯示在控制臺(tái),添加這里的環(huán)境變量時(shí)要勾選「保密」。

如何使用CODING DevOps部署Serverless 應(yīng)用

如何使用CODING DevOps部署Serverless 應(yīng)用

最終的 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)建。

如何使用CODING DevOps部署Serverless 應(yīng)用

至此,整個(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)站。

如何使用CODING DevOps部署Serverless 應(yīng)用

關(guān)于如何使用CODING DevOps部署Serverless 應(yīng)用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI