LV010-自定义开发环境
官方文档中已经说明,默认环境镜像为cnbcool/default-dev-env:latest
包含软件:
gitrsyncjqgit-lfsvimcurlwgetunziplsofnloadhtopnet-toolsdnsutilsopenssh-server。vscode插件:
coding-copilotvscode-yamlgithistorygitblamegit-graphvscode-yamllive-server
但是对于我来说,其实是不够用的,我还希望可以安装gcc、make、cmake等嵌入式开发常用的工具,这个时候我们也是可以自定义开发环境的。
一、通过 docker 镜像指定开发环境
可以通过在 .cnb.yml 编写远程开发事件流水线,并指定pipeline.docker.image 指定开发环境镜像。
# .cnb.yml
$:
vscode:
- docker:
# 指定开发环境镜像,可以是任意可访问的镜像。
# 如果 image 指定的镜像中已安装 code-server 代码服务,将使用单容器模式启动开发环境
# 如果 image 指定的镜像中未安装 code-server 代码服务,将使用双容器模式启动开发环境
# 如下镜像为 CNB 默认开发环境镜像,已安装代码服务,将使用单容器模式启动开发环境
# 可按需替换为其他镜像
image: cnbcool/default-dev-env:latest
services:
- vscode
- docker
# 开发环境启动后会执行的任务
stages:
- name: 查看当前路径下文件
script:
- echo "当前路径为 $(pwd)"
- ls -al.cnb.yml 文件中的 script 部分可以运行多个命令。可以通过以下几种方式实现:
多行命令:直接在
script下以多行的形式列出多个命令,每个命令占一行。使用
&&或;:将多个命令通过&&(前一个命令成功才执行下一个)或;(无论前一个命令是否成功都执行下一个)连接起来。
然后我们关闭开发环境重新启动开发环境,我们可以在【云原生构建】这里看到启动流程:

之前启动的流程也都在这里,这个就是准备开发环境的流水线,我们可以进去看一下:

会看到命令都执行了。
二、通过 Dockerfile 自定义开发环境
我们还可以可以自行编写 Dockerfile 来自定义开发环境。在仓库根目录下增加 .ide/Dockerfile 文件,在 Dockerfile 中自由定制开发环境。
如果未自定义启动流水线,启动开发环境时使用默认流水线创建开发环境。 默认流水线会优先使用 .ide/Dockerfile 构建一个镜像,作为开发环境基础镜像。
注意:启动开发环境的默认流水线中,同时配置了 默认镜像 和 .ide/Dockerfile, 如果 .ide/Dockerfile 不存在或构建失败,会使用 默认镜像 作为开发环境基础镜像。 如果遇到启动的环境不符合预期,可以查看构建日志 prepare 阶段 .ide/Dockerfile 是否构建成功。
我们定义一个Dockerfile,使用cnbcool/default-dev-env:latest作为基础镜像,然后里面安装一下gcc、make、cmake等命令:
FROM cnbcool/default-dev-env:latest
# 安装 gcc, make, cmake
RUN apt-get update && apt-get install -y \
gcc \
make \
cmake \
&& rm -rf /var/lib/apt/lists/*然当然其实也可以在前面的.cnb.yml文件的script中添加apt-get命令来安装所需命令,但是这里还是学习一下自定义Dockerfile。然后我们提交,重新开启云原生开发,看一下环境中是否有这些命令:
显然失败了,这是为什么?我们的 .cnb.yml 中的 image 字段指向一个已经存在的镜像,这个时候构建工具会直接使用该镜像,那么 .ide/Dockerfile 中的内容将不会生效。这个时候我们可以选择注释掉image字段,或者采用同时定义开发环境和启动流程的方式,直接将.cnb.yml修改为以下内容:
# .cnb.yml
$:
vscode:
- docker:
# 指定开发环境镜像,可以是任意可访问的镜像。
# 如果 image 指定的镜像中已安装 code-server 代码服务,将使用单容器模式启动开发环境
# 如果 image 指定的镜像中未安装 code-server 代码服务,将使用双容器模式启动开发环境
# 如下镜像为 CNB 默认开发环境镜像,已安装代码服务,将使用单容器模式启动开发环境
# 可按需替换为其他镜像
# image: cnbcool/default-dev-env:latest
build: .ide/Dockerfile
services:
- vscode
- docker
# 开发环境启动后会执行的任务
stages:
- name: 查看当前路径下文件
script:
- echo "当前路径为 $(pwd)"
- ls -al然后我们看一下构建日志 prepare 阶段,就会发现这里确实开始安装这些命令了:

然后启动成功后,查看各个软件版本信息:
➜ /workspace git:(main) gcc --version
gcc (Debian 12.2.0-14+deb12u1) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
➜ /workspace git:(main) make --version
GNU Make 4.3
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
➜ /workspace git:(main) cmake --version
cmake version 3.25.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).会发现命令都是已安装好的了。