关于serverless:如何做Serverless自动化部署

5次阅读

共计 5238 个字符,预计需要花费 14 分钟才能阅读完成。

前言

随着麻利和 DevOps 的风行,CI/CD 曾经成了所有开发者在开发过程中必不可少的最佳实际,次要指标是以更快的速度、更短的周期向用户交付卓有成效的软件。

它能给咱们带来如下益处:

  • 缩短公布周期
  • 升高危险
  • 进步代码品质
  • 更高效的反馈循环
  • 可视化过程

因而在 Serverless 越来越风行的明天,如何让 Serverless 的我的项目也能疾速的搭建 CI/CD,这是这篇文章的重点。

习惯了 CI/CD 的用户可能都冀望有一个疾速搭建自动化部署的教程,所以这篇文章会以上面几个风行的平台来解说如何搭建自动化部署,让你可能推送代码就主动实现部署。

  • Github
  • Jenkins
  • Coding

基于 GitHub 的自动化部署

GitHub Actions 是 Github 推出的自动化软件开发工作流。通过 Actions 能够执行任何工作,其中就包含 CI/CD。

前提条件

  • 已托管你的 Serverless 我的项目代码到 Github。
  • 我的项目中必须蕴含 Serverless framework 部署须要用到的 serverless.ymlserverless.yml 的应用形式请参考官网。
  • 如果是 Web 函数,需保障根目录有 scf_bootstrap 文件,具体请参考官网。

操作步骤

为了让这个部署过程更简略,我在 GitHub 的市场中公布一个腾讯云 Serverless 部署的 Action 来帮忙大家疾速实现自动化部署。

在 GitHub 的 Marketplace 中搜寻 tencent serverless 就能够找到。如下图。外面有具体的 Action 代码。

首先,在 Actions 外面抉择 Set up a workflow yourself,如下图。

如果晓得如何应用 Action,那么间接用上面这句就能够了,外面封装了装置 Serverless framework 和执行部署命令的步骤。

    - name: serverless scf deploy
      uses: woodyyan/tencent-serverless-action@main

如果不晓得如何应用 Action,能够依据不同的语言选择下列不同的 yml 写法,上面我列举了 Python、Java、NodeJS 的写法。

实用于 Python 我的项目

# 当代码推动到 main 分支时,执行当前工作流程
# 更多配置信息: https://docs.github.com/cn/actions/getting-started-with-github-actions
name: deploy serverless scf
on: #监听的事件和分支配置
  push:
    branches:
      - main
jobs:
  deploy:
    name: deploy serverless scf
    runs-on: ubuntu-latest
    steps:
      - name: clone local repository
        uses: actions/checkout@v2
      - name: deploy serverless
        uses: woodyyan/tencent-serverless-action@main
        env: # 环境变量
          STAGE: dev #您的部署环境
          SERVERLESS_PLATFORM_VENDOR: tencent #serverless 境外默认为 aws,配置为腾讯
          TENCENT_SECRET_ID: ${{secrets.TENCENT_SECRET_ID}} #您的腾讯云账号 sercret ID,请在 Settings-Secrets 中配置
          TENCENT_SECRET_KEY: ${{secrets.TENCENT_SECRET_KEY}} #您的腾讯云账号 sercret key,请在 Settings-Secrets 中配置

实用于 Java 我的项目,请认真看代码中的备注阐明

name: deploy serverless scf
on: #监听的事件和分支配置
  push:
    branches:
      - main
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'temurin'
          server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
          settings-path: ${{github.workspace}} # location for the settings.xml file
      - name: Build with Gradle # Gradle 我的项目用这个
        uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
        with:
          arguments: build
      - name: Build with Maven # Maven 我的项目用这个
        run: mvn -B package --file pom.xml
      - name: create zip folder # 此步骤仅用于 Java Web 函数,用于寄存 jar 和 scf_bootstrap 文件。Java 事件函数只须要在 Serverless.yml 中指定 Jar 目录就好。run: mkdir zip
      - name: move jar and scf_bootstrap to zip folder # 此步骤仅用于 Java Web 函数,用于挪动 jar 和 scf_bootstrap 文件。Java 事件函数只须要在 Serverless.yml 中指定 Jar 目录就好。留神如果是 Maven 编译请批改上面的 jar 门路为 /target。run: cp ./build/libs/XXX.jar ./scf_bootstrap ./zip
      - name: deploy serverless
        uses: woodyyan/tencent-serverless-action@main
        env: # 环境变量
          STAGE: dev #您的部署环境
          SERVERLESS_PLATFORM_VENDOR: tencent #serverless 境外默认为 aws,配置为腾讯
          TENCENT_SECRET_ID: ${{secrets.TENCENT_SECRET_ID}} #您的腾讯云账号 sercret ID
          TENCENT_SECRET_KEY: ${{secrets.TENCENT_SECRET_KEY}} #您的腾讯云账号 sercret key

实用于 NodeJS 我的项目

# 当代码推动到 main 分支时,执行当前工作流程
# 更多配置信息: https://docs.github.com/cn/actions/getting-started-with-github-actions
name: deploy serverless scf
on: #监听的事件和分支配置
  push:
    branches:
      - main
jobs:
  deploy:
    name: deploy serverless scf
    runs-on: ubuntu-latest
    steps:
      - name: clone local repository
        uses: actions/checkout@v2
      - name: install dependency
        run: npm install
      - name: build
        run: npm build
      - name: deploy serverless
        uses: woodyyan/tencent-serverless-action@main
        env: # 环境变量
          STAGE: dev #您的部署环境
          SERVERLESS_PLATFORM_VENDOR: tencent #serverless 境外默认为 aws,配置为腾讯
          TENCENT_SECRET_ID: ${{secrets.TENCENT_SECRET_ID}} #您的腾讯云账号 sercret ID,请在 Settings-Secrets 中配置
          TENCENT_SECRET_KEY: ${{secrets.TENCENT_SECRET_KEY}} #您的腾讯云账号 sercret key,请在 Settings-Secrets 中配置

最初,因为部署的时候须要用到腾讯云的 TENCENT_SECRET_IDTENCENT_SECRET_KEY,所以须要在 Github 代码仓库的设置中的 Secrets 外面配置这两个变量。如下图所示。ID 和 KEY 能够在腾讯云的访问控制外面获取。

配置实现之后,每次推送代码,都将会主动触发部署流程,同时在 Actions 中能够实时看到执行后果与谬误日志。如下图。

大家还能够依据我的项目须要,在流程中增加测试、安全检查、公布等步骤。

基于 Jenkinsfile 的自动化部署

Jenkinsfile 是通用于 Jenkins、Coding 等平台的,因而只须要配置好 Jenkinsfile,则能在这些平台上实现自动化部署。

前提条件

  • 已托管你的 Serverless 我的项目到 Coding/Github/Gitlab/ 码云等平台。
  • 我的项目中必须蕴含 Serverless framework 部署须要用到的 serverless.ymlserverless.yml 的应用形式请参考官网。
  • 如果是 Web 函数,需保障根目录有 scf_bootstrap 文件,具体请参考官网。

操作步骤

依据不同语言的须要,我把所有语言须要用到的语法都写在上面的 Jenkinsfile 中了,实用于 Python、Java、NodeJS,请仔细阅读正文。

pipeline {
  agent any
  stages {stage('检出') {
      steps {checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
            userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]])
      }
    }
        stage('Package'){ // 此 stage 仅用于 Java 我的项目
       steps{container("maven") {
          echo 'Package start'
          sh "mvn package" // 此行用于 Java Maven 我的项目
                    sh "./gradlew build" // 此行用于 Java Gradle 我的项目
                    sh "mkdir zip" // 此行仅用于 Java Web 函数,用于寄存 jar 和 scf_bootstrap 文件。Java 事件函数只须要在 Serverless.yml 中指定 Jar 目录就好。sh "cp ./build/libs/XXX.jar ./scf_bootstrap ./zip" // 此行仅用于 Java Web 函数,用于挪动 jar 和 scf_bootstrap 文件。Java 事件函数只须要在 Serverless.yml 中指定 Jar 目录就好。留神如果是 Maven 编译请批改上面的 jar 门路为 /target。}           
           }
    }
    stage('装置依赖') {
      steps {
        echo '装置依赖中...'
        sh 'npm i -g serverless'
        sh 'npm install' // 此行用于 NodeJS 我的项目
        echo '装置依赖实现.'
      }
    }
    stage('部署') {
      steps {
        echo '部署中...'
        withCredentials([
          cloudApi(credentialsId: "${env.TENCENT_CLOUD_API_CRED}",
            secretIdVariable: 'TENCENT_SECRET_ID',
            secretKeyVariable: 'TENCENT_SECRET_KEY'
          ),
        ]) {
             // 生成凭据文件
             sh 'echo"TENCENT_SECRET_ID=${TENCENT_SECRET_ID}\nTENCENT_SECRET_KEY=${TENCENT_SECRET_KEY}"> .env'
             // 部署
             sh 'sls deploy --debug'   
             // 移除凭据
             sh 'rm .env' 
        }
        echo '部署实现'
      }
    }
  }
}

应用下面的 Jenkinsfile 就能够在 Jenkins、coding 等平台一键实现 CI/CD 配置了。

留神,须要在平台中配置腾讯云须要用到的 TENCENT_SECRET_IDTENCENT_SECRET_KEY这两个变量。

总结

作为开发者,总是心愿所有代码工作都是自动化实现,都能提高效率。因而,纯熟的把握如何疾速配置自动化的 CI/CD 流程,是每个开发者必须把握的技能之一。

在这里分享这些开箱即用的配置,也是心愿能大大减少大家的学习老本,疾速上手开始外围业务开发。

将来我还会持续摸索更多的实用于 Serverless 的 DevOps 实际,与大家分享。

如果有任何疑难或在操作中遇到任何艰难能够在文章下方留言,我会回复大家。

正文完
 0