在当今的软件领域,实现安全和可重复构建的需求至关重要,特别是在供应链攻击变得越来越复杂和普遍的情况下。为了满足这一需求,微软开发了一款名为Dale的工具,旨在提供构建系统包和容器的声明性工具。Dale专注于创建精简、可重复的映像,并重视供应链安全,采用了一种简单而强大的配置格式。
Dale简介Dale 是一个工具,它帮助开发者使用基于 YAML 的配置文件声明式地构建系统包和容器。它强调安全性和可重复性,是希望加强软件供应链安全性的组织的理想选择。尽管 Dale 目前还在积极开发中,它已经提供了一套强大的功能,以满足各种构建需求,并且社区的反馈非常受欢迎,有助于完善其功能。
Dale的主要特点- 最小的工具需求: Dale仅需Docker运行,无需额外工具,简化了设置过程。
- 声明式的YAML配置: Dale使用简单的YAML规范格式,确保构建过程可重复、透明且易于维护。
- 支持多种操作系统: Dale目前支持Azure Linux 2和3(以前称为CBL-Mariner)以及Windows容器,并支持扩展到其他操作系统。
- 最小且安全的镜像: Dale致力于创建最小的镜像,从而减少系统的攻击面,降低潜在漏洞的风险。
- 包签名支持: Dale支持对基础包进行签名,例如RPM、DEB和EXE,增强了构建输出的完整性和确保其真实性。
- 供应链安全: Dale在构建过程中集成安全措施,通过软件物料清单(SBOM)和出处认证来提供每个组件的透明性和可追溯性。
要开始使用Dale,首先你需要安装Docker。Dale的核心是创建一个 YAML 规范文件,该文件描述了构建过程,包括软件包元数据、来源代码、依赖项、构建步骤以及输出配置信息。
创建 Dale 规格文件一个戴尔规格书包含几个主要部分。
- 元数据: 定义了包的基本信息,比如名称、版本、描述、许可证和打包者信息。
# 语法设置=ghcr.io/azure/dale/frontend:latest
名称: go-md2man
版本: 2.0.3
修订号: "1"
许可证: MIT
描述: 一个将 Markdown 转换为 man 页面(roff)的工具。
打包人: Dale Example
供应商名: Dale Example
网站: https://github.com/cpuguy83/go-md2man
- 来源: 指明构建资源的来源地,支持从 Git 仓库、HTTP URL 和内嵌内容获取资源。Dale 在处理文件和目录来源方面都很高效。
# 配置来源
sources:
src:
git:
url: https://github.com/cpuguy83/go-md2man.git
# 提交版本
commit: "v2.0.3"
generate:
# gomod 模块生成配置
- gomod: {}
- 依赖关系: 列出构建时间和运行时所需的依赖项,确保在构建和运行过程中所需的所有组件都已准备好。
依赖:
构建:
- golang
运行时:
- openssl-libs
- 构建步骤: 列出了编译或组装该包所需的命令和环境设置,确保了构建过程的灵活性和可控性。
build:
env:
CGO_ENABLED: "0"
steps:
- command: |
cd src # 切换到src目录
go build -o go-md2man . # 构建go-md2man二进制文件
- 工件和配置生成的容器图像: 定义哪些文件或二进制文件应该被包含在输出中,同时配置生成的容器图像。
artifacts:
binaries:
src/go-md2man: # go-md2man工具的二进制文件
image:
entrypoint: go-md2man
cmd: --help # 命令:帮助
``
# 基于 Dale 构建包和容器
Dale 可以直接从源代码仓库创建系统包(system packages)和容器镜像(container images)。这种做法为开发人员提供了对构建环境及其输出的精准控制,确保它们既一致又安全。
## 示例:从源码构建包
在这个例子中,Dale 工具获取源代码,根据定义的步骤构建项目,然后将生成的二进制文件打包成一个最小容器镜像。
来源:
src:
git:
url: https://github.com/cpuguy83/go-md2man.git
commit: "v2.0.3"
依赖:
构建:
- golang
构建:
环境:
CGO_ENABLED: "0"
构建步骤:
- 命令: |
cd src
go build -o go-md2man .
# 扩展 Dale:自定义配置和构建文件
Dale的架构允许通过自定义目标和构建镜像来扩展,提供灵活性以适应不同的构建需求,更好地满足操作系统不同或项目需求特殊的情况。
## 定义自定义任务及其依赖项
Dale 支持多种目标系统,如 Mariner 2、Azure 上的 Linux 3 和 Windows。每个目标系统都可以有自己的依赖项和配置需求,这使开发人员能够根据目标环境的具体需求调整构建。
目标:
mariner2:
依赖:
构建:
- golang
# 确保安全:用 Dale 签名包
Dale的关键特性是它支持包的签名,这增强了供应链的安全性,确保所有构件都被认证和可追溯。签名可以直接在规范文件中配置,也可以通过构建参数或选项来配置,提供了在何时以及如何签署构件的灵活性。
## 示例:配置包的签名
通过在配置中添加签名,Dale 可以自动在构建过程中对 RPM、DEB 或 EXE 文件进行签名,确保这些软件包的安全分发。
包配置:
签名器:
镜像: "签名引用:image"
命令行: "/签名"
# 使用Dale进行测试和验证测试过程
Dale 具备强大的测试功能,允许开发者在规格文件中定义测试,以验证其包和容器的正确性。此功能确保最终生成的构建产物在部署前符合预期的标准。
## 文件验证示例:
Dale 支持多种测试类型,包括但不限于文件是否存在、内容验证以及命令执行情况。例如,这里有一个检查文件的权限以确保符合安全标准的例子:
tests:
- name: 检查文件权限设置
files:
/usr/bin/go-md2man:
权限设置: 0755
# 编辑器支持:使用 Dale 让开发更顺畅
Dale 提供了与像 VSCode 和 Vim 这样的流行代码编辑器集成的 JSON 架构文件,这些文件通过为 YAML 文件提供验证和智能感知支持来增强开发人员的体验,使开发过程更加顺畅。这种集成有助于确保规范符合 Dale 的要求,同时减少错误,提高工作效率。
## 在 VS Code 中配置编辑器支持功能
对于 VSCode 用户来说,使用 Red Hat 的 YAML 支持插件在 VSCode 中集成 Dale 的 JSON 模式非常简单。你可以本地配置该模式,或者直接从 Dale 的 GitHub 仓库引用该模式。
{
"yaml.schemas": {
"https://raw.githubusercontent.com/Azure/dale/<version>/docs/spec.schema.json": "test/fixtures/*.yml"
}
}
# 结论:
Dale 表示在安全和可重复构建系统包和容器方面的一个重大进步。通过采用声明性方法并专注于供应链安全,Dale 为开发人员提供了所需工具,以创建一致且简洁的安全构建产物。随着 Dale 的持续发展,它有望成为 DevOps 工具箱中的重要工具,特别是对于致力于提升软件供应链完整性的组织。
要了解更多并开始使用Dale,请查看[Dale文档](https://azure.github.io/dale/),并考虑给出您的反馈以帮助其未来的发展。如果您觉得Dale很有用,请在GitHub上为它点赞以支持其持续开发。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦