tencent cloud

文档反馈

自动化部署

最后更新时间:2024-04-22 17:45:15

    简介

    随着敏捷和 DevOps 的流行,CI/CD 已经成了所有开发者在开发过程中必不可少的最佳实践,主要目标是以更快的速度、更短的周期向用户交付行之有效的软件。

    CI/CD

    
    
    

    CI/CD 优势

    缩短发布周期
    降低风险
    提高代码质量
    更高效的反馈循环
    可视化过程
    本文以 GitHub、Jenkins、CODING 三个平台为例介绍如何结合 Serverless Framework CLI 为 Serverless 项目快速搭建 CI/CD。

    基于 GitHub 的自动化部署

    GitHub Actions 是 GitHub 推出的自动化软件开发工作流。通过 Actions 可以执行任何任务,其中就包括 CI/CD。
    
    
    

    前提条件

    Serverless 项目已经托管到 GitHub。
    项目中需要包含 Serverless Framework CLI 执行需要用到的配配置文件serverless.yml
    如果使用 Web 函数,请将 scf_bootstrap 文件放在项目根目录下。

    操作步骤

    注意:
    SCF 已经在 GitHub 市场发布了 腾讯云 Serverless 部署的 Action
    1. 在 GitHub 市场中搜索 “Tencent Serveless Action”。
    
    
    2. 在 Actions 中选择 Set up a workflow yourself,如下图所示:
    
    
    3. 使用方式:
    如果熟悉 Action 用法,您可以使用下文的命令,其中已经封装了安装 Serverless Framework 和执行部署命令的步骤。
    - name: serverless scf deploy
    uses: woodyyan/tencent-serverless-action@main
    如果不熟悉 Action 用法,您可以根据不同的语言选择下列不同的 yml 写法,本文列举了Python、Java、NodeJS 三种语言的 yml 写法供参考。
    Python
    Java
    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: 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中配置
    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
    # 当代码推动到 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 里进行变量配置,如下图所示:
    
    腾讯云 Secret ID 和Secret KEY 可在腾讯云的 访问管理 中获取。
    4. 配置完成后,每次推送代码,都会自动触发部署流程,同时在 Actions 中可以实时看到执行结果与错误日志,如下图所示:
    
    除此之外,还可以根据项目需要,在流程中添加测试、安全检查、发布等步骤。

    基于 Jenkinsfile 的自动化部署

    Jenkinsfile 是通用于 Jenkins、CODING 等平台的,完成 Jenkinsfile 的配置,则能在这些平台上完成自动化部署。

    前提条件

    已将您的 Serverless 项目托管到 CODING/GitHub/GitLab/码云等平台。
    项目中需要包含 Serverless Framework CLI 执行需要用到的配置文件 serverless.yml
    如果使用 Web 函数,请将scf_bootstrap 文件放在项目根目录下。

    操作步骤

    本文提供了 Python、Java、NodeJS 三种语言的 Jenkinsfile 写法供参考,请仔细阅读注释。
    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,可在 访问管理 中获取。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持