Quibank 应用: 已上架 App Store——免费、可离线使用。 下载应用 ↗

20 道自动化、CI/CD 与版本控制练习题及答案

CompTIA Linux+ 认证考试练习的全部自动化、CI/CD 与版本控制练习题,附正确答案和简短解析。

开始练习测验 →
  1. 1. 管理员需要确保 40 台服务器上都安装了某个软件包、启用了某个服务,并且某个配置文件包含指定内容,而且该流程每周重复执行都必须安全。与按顺序执行安装和启用命令的 shell 脚本相比,为什么声明式的配置管理定义更适合这项工作?

    • A.它在每台主机上按相同顺序执行相同命令,因此各服务器的结果不会出现差异。
    • B.它完全由每台主机的 shell 执行,因此其他地方不需要任何解释器或管理软件。
    • C.它声明每个资源应处于的最终状态,工具只修改与该状态不符的部分。✓ 答案
    • D.它按执行顺序记录下每一条命令,因此以后可以通过重放该记录重建任意主机。

    声明式定义描述的是每个资源应达到的最终状态;工具先读取主机当前状态,只在两者不一致时才动作,因此同一份定义每周应用都不会造成破坏。脚本只会重新执行命令,在已经配置好的主机上可能失败、重复做功,或者重启本不需要变更的服务。

    编号 QB-V5MYWU依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: infrastructure as code and declarative desired state报告此题的问题

  2. 2. 一份配置定义在中间未作任何修改的情况下被第二次应用到同一台主机,运行结果显示检查了 4 个资源、0 个发生变更。这一结果体现了该工具的哪一项特性?

    • A.幂等性,因为把同一份定义应用到已经符合要求的主机上不会再产生任何变更。✓ 答案
    • B.原子性,因为一次运行要么应用其中全部资源,要么把它们一起回滚。
    • C.编排,因为一次运行会协调多台主机之间执行工作的先后顺序。
    • D.检查模式,因为运行只比较主机与定义并报告差异,而不做修改。

    幂等性是指把定义应用到已经符合目标状态的主机上不会产生任何改动,因此第二次运行只报告“已检查”而不是“已变更”。这种“无变更”的第二次运行正是管理员期待的收敛信号;而只报告将要做的改动却不实施,那叫预演,不是正常应用。

    编号 QB-EN5GPW依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: idempotence in configuration management报告此题的问题

  3. 3. 对配置定义的一处修改会影响所有生产 Web 主机。在任何东西被改动之前,管理员想先得到一份该次运行将会修改哪些文件和服务的清单。应采取哪一步?

    • A.以检查模式(dry-run)应用该定义,逐个资源与主机比对并报告,但不做修改。✓ 答案
    • B.把大部分资源注释掉后应用该定义,只让剩下的部分在主机上生效并评估。
    • C.先只在一台生产主机上应用该定义,再查看该主机上的文件,以此推断其余主机会发生什么。
    • D.以最高日志级别应用该定义,事后再查看日志,了解哪些资源被修改了。

    检查模式(即预演)会把每个资源与真实主机逐一比对,并输出它将要做的改动,但不写入任何内容,这正是变更生产环境之前需要的预览。真正应用之后再看日志已经太晚,因为主机已经被改动了。

    编号 QB-W5YA4W依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: configuration management dry run (check mode) before applying changes报告此题的问题

  4. 4. 站点策略禁止在受管主机上再安装任何常驻守护进程,而通过现有的加密远程登录服务进行管理访问已经获得许可。哪一种配置管理模型符合这一限制?

    • A.拉取(pull)模型:每台主机上常驻的客户端定期获取并应用属于自己的状态目录。
    • B.拉取(pull)模型:中央服务器按定时器逐台建立会话,并为主机安装所需的客户端软件。
    • C.推送(push)模型:控制主机通过已获许可的远程登录通道连接并直接完成配置。✓ 答案
    • D.推送(push)模型:每台受管主机用本地定时任务克隆定义仓库并在本机应用。

    无代理的推送模型不需要在受管主机上常驻任何东西:控制主机通过已获许可的加密远程登录通道连接、完成工作后断开,只有控制主机需要安装管理软件。拉取模型依赖已安装的客户端定期联系中央服务器,而这正是策略所禁止的常驻守护进程。

    编号 QB-FNGTUX依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: agentless push versus agent-based pull configuration management报告此题的问题

  5. 5. 同一份配置定义需要为 Web 服务器设置不同的文档根目录、为数据库服务器设置不同的内存取值,同时又不能维护两份定义副本。应该如何安排?

    • A.在一份扁平清单中列出所有主机,然后用两组取值各应用一次该定义。
    • B.在一份扁平的清单中列出所有主机,再为每一类主机手工维护一份单独的定义副本,使取值有所不同。
    • C.在清单(inventory)中列出所有主机,按 web 与数据库分组,并按组设置不同的取值。✓ 答案
    • D.在清单中列出所有主机,并把最终取值直接写进复制到各主机的文件里。

    清单列出受管主机并把它们分组,绑定在各组上的变量提供不同的取值,因此一份带模板化配置文件的定义就能同时服务两类主机。复制定义或把最终取值写死,会破坏“只保留一份可审阅的权威来源”这一初衷。

    编号 QB-X5BN9X依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: inventory of managed hosts, host groups and group variables报告此题的问题

  6. 6. 评审时发现,提交到配置仓库的一个模板文件里以明文写着数据库口令。除了不够规范之外,为什么这被当作一次安全事件处理?

    • A.模板只在控制主机上渲染,因此其中的明文取值根本不可能被下发到受管主机。
    • B.仓库以压缩方式存储对象,明文取值会在文件下次变更时损坏已存储的对象。
    • C.明文取值每次运行都会被重新读取,定义因此不再幂等,每次都会报告变更。
    • D.凡能读取该仓库(包括其历史记录)的人现在都掌握了这个口令,事后删除也无法收回已公开的内容。✓ 答案

    配置仓库对所有有访问权限的人可读,并且保存每个文件的全部历史版本,因此一旦口令被提交就必须视为已泄露并立即轮换;在后续提交中删除它,历史中依然留有原文。密钥应放在加密存储或密钥管理服务中、由定义在运行时引用,绝不能以明文留在仓库里。

    编号 QB-GNU52Z依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: secret handling in infrastructure-as-code repositories报告此题的问题

  7. 7. 一次发布要求先在数据库主机上完成表结构迁移,然后才更新应用主机,负载均衡器的配置只能在这之后修改。这里描述的是哪一种能力?

    • A.编排,因为需要安排的是跨多台主机的工作顺序,而非单台主机内部的顺序。✓ 答案
    • B.配置管理,因为每台主机声明的目标状态本身就决定了该主机何时被变更。
    • C.无人值守安装,因为每台主机在安装时读取的应答文件决定了整个发布过程的顺序。
    • D.版本控制,因为仓库中提交的先后顺序决定了配置被应用的先后顺序。

    按规定顺序协调分布在不同机器上的步骤,这就是编排。配置管理声明的是每台主机应处于什么状态,而目标状态定义本身并不能表达“必须等一台主机完成后另一台才能开始”。

    编号 QB-Y5PYEY依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: orchestration across hosts compared with configuration management报告此题的问题

  8. 8. 应用这次定义变更会重启应用服务。负载均衡器后面有 30 台完全相同的应用主机,上次同时对所有主机应用变更导致了整体中断。正确的做法是什么?

    • A.同时对所有主机应用该变更,但让每台主机的服务重启随机延迟若干秒。
    • B.每次只对少数主机应用该变更,等这一批通过健康检查后再处理下一批。✓ 答案
    • C.只对一台主机应用该变更,其余主机长期保持旧状态,以便两者互相比较。
    • D.在业务低谷时段同时对所有主机应用该变更,此时短暂的整体中断可以接受。

    分批滚动发布、并以健康检查作为进入下一批的前提,可以在验证变更的同时让大部分主机继续对外提供服务,这样坏变更只损失一部分容量而不是整个服务。同时重启所有主机(即使错开几秒)仍可能让所有后端在同一时刻同时不可用。

    编号 QB-HN7G72依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: rolling deployment in batches during orchestrated releases报告此题的问题

  9. 9. 团队希望做到:除非自动化测试套件在某个变更上已经通过,否则该变更不可能进入共享主线。哪种安排能实现这一点?

    • A.让流水线每晚在主线上运行,并把自上次通过以来合入的所有变更全部回退。
    • B.让流水线在每次合并之后于主线上运行,测试失败时通知提交者。
    • C.让每位作者在本地跑一遍测试,并在变更说明里声明全部通过。
    • D.让流水线在待合并的变更上运行,并在其测试阶段通过之前阻止合并。✓ 答案

    持续集成把关的是合并动作:流水线在变更合入之前先在该变更上运行,测试阶段通过之前合并一直被阻止,这样主线在机制上始终可构建。只在合并之后才测试,或者相信作者自称本地通过,都会先让失败的变更进入共享分支,事后才补救。

    编号 QB-Z52BMZ依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: CI/CD pipelines and shift-left testing报告此题的问题

  10. 10. 每一个通过流水线的变更都会被构建、测试并打包成候选发布版本,但推送到生产仍然需要发布负责人审批。这属于哪种实践?只改动哪一点就会变成另一种?

    • A.持续部署;把自动化测试重新安排到审批环节之前,就会变成持续交付。
    • B.持续集成;在测试之后再加一个打包阶段,就会变成持续部署。
    • C.持续交付;在发布到生产前再增加一道审批,就会变成持续集成。
    • D.持续交付;去掉人工审批、让通过的构建自动发布,就变成持续部署。✓ 答案

    持续交付是指每个通过的构建都已被证明可以发布,但何时发布仍由人决定;持续部署去掉了这个决定,通过的构建会自动晋级到生产。两者的区别在于是否存在人工发布关卡,而测试和打包是两种实践共有的。

    编号 QB-MASA2V依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: continuous delivery compared with continuous deployment报告此题的问题

  11. 11. 某个缺陷只在生产环境出现。排查发现每个环境都各自从源码独立构建应用,因此生成的二进制文件并不相同。哪种做法能消除这类问题?

    • A.在每个环境分别重新构建,但固定编译器和库的版本,使各次构建的结果完全一致。
    • B.只构建一次产物并保存,再让同一份产物依次晋级到测试、预发布和生产环境。✓ 答案
    • C.在每个环境分别重新构建,随后比对校验和,并在校验和不一致的地方再构建一次。
    • D.先在生产环境构建,再把该环境的源码树复制回测试和预发布环境以保持一致。

    只构建一次产物、并让同一份已保存的产物逐级晋级,意味着“被测试的就是被部署的”,缺陷就不可能来自各环境之间的构建差异。在每个环境分别重新构建会重新引入构建期差异,于是生产环境里运行的那个二进制文件从来没有通过过测试。

    编号 QB-5TXFMV依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: CI/CD pipeline artifacts and promotion between environments报告此题的问题

  12. 12. 流水线在每次提交时都会构建、测试并发布一个归档包。随后由工程师下载该归档包并手工复制到各台服务器上。为什么这还不能算自动化部署?

    • A.有人下载压缩包时校验和会丢失,服务器因此无法验证自己收到的内容。
    • B.流水线只有在同一份定义中声明了部署阶段,才可能发布压缩包。
    • C.手工复制总会落到错误的位置,因为流水线的环境变量在此处并不存在。
    • D.最后一步既没有记录也无法由机器重复执行,部署结果因此取决于由谁来操作。✓ 答案

    自动化部署是以代码定义、由流水线触发、无需人工介入即可重复执行的。手工复制既没有记录也没有经过评审,还会因执行者不同而变化,因此正是这一步必须挪进流水线,之后才谈得上自动化部署。

    编号 QB-NA5N7W依据: CompTIA Linux+ exam objectives, Automation, Orchestration and Scripting domain: CI/CD pipeline automation of the deployment stage报告此题的问题

  13. 13. 工作区中有三个文件被修改过。其中只有两处改动应进入下一次提交,第三处必须继续保持为本地未提交的修改。正确的做法是什么?

    • A.提交全部三个文件,并把第三个文件加入忽略列表,使其不再被记录。
    • B.先提交全部三个文件,再修补该提交,把第三个文件从其中撤回。
    • C.把需要的两个文件加入暂存区后提交,因为提交记录的正是暂存区中的内容。✓ 答案
    • D.先把三个文件全部 stash,然后提交,因为提交取自最近的一条 stash 记录。

    提交记录的是暂存区的内容,而不是整个工作区,因此只把需要的两个文件加入暂存区,提交的就恰好是这两处改动,第三处仍是未提交的本地修改。忽略列表对已被跟踪的文件不起作用,而 stash 是把改动从工作区取走而不是提交它们。先全部提交再用修补把第三个文件撤回只是绕弯的补救,并非正确做法。

    编号 QB-6TATSW依据: Git documentation, git-add and git-commit manual pages: the index (staging area) as the source of a commit报告此题的问题

  14. 14. 一个长期存在的特性分支已经落后于主线。团队希望该分支的工作以直线形式接在当前主线末端之上,而不是通过一个合并提交连接。变基(rebase)做的是什么,又带来什么限制?

    • A.它只把分支标签移到新基点而不改动任何提交,所以别人手中的副本依然有效。
    • B.它把该分支的提交在新基点上重放为新的提交,因此不能用于别人已经获取过的提交。✓ 答案
    • C.它把两条历史合成一个有两个父提交的新提交,正是这样才让主线历史保持线性。
    • D.它丢弃分支上独有的提交、只保留最新的一个,因此不会再产生冲突。

    变基会在新基点之上写入具有新身份的提交,这正是能得到没有合并提交的线性历史的原因。由于原有提交是被替换而不是保留,对别人已经获取过的提交做变基,会让他们手上出现同一份改动的两个版本,因此变基只能用于尚未公开的提交。

    编号 QB-PAGYCX依据: Git documentation, git-rebase manual page: replaying commits and the warning against rebasing published commits报告此题的问题

  15. 15. 一个引入缺陷的提交几天前已经推送到共享远端,好几位同事也已经拉取过它。撤销这个提交的恰当方式是什么?

    • A.改写历史删掉该提交,再强制推送到远端,因为这个错误必须彻底消失。
    • B.删除远端上的共享分支,再推送一个只包含所需提交的新分支。
    • C.把本地分支重置到该提交之前,然后从那里继续提交新的工作。
    • D.新建一个提交来抵消该变更,同时保持已公开的历史对所有人不变。✓ 答案

    一旦提交已经公开且别人手里也有,安全的撤销方式是新增一个抵消其内容的提交,因为这样每个已有克隆的历史都仍然有效,只是追加了一次修正。改写已公开的历史并强制推送,会破坏所有已包含旧提交的克隆,迫使每位同事各自修补自己的副本。

    编号 QB-7TN5YX依据: Git documentation, git-revert manual page: undoing a commit that has already been shared报告此题的问题

  16. 16. 发布数月之后,运维人员必须还能取出当初实际发布的那份代码,尽管当时发布所用的分支此后又有了许多新提交。发布时本应做什么?

    • A.为该发布提交打标签,因为标签始终指向固定的那一个提交,而分支标签会随新提交移动。✓ 答案
    • B.记下发布的日期,因为可以在历史中检索当天处于最新位置的提交。
    • C.保留构建好的安装包,因为事后无法再确定是哪个提交产生了它。
    • D.把分支名写进发布说明,因为分支名总能解析到当初发布的那份代码。

    标签是指向某一个特定提交的固定命名引用,因此即使分支早已向前推进,它仍能准确标识当初发布的代码。分支名总是解析到该分支上最新的提交,所以不能用来指代过去的某次发布。

    编号 QB-QAUAJY依据: Git documentation, git-tag manual page: tags as fixed references to a release commit报告此题的问题

  17. 17. 一个自动生成的日志文件被误提交,现在每次运行后都显示为已修改。管理员把它的路径加入了仓库的忽略列表,但它仍然显示为已修改。为什么?

    • A.忽略列表只能匹配目录,因此其中指向单个文件的条目在读取时会被丢弃。
    • B.忽略列表要等到创建下一个标签之后才对仓库生效,所以现在还没有起作用。
    • C.忽略列表只对未被跟踪的路径生效,因此还必须把该文件从跟踪中移除。✓ 答案
    • D.忽略列表是从远端获取的,因此该条目必须先推送,本地副本才会遵守它。

    忽略规则只对尚未被跟踪的路径生效,因此已经提交过的文件仍处于被跟踪状态,会继续被报告为已修改。必须先把它从跟踪中移除(同时保留磁盘上的文件),忽略条目才会对它起作用。

    编号 QB-8TZF5Z依据: Git documentation, gitignore manual page: ignore patterns apply only to untracked files报告此题的问题

  18. 18. 某助手生成了一个用于轮转并压缩日志文件的 shell 函数,粗看似乎没有问题。管理员的进度已经落后。负责任的做法是什么?

    • A.现在就提交并在生产环境运行,如果首次执行出问题再从备份恢复。
    • B.逐行阅读并确认其行为符合预期,先在非生产系统上测试,之后才投入使用。✓ 答案
    • C.原样提交,并在提交说明中注明这段代码是生成的,因此由审阅者承担相应责任。
    • D.先在生产环境运行,再请助手解释这段代码,把这当作审阅环节。

    生成的代码由提交它的人负责:它可能存在细微错误、对当前发行版系列已经过时,或带有组织无法接受的许可条款,而这些都不是粗看就能发现的。逐行阅读并在生产环境之外实际运行,才是真正的审阅,而这项审阅不能交给写出这段代码的工具来做。

    编号 QB-RA7NQZ依据: CompTIA Linux+ exam objectives, responsible use of AI: avoid copy and paste without review, verify output报告此题的问题

  19. 19. 在排查一份失败的自动化定义时,管理员想把整个文件粘贴给一个托管式助手。该文件中含有一个 API 令牌、若干内部主机名和一个客户账号标识。首先应该做什么?

    • A.把文件原样上传,因为提示词只是临时内容,会话关闭后即被丢弃。
    • B.先删除令牌和可识别信息,或者在整个会话中改用本地部署的模型。✓ 答案
    • C.把文件原样粘贴,但附上一句话,禁止该服务保留内容或用于训练。
    • D.只提供其中的凭据,因为单独的令牌无法关联到它所属的那个系统。

    提交给托管模型的内容会脱离组织的控制,并可能被保留或用于训练,因此必须先剥离凭据、内部标识和客户数据,或者改用让数据留在组织内部的本地部署模型。在提示词里写一句禁止保留只是一种请求,并不是可强制执行的控制措施,而具体如何选择还要遵守公司关于可用工具的规定。

    编号 QB-9TCTA2依据: CompTIA Linux+ exam objectives, responsible use of AI: data governance and private versus public models报告此题的问题

  20. 20. 某助手返回了一条命令,用于删除某个目录树下的过期文件,其中用到了管理员从未用过的两个选项。正确的处理方式是什么?

    • A.先阅读该命令及其选项的手册页,再拿一份可丢弃的数据副本试验一次。✓ 答案
    • B.以提升后的权限在生产目录上运行,因为权限不足才是最常见的失败原因。
    • C.向助手询问该命令是否安全,并把这个回答当作对命令的验证结果。
    • D.直接在生产目录上运行,因为返回的命令在给出之前已针对本系统校验过。

    破坏性命令无论是生成的还是手打的,破坏力完全一样,而生成的命令行常常带有实际行为与其说明不符的选项。在本机手册页中逐个核对选项,并先拿可丢弃的数据演练一遍,才是真正的验证;让工具为自己的输出作保,什么也验证不了。

    编号 QB-YJG6MM依据: CompTIA Linux+ exam objectives, responsible use of AI: verify generated output and test outside production报告此题的问题

本考试的其他主题

练习题依据 CompTIA 公布的 Linux+ 考试大纲及 Linux 系统管理的通行实践编写。CompTIA 和 Linux+ 是 CompTIA 的商标,Linux 是 Linus Torvalds 的注册商标;本网站与 CompTIA 无关联,也未获其认可。真实考试除选择题外还包含实操题(performance-based questions),要求在模拟环境中实际完成任务——四选一的题型无法复现这一部分,因此本题库覆盖的是知识部分,请同时在真实系统上动手练习。CompTIA 会定期修订大纲并为每个版本编号:报考前请向 CompTIA 确认现行大纲、考试代码与报考要求。 关于 CompTIA Linux+ 认证 →