Workspace
Workspace is a remote development solution built on cloud-native principles, supporting remote connections via web and VSCode clients.
# Design Principles
Declarative
: Based on the Docker ecosystem, Dockerfile declares the development environment and manages it alongside the code.Fast Startup
: Even for large repositories, it is possible to prepare the code and environment within seconds.On-Demand Usage
: Development resources are acquired as needed and quickly reclaimed during idle times to avoid resource waste
# One-Click Creation of Development Environment
You can click the "Workspace" button in the branch page to create a development environment with a single click.
No configuration is required, and it will directly open a default development
environment using cnbcool/default-dev-env:latest
as the base image.
# Customizing the Development Environment
If you want to start a custom development environment when clicking the "Workspace" button on the branch page,
you can add a .ide/Dockerfile
file in the root directory of the repository. In the Dockerfile,
you can freely customize the development environment. When starting the development environment,
a custom image will be built using the .ide/Dockerfile
as the base image.
# .ide/Dockerfile
FROM node:20
# Install additional software as needed
# RUN apt-get update && apt-get install -y git
# Install code-server and commonly used VSCode extensions
RUN curl -fsSL https://code-server.dev/install.sh | sh \
&& code-server --install-extension redhat.vscode-yaml \
&& code-server --install-extension dbaeumer.vscode-eslint \
&& code-server --install-extension waderyan.gitblame \
&& code-server --install-extension mhutchie.git-graph \
&& code-server --install-extension donjayamanne.githistory \
&& code-server --install-extension tencent-cloud.coding-copilot \
&& echo done
# Install SSH service to support Remote-SSH access to the development environment from the VSCode client
RUN apt-get update && apt-get install -y wget unzip openssh-server
# Specify character set to support inputting Chinese characters in the command line
# (choose the appropriate character set as needed)
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
# Customizing the Creation Process
If you want to use a custom YAML pipeline configuration when clicking the "Workspace" button on the branch page,
you can add a .cnb.yml
file in the root directory of the repository and add the following configuration:
# .cnb.yml
$:
# VSCode event: specifically for starting remote development from the page
vscode:
- docker:
# Use a custom image as the development environment
image: node:20
services:
- vscode
- docker
stages:
- name: ls
script: ls -al
# Customizing Resource Specifications
You can declare the required development resources using runner.cpus
,
with a maximum of 64 cores
and memory equal to cpus x 2(GB).
# .cnb.yml
$:
vscode:
- runner:
cpus: 64
docker:
build: .ide/Dockerfile
services:
- vscode
- docker
stages:
- name: ls
script: ls -al
# Custom Startup Events
By using .cnb.yml, you can declare the automatic creation of a development environment when specific events are triggered. The recommended trigger events are:
vscode
: Create a development environment when you click theLaunch Cloud Native Development
button on the repository pagebranch.create
: Create a development environment when creating a branchapi_trigger
: Custom event triggers the creation of a development environmentweb_trigger
: Web page custom event triggers the creation of a development environment
# .cnb.yml
# Match all branches
(**):
# Create a development environment when creating a branch
branch.create:
- name: vscode
services:
# Declare the use of the vscode service
- vscode
docker:
# Custom development environment
build: .ide/Dockerfile
stages:
- name: Execute custom script
script:
- npm install
- npm run start
# Custom Availability Time
The default availability time for Cloud Native Development is after the pipeline preparation (prepare
) stage is completed
(code-server
code service starts during the preparation stage) and before the stages
task is executed.
If you want to enter the development environment after executing certain tasks, that is,
delay the time to enter the development environment,
you can use the vscode:go built-in task.
With this task, after starting Cloud Native Development,
the loading
page will delay entering the Cloud Native Development entry selection page.
You can only enter the entry selection page after the vscode:go
task is executed.
Note that using the vscode:go
task will increase the waiting time.
You can put tasks that must be executed before entering the development environment before vscode:go
,
and tasks that are executed after entering the development environment after vscode:go
.
If there is no task that must be executed before entering the development environment, there is no need to use vscode:go
.
When the stages
task execution fails, whether the remote development ends:
- Using
vscode:go
: If the task beforevscode:go
fails, the development environment will be destroyed. - Using
vscode:go
: If the task aftervscode:go
fails, the development environment will not be destroyed. - Not using
vscode:go
: If thestages
task execution fails, the development environment will not be destroyed.
# Custom Cloud Native Development Launch Button
You can configure the cloud native development launch button as needed, such as: button name, button description, whether the button is disabled, and the number of CPU cores to launch.
Add a .cnb/settings.yml
file in the repository.
# .cnb/settings.yml
workspace:
# Customize the cloud-native development launch button on the branch page/repository homepage
launch:
# The following parameters are all optional
button:
# Button name, default is: Cloud Native Development
name: Cloud Native Launch
description: Launch remote development to quickly experience the cloud environment
# Number of CPU cores, default is: 8. Only effective for the default template; if there is a custom cloud-native development launch pipeline, this configuration is invalid
cpus: 8
# Whether to disable the button, default is: false (not disabled). true means disabled
disabled: false
# After clicking the cloud-native development button, the environment will automatically open the WebIDE upon creation (regardless of whether client-side connection for remote development is supported).
# If OpenSSH is not installed in the development environment (only WebIDE is supported): Regardless of whether this parameter is configured as true or false, the WebIDE will automatically open upon environment creation.
autoOpenWebIDE: true
Note: If the file fails to parse or exceeds the size limit, the configuration will not be applied.