23、软件开发中的特性标志与开源项目实践

软件开发中的特性标志与开源项目实践

1. 特性标志工具介绍

特性标志是一种开发实践,可在生产阶段直接测试应用程序。有多种特性标志工具可供选择,包括开源工具和云解决方案(PaaS)。

1.1 开源工具

1.2 云解决方案(PaaS)

工具名称 地址
LaunchDarkly https://launchdarkly.com/
Rollout https://app.rollout.io/signup
Featureflag.tech https://featureflag.tech/
Featureflow https://www.featureflow.io/

这些云解决方案大多需要企业进行大规模使用时进行财务投资,但它们通常提供无需安装的特性标志管理后台。

2. 使用 RimDev.FeatureFlags 实现特性标志

2.1 工具介绍

RimDev.FeatureFlags 是一个用 .NET 编写的免费开源框架,通过 NuGet 包进行打包和分发,项目地址为 https://github.com/ritterim/RimDev.FeatureFlags ,NuGet 包地址为 https://www.nuget.org/packages/RimDev.AspNetCore.FeatureFlags 。该框架使用数据库存储特性标志数据,实现后会提供一个 Web 用户界面,用于启用或禁用特性标志。

2.2 初始化步骤

假设已有一个已初始化的 ASP.NET MVC Core 应用程序,并使用 SQL Server 数据库存储特性标志数据。初始化 RimDev.FeatureFlags 的步骤如下:
1. 引用 NuGet 包
- 修改应用程序的 .csproj 文件,添加以下代码:

<ItemGroup>
    ...
    <PackageReference Include="RimDev.AspNetCore.FeatureFlags" Version="1.2.0" />
</ItemGroup>
- 或者在终端中执行以下命令:
dotnet add package RimDev.AspNetCore.FeatureFlags
  1. 配置数据库连接字符串 :在 appsettings.json 配置文件中添加以下代码:
"connectionStrings": {
    "localDb": "Data Source=<your database server>;Database=FeatureFlags.AspNetCore;User ID=<your user>;Password=<password data>"
}
  1. 在 startup.cs 文件中添加配置
private readonly FeatureFlagOptions options;
public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    options = new FeatureFlagOptions().UseCachedSqlFeatureProvider(Configuration.GetConnectionString("localDb"));
}

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddFeatureFlags(options);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseFeatureFlags(options);
    app.UseFeatureFlagsUI(options);
}

2.3 创建和使用特性标志

以创建一个名为 ShowBoxHome 的特性标志为例,该标志用于控制应用程序主页中间是否显示图像。具体步骤如下:
1. 创建特性标志类

using RimDev.AspNetCore.FeatureFlags;
namespace appFeatureFlags.Models{
    public class ShowBoxHome : Feature {
        public override string Description { get; } = "Show the home center box.";
    }
}
  1. 在控制器中调用特性标志类
public class HomeController : Controller {
    private readonly ShowBoxHome showboxHome;
    public HomeController (ShowBoxHome showboxHome){
        this.showboxHome = showboxHome;
    }
    public IActionResult Index() {
        return View(new HomeModel{ShowboxHome = this.showboxHome.Value});
    }
    ...
}
  1. 创建 HomeModel 类
public class HomeModel
{
    public bool ShowBoxHome { get; set; }
}
  1. 在视图中使用特性标志 :在 Views/Home/index.chtml 中添加以下代码:
<div class="text-center">
    @if(Model.ShowBoxHome){
        <div><img src="img/test.png"></div>
    }
</div>

2.4 动态激活特性标志

应用程序启动后,默认主页中间没有图像。要显示图像,可按以下步骤操作:
1. 访问后台管理页面: http://<yoursite>/_features ,会看到一个名为 ShowHomeBow 的开关。
2. 打开开关激活特性标志。
3. 重新加载应用程序主页,即可看到中间显示图像。

3. 使用 LaunchDarkly 实现特性标志

3.1 工具介绍

LaunchDarkly 是一个 SaaS 平台,由特性标志管理后台和 SDK 组成,SDK 支持多种开发语言,如 .NET、JavaScript、Go 和 Java 等。该平台提供用户管理特性标志和 A/B 测试功能,但需要付费使用,不过提供 30 天免费试用。

3.2 创建特性标志

  1. 登录 LaunchDarkly 账户 :点击 LaunchDarkly 网站顶部菜单的 Sign In 按钮,或直接访问 https://app.launchdarkly.com/
  2. 创建新项目 :登录账户后,在 Account settings 部分创建一个名为 DemoBook 的新项目。默认会创建两个环境,也可创建自己的环境,每个环境有唯一的 SDK 密钥,用于 SDK 认证。
  3. 创建特性标志 :在名为 Test 的环境中,导航到 Feature flags 菜单,点击 NEW + 按钮,创建一个名为 ShowBoxHome 的特性标志,创建后可通过开关激活。

3.3 在应用程序中使用 SDK

  1. 选择并集成 SDK :根据应用程序开发语言选择相应的 SDK,对于 .NET 应用程序,参考 https://docs.launchdarkly.com/docs/dotnet-sdk-reference 。在应用程序的 .csproj 文件中添加以下代码:
<ItemGroup>
    <PackageReference Include="LaunchDarkly.ServerSdk" Version="5.6.5" />
    ...
</ItemGroup>
  1. 导入 SDK 并连接到 LaunchDarkly :在控制器代码中添加以下代码:
using LaunchDarkly.Client;
public IActionResult Index() {
    LdClient ldClient = new LdClient("sdk-eb0443dc-xxxx-xxx-xx-xxx");
    User user = LaunchDarkly.Client.User.WithKey(User.Identity.Name);
    bool showBoxHome = ldClient.BoolVariation("show-box-home", user, false);
    return View(new HomeModel{ShowBoxHome = showBoxHome});
}
  1. 在视图中添加条件显示图像 :在 Home/Index.chtml 视图中添加以下代码:
<div class="text-center">
    @if(Model.ShowBoxHome){
        <div><img src="img/test.png"></div>
    }
</div>

3.4 测试特性标志

部署并执行应用程序,默认主页会显示中央图像。可在 LaunchDarkly 门户中为当前用户修改该特性标志的值为 false,重新加载页面后,中央图像将不再显示。

4. 开源项目实践

4.1 开源项目的重要性

如今,开源在开发和企业领域已成为必然趋势。开源不仅可以使用开源产品,还能参与项目的改进和发展。开发者可通过讨论使用问题、提出改进建议或修改源代码来为开源项目做出贡献,也可将自己的项目以开源方式分享给社区。

4.2 技术要求

进行开源项目实践需要一个 GitHub 账户,可在 https://github.com/ 免费创建。为了更好地理解后续的 DevOps 实践,建议熟悉版本控制、持续集成和持续交付以及静态代码分析等相关知识。

4.3 存储源代码到 GitHub

如果想以开源方式分享项目,需要将代码存储在支持公共仓库和代码协作的 Git 平台上。常见的平台有 GitLab 和 GitHub,其中 GitHub 是目前最常用的开源项目平台。

4.4 创建新的 GitHub 仓库

创建新的 GitHub 仓库的步骤如下:
1. 登录 GitHub 账户,若为新用户,可前往 https://github.com/ 创建账户。
2. 登录后,进入账户的 Repositories 标签页。
3. 点击 New 按钮。
4. 填写新仓库的相关信息:
- 仓库名称 :必填项。
- 描述 :可选项。
- 仓库类型 :选择 Public(公共仓库,任何人都可访问)或 Private(私有仓库,仅授权成员可访问)。
- 初始化选项 :可选择初始化仓库时包含一个空的 README.md 文件和 .gitignore 文件。

以下是创建新仓库的流程图:

graph LR
    A[登录 GitHub 账户] --> B[进入 Repositories 标签页]
    B --> C[点击 New 按钮]
    C --> D[填写仓库信息]
    D --> E[选择仓库类型]
    D --> F[选择初始化选项]
    E --> G[创建仓库]
    F --> G

通过以上步骤,就可以将项目的源代码存储在 GitHub 上,并开始参与开源项目的开发和协作。

5. 贡献开源项目使用拉取请求

5.1 拉取请求的重要性

拉取请求(Pull Request)是向开源项目贡献代码的重要方式。通过拉取请求,开发者可以将自己对项目的修改提交给项目维护者,由维护者决定是否合并这些修改到主项目中。这不仅促进了代码的共享和协作,还能让更多人参与到项目的改进中来。

5.2 贡献步骤

以下是使用拉取请求向开源项目贡献代码的一般步骤:
1. Fork 项目 :在 GitHub 上找到目标开源项目,点击页面右上角的“Fork”按钮,将项目复制到自己的 GitHub 账户下。
2. 克隆项目到本地 :使用 git clone 命令将自己账户下的项目克隆到本地开发环境中。

git clone https://github.com/yourusername/repositoryname.git
  1. 创建新分支 :在本地项目中创建一个新的分支,用于进行修改。
git checkout -b new-feature
  1. 进行修改 :在新分支上进行代码修改、添加或删除等操作。
  2. 提交修改 :使用 git add git commit 命令将修改提交到本地仓库。
git add .
git commit -m "Add new feature"
  1. 推送分支到 GitHub :使用 git push 命令将本地分支推送到自己账户下的 GitHub 仓库。
git push origin new-feature
  1. 发起拉取请求 :在自己账户下的 GitHub 仓库页面,点击“New pull request”按钮,选择要合并的分支和目标分支,填写拉取请求的描述信息,然后提交拉取请求。

5.3 管理拉取请求

项目维护者在收到拉取请求后,会对提交的代码进行审核。可能会提出一些修改建议,贡献者需要根据建议进行修改,并再次提交。整个过程可能需要多次沟通和修改,直到维护者认为代码符合要求并合并到主项目中。

6. 管理变更日志和发布说明

6.1 变更日志的作用

变更日志(Changelog)记录了项目在不同版本之间的所有变更,包括新增功能、修复的 bug、改进的性能等。它有助于开发者和用户了解项目的发展历程,以及每个版本的具体变化。

6.2 发布说明的重要性

发布说明(Release Notes)是在项目发布新版本时提供给用户的一份文档,详细介绍了新版本的主要变化、改进和已知问题等信息。它可以帮助用户快速了解新版本的特点,决定是否升级。

6.3 管理方法

管理变更日志和发布说明可以按照以下步骤进行:
1. 记录变更 :在开发过程中,及时记录每次代码修改的详细信息,包括修改的内容、原因和影响范围。
2. 整理变更日志 :在发布新版本之前,将记录的变更信息整理成规范的变更日志,按照版本号进行分类。
3. 编写发布说明 :根据变更日志,编写简洁明了的发布说明,突出新版本的主要特点和改进。
4. 发布变更日志和发布说明 :将变更日志和发布说明发布到项目的官方网站、GitHub 仓库等地方,方便用户查看。

以下是一个简单的变更日志示例:
| 版本号 | 发布日期 | 变更内容 |
| ---- | ---- | ---- |
| v1.0.0 | 2024-01-01 | 初始版本发布,包含基本功能 |
| v1.1.0 | 2024-02-01 | 新增了用户登录和注册功能 |
| v1.2.0 | 2024-03-01 | 修复了部分 bug,优化了性能 |

7. 在 GitHub 发布中共享二进制文件

7.1 二进制文件的作用

在开源项目中,有时需要共享一些二进制文件,如编译后的可执行文件、库文件等。这些二进制文件可以方便用户直接使用项目,而无需自己进行编译。

7.2 共享步骤

在 GitHub 发布中共享二进制文件的步骤如下:
1. 创建发布 :在 GitHub 仓库的页面,点击“Releases”标签,然后点击“Create a new release”按钮。
2. 填写发布信息 :填写发布的版本号、标题、描述等信息。
3. 上传二进制文件 :在发布页面中,点击“Attach binaries by selecting them”按钮,选择要上传的二进制文件。
4. 发布版本 :填写完所有信息并上传二进制文件后,点击“Publish release”按钮,将发布版本并共享二进制文件。

8. 使用 Travis CI 进行持续集成

8.1 持续集成的概念

持续集成(Continuous Integration,CI)是一种软件开发实践,通过频繁地将代码集成到共享仓库中,并自动运行测试和构建过程,确保代码的质量和稳定性。

8.2 Travis CI 的作用

Travis CI 是一个基于云的持续集成服务,支持多种编程语言和平台。它可以与 GitHub 集成,当代码发生变更时,自动触发构建和测试任务。

8.3 使用步骤

使用 Travis CI 进行持续集成的步骤如下:
1. 登录 Travis CI :使用 GitHub 账户登录 Travis CI
2. 授权访问仓库 :在 Travis CI 中授权访问要进行持续集成的 GitHub 仓库。
3. 创建 .travis.yml 文件 :在项目的根目录下创建一个名为 .travis.yml 的文件,配置构建和测试任务。以下是一个简单的 .travis.yml 文件示例:

language: csharp
solution: MyProject.sln
install:
  - nuget restore MyProject.sln
script:
  - xbuild /p:Configuration=Release MyProject.sln
  - mono ./packages/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./MyProject.Tests/bin/Release/MyProject.Tests.dll
  1. 提交 .travis.yml 文件 :将 .travis.yml 文件提交到 GitHub 仓库,Travis CI 会自动检测到文件的变更并触发构建和测试任务。

以下是使用 Travis CI 进行持续集成的流程图:

graph LR
    A[代码提交到 GitHub] --> B[Travis CI 检测到变更]
    B --> C[读取 .travis.yml 文件]
    C --> D[执行安装步骤]
    D --> E[执行构建步骤]
    E --> F[执行测试步骤]
    F --> G[输出构建和测试结果]

9. 开始使用 GitHub Actions

9.1 GitHub Actions 的介绍

GitHub Actions 是 GitHub 提供的一种自动化工具,允许用户在 GitHub 仓库中创建自定义的工作流。通过编写 YAML 文件,可以定义一系列的任务,如构建、测试、部署等,当特定事件发生时自动触发。

9.2 使用步骤

使用 GitHub Actions 的步骤如下:
1. 创建 .github/workflows 目录 :在项目的根目录下创建一个名为 .github/workflows 的目录。
2. 创建工作流文件 :在 .github/workflows 目录下创建一个 YAML 文件,定义工作流的任务和触发条件。以下是一个简单的工作流文件示例:

name: CI
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Set up .NET
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: 6.0.x
      - name: Restore dependencies
        run: dotnet restore
      - name: Build
        run: dotnet build --no-restore
      - name: Test
        run: dotnet test --no-build --verbosity normal
  1. 提交工作流文件 :将工作流文件提交到 GitHub 仓库,当满足触发条件时,GitHub Actions 会自动执行工作流中的任务。

10. 使用 SonarCloud 进行代码分析

10.1 静态代码分析的重要性

静态代码分析是在不运行代码的情况下,对代码进行检查和分析,以发现潜在的问题,如代码漏洞、代码规范问题等。它可以提高代码的质量和可维护性。

10.2 SonarCloud 的作用

SonarCloud 是一个基于云的静态代码分析平台,支持多种编程语言。它可以与 GitHub 集成,在代码提交时自动进行代码分析,并提供详细的分析报告。

10.3 使用步骤

使用 SonarCloud 进行代码分析的步骤如下:
1. 注册 SonarCloud 账户 :访问 SonarCloud 并注册账户。
2. 创建项目 :在 SonarCloud 中创建一个新的项目,并关联 GitHub 仓库。
3. 配置分析任务 :在项目的根目录下创建一个名为 sonar-project.properties 的文件,配置分析任务。以下是一个简单的 sonar-project.properties 文件示例:

sonar.projectKey=my-project-key
sonar.organization=my-organization
sonar.sources=.
sonar.host.url=https://sonarcloud.io
  1. 集成到 CI/CD 流程 :在 Travis CI 或 GitHub Actions 的工作流中添加 SonarCloud 分析任务。以下是一个在 GitHub Actions 中集成 SonarCloud 分析的示例:
name: CI with SonarCloud
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Set up .NET
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: 6.0.x
      - name: Restore dependencies
        run: dotnet restore
      - name: Build
        run: dotnet build --no-restore
      - name: SonarCloud Scan
        uses: SonarSource/sonarcloud-github-action@master
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

11. 使用 WhiteSource Bolt 检测安全漏洞

11.1 安全漏洞检测的重要性

在开源项目中,安全漏洞是一个重要的问题。及时检测和修复安全漏洞可以保护项目和用户的安全。

11.2 WhiteSource Bolt 的作用

WhiteSource Bolt 是一个用于检测开源项目中包安全漏洞的工具。它可以自动扫描项目中的依赖项,检测是否存在已知的安全漏洞,并提供修复建议。

11.3 使用步骤

使用 WhiteSource Bolt 检测安全漏洞的步骤如下:
1. 注册 WhiteSource Bolt 账户 :访问 WhiteSource Bolt 并注册账户。
2. 安装插件 :根据项目的开发环境,安装相应的 WhiteSource Bolt 插件。
3. 扫描项目 :在开发环境中运行 WhiteSource Bolt 插件,扫描项目的依赖项。
4. 查看和修复漏洞 :在 WhiteSource Bolt 控制台中查看扫描结果,根据建议修复发现的安全漏洞。

通过以上的开源项目实践,可以更好地参与开源项目的开发和维护,提高代码的质量和安全性。同时,利用各种工具和平台,可以实现自动化的开发流程,提高开发效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值