首页 > 其他分享 >TypeScript 学习笔记(十二):TypeScript 与 DevOps 的结合应用

TypeScript 学习笔记(十二):TypeScript 与 DevOps 的结合应用

时间:2024-05-25 21:34:12浏览次数:30  
标签:npm node TypeScript run app DevOps 笔记

TypeScript 学习笔记(十二):TypeScript 与 DevOps 的结合应用

1. 引言

在前几篇学习笔记中,我们探讨了 TypeScript 的基础知识、前后端框架的结合应用、测试与调试技巧、数据库、GraphQL 以及微服务架构的结合应用。本篇将重点介绍 TypeScript 与 DevOps 的结合应用,包括如何在 DevOps 流程中使用 TypeScript,如何设置持续集成(CI)、持续交付(CD)以及自动化部署。

2. 什么是 DevOps

DevOps 是一组实践,它将软件开发(Dev)和 IT 运维(Ops)结合在一起,通过自动化和监控来提高组织的开发和交付速度。DevOps 的核心理念是持续集成、持续交付和持续部署。

3. 持续集成(CI)

持续集成是一种软件开发实践,开发者经常将代码集成到共享仓库中,每次集成都会通过自动化构建和测试来验证,以尽早发现和修复问题。

3.1 使用 GitHub Actions 配置 CI

GitHub Actions 是一个流行的 CI/CD 平台,可以帮助我们在代码仓库中自动化各种任务。以下是一个配置文件示例,用于在每次代码推送时进行构建和测试。

3.1.1 创建 GitHub Actions 工作流

在项目根目录下创建 .github/workflows/ci.yml 文件。

name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm install
    - run: npm run build --if-present
    - run: npm test
3.1.2 配置 TypeScript 项目的测试脚本

package.json 文件中,添加构建和测试脚本。

{
  "scripts": {
    "build": "tsc",
    "test": "jest"
  }
}
3.2 使用 Jenkins 配置 CI

Jenkins 是另一个流行的 CI/CD 工具,可以通过配置 Jenkinsfile 实现持续集成。

3.2.1 创建 Jenkinsfile

在项目根目录下创建 Jenkinsfile

pipeline {
    agent any

    tools {
        nodejs "NodeJS"
    }

    stages {
        stage('Install dependencies') {
            steps {
                sh 'npm install'
            }
        }
        stage('Build') {
            steps {
                sh 'npm run build'
            }
        }
        stage('Test') {
            steps {
                sh 'npm test'
            }
        }
    }

    post {
        always {
            junit 'test-results.xml'
        }
    }
}

4. 持续交付(CD)

持续交付是一种软件工程方法,团队能够频繁地将软件构建、测试和发布到生产环境。以下是一些常见的工具和实践。

4.1 使用 GitHub Actions 配置 CD

.github/workflows 目录下,创建一个用于部署的工作流文件 cd.yml

name: CD

on:
  push:
    branches: [ main ]

jobs:
  deploy:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'
    - run: npm install
    - run: npm run build
    - name: Deploy to Heroku
      uses: akhileshns/[email protected]
      with:
        heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
        heroku_app_name: "your-app-name"
        heroku_email: "[email protected]"
4.2 使用 Jenkins 配置 CD

在 Jenkinsfile 中添加部署阶段。

pipeline {
    agent any

    tools {
        nodejs "NodeJS"
    }

    stages {
        stage('Install dependencies') {
            steps {
                sh 'npm install'
            }
        }
        stage('Build') {
            steps {
                sh 'npm run build'
            }
        }
        stage('Test') {
            steps {
                sh 'npm test'
            }
        }
        stage('Deploy') {
            steps {
                withCredentials([string(credentialsId: 'HEROKU_API_KEY', variable: 'HEROKU_API_KEY')]) {
                    sh 'npx heroku-cli-deploy'
                }
            }
        }
    }

    post {
        always {
            junit 'test-results.xml'
        }
    }
}

5. 自动化部署

自动化部署是 DevOps 的重要组成部分,可以使用 Docker 和 Kubernetes 实现更高效的部署和管理。

5.1 使用 Docker 部署应用
5.1.1 创建 Dockerfile

在项目根目录下创建 Dockerfile

# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14

# 创建应用目录
WORKDIR /usr/src/app

# 安装应用依赖
COPY package*.json ./

RUN npm install

# 复制应用代码
COPY . .

# 编译 TypeScript 代码
RUN npm run build

# 暴露应用运行的端口
EXPOSE 8080

# 运行应用
CMD [ "node", "dist/index.js" ]
5.1.2 构建和运行 Docker 容器
docker build -t my-app .
docker run -p 8080:8080 my-app
5.2 使用 Kubernetes 管理容器
5.2.1 创建 Kubernetes 部署文件

在项目根目录下创建 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:latest
        ports:
        - containerPort: 8080
5.2.2 部署到 Kubernetes 集群
kubectl apply -f deployment.yaml

6. 监控和日志

监控和日志是 DevOps 流程中不可或缺的部分,可以使用 Prometheus 和 Grafana 进行监控,使用 ELK(Elasticsearch, Logstash, Kibana)进行日志管理。

6.1 使用 Prometheus 和 Grafana 进行监控
6.1.1 安装 Prometheus 和 Grafana

可以使用 Helm 安装 Prometheus 和 Grafana。

helm install prometheus stable/prometheus
helm install grafana stable/grafana
6.1.2 配置监控

配置 Prometheus 监控你的应用,并在 Grafana 中设置数据源和仪表盘。

6.2 使用 ELK 进行日志管理
6.2.1 安装 ELK

可以使用 Docker Compose 安装 ELK 堆栈。

version: '3.1'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"

  logstash:
    image: docker.elastic.co/logstash/logstash:7.10.1
    ports:
      - "5000:5000"
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf

  kibana:
    image: docker.elastic.co/kibana/kibana:7.10.1
    ports:
      - "5601:5601"
6.2.2 配置日志收集

logstash.conf 文件中配置日志收集。

input {
  file {
    path => "/var/log/my-app/*.log"
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "my-app-logs"
  }
}

7. 结论

在本篇学习笔记中,我们探讨了 TypeScript 与 DevOps 的结合应用,包括如何在 DevOps 流程中使用 TypeScript,如何设置持续集成、持续交付以及自动化部署。通过掌握这些知识,你可以在实际项目中更好地利用 TypeScript 和 DevOps 实践,提升开发和运维效率。

下一篇学习笔记将介绍 TypeScript 在前端开发中的高级应用,包括性能优化和前端架构设计,希望你能继续关注本系列的学习笔记,进一步提升 TypeScript 编程技能。

标签:npm,node,TypeScript,run,app,DevOps,笔记
From: https://blog.csdn.net/u010986241/article/details/139186988

相关文章

  • [论文笔记] Conversing with Copilot: Exploring Prompt Engineering for Solving CS1
    Abstract:Copilot及其他辅助编程的人工智能模型被广泛使用,这篇文章探索了Copilot在哪些任务上表现不佳,prompt在过程中的作用等几个问题。Introduction:Question1:Copilot在CS1programmingproblems上的表现如何?Question2:当Copilot最初失败后,prompt的修改如何......
  • 【计算理论】【《计算理论导引(原书第3版)》笔记】第〇章:绪论
    文章目录@[toc]第〇章:绪论0.1|自动机、可计算性与复杂性计算复杂性理论可计算性理论自动机理论0.2|数学概念和术语集合关系等价关系图简单路径连通图圈强连通图字符串和语言字母表上的字符串空串......
  • 论文笔记:Inf-DiT: Upsampling Any-Resolution Image with Memory-Efficient Diffusion
    论文链接:[2405.04312]Inf-DiT:UpsamplingAny-ResolutionImagewithMemory-EfficientDiffusionTransformer(arxiv.org)论文代码:THUDM/Inf-DiT:OfficialimplementationofInf-DiT:UpsamplingAny-ResolutionImagewithMemory-EfficientDiffusionTransformer(gi......
  • Vue3实战笔记(43)—Vue3组合式API下封装可复用ECharts图表组件
    文章目录前言一、封装echart图标钩子二、使用步骤总结前言接上文,已经安装好了ECharts,开始封装组件方便使用。一、封装echart图标钩子首先应用我们之前学习的钩子方式,在hooks目录下创建一个名为useECharts.js的文件,用于封装ECharts的逻辑:import{ref,onMo......
  • 英语学习笔记25——Mrs. Smith‘s kitchen
    Mrs.Smith’skitchen史密斯太太的厨房词汇VocabularyMrs.夫人【已婚】复习:Mr.先生+全名/姓Mrs.夫人+全名/丈夫的姓Miss小姐(未婚)+全名/姓Ms.女士+全名/姓查看婚姻状况,可以观察对方戒指。kitchenn.厨房发音类似:chicken......
  • 《拯救大学生课设不挂科第二期之Windows11下安装VC6.0(VC++6.0)与跑通Hello World C语言
    背景与目标人群:大学第一次学C语言的时候,大部分老师会选择VC6这个编辑器。但由于很多人是新手,第一次上大学学C语言。老师要求VC6.0(VC++6.0)写C语言跑程序可能很多人还是第一次接触电脑。需要安装VC6这个编辑器并且编译C语言程序,但是不怎么会装。博主结合自己当时学习与现在......
  • STM32F103C8T6独立看门狗学习笔记
    /*------------操作说明-------------------键寄存器IWDG_PR寄存器地址0x40003000初始值0X000000000X00005555解除对IWDG_PR、IWDG_RLR和IWDG_WINR寄存器的写入访问保护0X0000CCCC启动独立看门狗0X0000AAAA喂狗......
  • hsql学习笔记
    1. row_number()over(partitionbyuidorderbydt分析:row_number():这是一个窗口函数,用于为结果集中的每一行分配一个唯一的序号。默认情况下,这个序号是按照查询结果的顺序来分配的,但你可以通过OVER()子句中的ORDERBY来指定排序方式。OVER(PARTITIONBYuidORDERB......
  • C++基础知识学习笔记(5)——函数
    学习参考:https://www.bilibili.com/video/BV1et411b73Z?p=95&spm_id_from=pageDriver&vd_source=cc561849591f6a210152150b2493f6f3函数函数的默认参数可以为形参提供默认值。intadd(inta,intb=1,intc=2){ returna+b+c;}intmain(){ cout<<(add(1,3,......
  • Vue3实战笔记(40)—组件逻辑复用:自定义Hooks的完全指南
    文章目录前言一、状态管理二、副作用处理三、生命周期钩子总结前言自定义Hooks是Vue3中的一个重要特性,它允许您创建可重用的函数,以便在组件之间共享状态和逻辑。以下是一些关于自定义Hooks的常见用法。一、状态管理使用reactive或ref来创建响应式数据,并在组件中......