Github CodeSpaces 使用及定制化

Github CodeSpaces 使用及定制化

Intro

Github 最近推出了很多令人兴奋的新功能,最近使用了 Github CodeSpaces,觉得还是挺不错的,CodeSpaces 相当于自己有了一个云主机,真正实现了云端开发,CodeSpaces 和 Github 做了很好的集成,可以很方便的针对 Github 项目做修改,而且可以根据自己的需要自定义服务器配置和环境,很多开源项目已经集成了 CodeSpaces 的支持,可以很方便的在线开发。

使用示例

我们以 asp.net core 的项目为例,来建一个 Codespaces,ASP.NET Core 已经实现了较好的 Codespaces 支持,我们可以直接使用 Codespaces 来对 ASP.NET Core 的源码进行编译和贡献。

Github 针对 CodeSpaces 提供了支持,在原来克隆仓库的地方多了一个使用 Codespaces 的选项

a5e35c088531e6f636ca696a55b3290a.png

新建之后,就会开始创建一个容器来运行我们的 codespace

39f8355e3e0b9265ae4b05eb31d66672.png

在上面的截图中可以看到,我们也可以在本地的 VSCode 中打开 codespace,这需要我们本地 VSCode 安装一个 Github CodeSpaces 插件即可,但是既然要云端开发在本地打开干嘛呢,还是完全在云端更能体现其优势吧

等待容器构建完成后就会进入到我们的 codespace 中,第一次创建的话会执行一个脚本,执行完成后,我们就可以编译自己想要编译的项目了,这里我选择了一个较小的一个项目 Localization 项目,在 对应的目录下执行 dotnet build 来编译项目,可以看到成功编译通过了

292f8738470ba4681472d0e6a794a64a.png

如果你要给微软提 PR,就可以很方便的进行编译测试自己的变更,完全是在云端进行,不需要在本地安装任何环境,而且在创建 Codespace 之后也不需要安装任何环境,在创建 Codespace 的过程中就完成所需环境的安装配置(通常要提 PR 的话,需要先 Fork 原始的项目,在自己 Fork 的项目上创建 Codespace,然后再来修改和提交更新)

再回到 asp.net core 项目之后,我们就可以在 Codespaces 处看到我们刚才创建的 Codespace 了,我们再次打开就不再需要重新创建了,之前做的变更也会保留下来

434cba092992c81fa2cd1fc3b8726758.png

定制 CodeSpaces

Codespaces 默认的配置会支持绝大多数语言,会安装很多很多环境,针对大多数项目来说是可以拿来即用的,但是对于某一些项目可能支持不太好,比如说,现在默认是没有 .NET 6 的 SDK 的,.NET 6 目前还是预览版,目前默认配置并没有 .NET 6 的环境,如果你的项目是 .NET 6 的,那可能就要自定义 Codespace 的环境了

Codespace 是以容器技术为基础的,运行在微软的 Azure 虚拟机之上的,第一次根据配置创建容器之后会把当前项目克隆下来并根据配置初始化 VS Code,安装必要的插件等

1f880518c3d4b47eb120b4fdc220fdef.png

要自定义 Codespace 的配置,有多种方式,整体环境配置就是配置容器,有三种方式,可以直接指定要使用的镜像,也可以提供一个自定义的 Dockerfile 去构建,也可以通过 docker-compose 来创建一个稍微复杂一些的环境

而且我们可以配置 VS Code 需要的插件,还可以暴露端口到公网上

要自定义 Codespace 的配置,我们可以通过在项目根目录下创建一个 .devcontainer 目录,在此目录下创建一个 devcontainer.json 配置所需的配置,具体的配置项目可以参考下面的示例和  VS Code 的文档 <https://code.visualstudio.com/docs/remote/devcontainerjson-reference>

如果不确定配置是不是正确,可以在本地用 VS Code 来测试,需要安装 Remote Container 插件,然后在 Remote Container 中打开项目即可测试了

Samples

Docker-Image

首先我们来看一个最简单的示例,自定义镜像,示例配置如下:

{"image": "mcr.microsoft.com/dotnet/sdk:6.0",// Install needed extensions"extensions": ["ms-dotnettools.csharp","davidanson.vscode-markdownlint"]
}

上面的 image 就是指定我们使用镜像,extensions 是我们 VS Code 中想要安装的插件

Dockerfile

再来看一个 Dockerfile 的示例,在 .devcontainer 目录中添加一个 Dockerfile

FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine
RUN apk add git

devcontainer.json

{"name": "CodeSpace","dockerFile": "Dockerfile",// Install needed extensions"extensions": ["ms-dotnettools.csharp","davidanson.vscode-markdownlint"]
}

上面的 dockerFile 就是配置的自定义 Dockerfile(也可以使用 build.dockerfile 来指定 Dockfile, 默认的 Dockerfile 构建时上下文是配置文件所在目录,如果需要可以配置 context 或者 build.context 来配置构建上下文)

Docker-compose

接着我们来看一个 docker-compose 的示例,和 Dockerfile 类似的,我们在 .devcontainer 目录下添加一个 docker-compose.yml 文件

version: '3.7'services:dev-container:image: mcr.microsoft.com/dotnet/sdk:6.0-alpinevolumes:- ..:/workspace:cacheddepends_on:- redislinks:- "redis:redis"environment:- 'App_ConnectionStrings__Redis=redis'   command: /bin/sh -c "while sleep 1000; do :; done"redis:image: redis:6.2-alpine

然后在  devcontainer.json 文件中配置使用 docker-compose

{"name": "CodeSpace","service": "dev-container","dockerComposeFile": [    "docker-compose.yml"],"extensions": ["ms-dotnettools.csharp"]
}

这里项目里依赖 redis,所以在 compose 文件中声明了一个 redis 容器,这样我们在代码里也可以使用这个 redis 来做测试了

Port-forward

我们也可以指定 port-forward,这样就可以通过一个公网域名来访问 codespace 里的服务了,配置示例如下 forwardPorts

{"name": "Codespace","dockerFile": "Dockerfile","forwardPorts": [80, 5000], // [codespace-id]-[port].githubpreview.dev"extensions": ["ms-dotnettools.csharp","davidanson.vscode-markdownlint"]
}

使用 dotnet run 运行项目之后,就可以通过公网访问了

3749954b3a95f908dcb9b06fb044e65a.png

可以看到 5000 端口当前是 active 的,我们就可以通过 5000 端口对应的链接来访问了(如果想要临时添加某一个端口,直接通过上面的 Add Port 来配置就可以了),效果如下:

这样就有了一个公网可以访问的服务了

bfb39ca98b4e8857ac9e37a2435cad05.png

More

Codespaces 标准化了开发环境,其他人需要编译时不需要再安装这个安装那个,使用同样的环境开发运行就可以了,统一了开发环境,而且基于云端,性能还不错,即使没有电脑在身边,甚至也是可以通过手机来操作的,非常的方便,而且环境都是配置好的,去网吧写个代码还要装环境呢,这下好了,啥环境都不用装了

如果你的开源项目也希望别人功能来参与功能,强烈推荐为你的项目提高较好的 CodeSpaces 贡献体验,现在 ASP.NET Core、 .NET Runtime 、StackExchange.Redis 以及其他很多开源项目已经提供了 CodeSpaces 的支持,上面的示例也是来自于我的几个开源项目配置,可以参考文末的参考链接

目前个人用户有数量限制,如果达到限制了可以删除之前的 Codespace, 所有的 Codespaces 可以在 https://github.com/codespaces 看到

d7ad1ae23666c0e8828abec98f4bcc18.png

Codespaces 还有很多功能强大的配置就不一一细说了,可以自己去了解一下

References

  • https://github.com/features/codespaces

  • https://docs.github.com/en/codespaces/getting-started/quickstart

  • https://docs.github.com/en/codespaces/getting-started/deep-dive

  • https://code.visualstudio.com/docs/remote/create-dev-container#_use-docker-compose

  • https://github.com/microsoft/vscode-dev-containers

  • https://code.visualstudio.com/docs/remote/devcontainerjson-reference

  • https://www.telerik.com/blogs/introduction-github-codespaces

  • https://github.com/WeihanLi/dotnet-httpie/blob/dev/.devcontainer/devcontainer.json

  • https://github.com/WeihanLi/SparkTodo/tree/master/.devcontainer

  • https://github.com/WeihanLi/WeihanLi.Redis/tree/dev/.devcontainer

  • https://code.visualstudio.com/docs/remote/containers-tutorial

  • https://code.visualstudio.com/docs/remote/containers

  • https://docs.github.com/en/codespaces/customizing-your-codespace/personalizing-codespaces-for-your-account#dotfiles

  • https://github.com/microsoft/vscode-dev-containers/tree/main/containers/codespaces-linux

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nat+端口转发,使得宿主机secureCRT可以访问vbox里linux虚拟机

为什么80%的码农都做不了架构师&#xff1f;>>> 环境&#xff1a;vbox或者叫vitrualbox连接虚拟机&#xff0c;由于公司内网不能分配IP&#xff08;不知道是不是这个原因&#xff09;&#xff0c;虚拟机用桥接得不到IP&#xff0c;没法实现虚拟机和宿主互相访问&am…

java 四字节uid,Java入门教程-序列化版本号serialVersionUID的作用

原标题&#xff1a;Java入门教程-序列化版本号serialVersionUID的作用Java序列化是将一个对象编码成一个字节流&#xff0c;反序列化将字节流编码转换成一个对象。序列化是Java中实现持久化存储的一种方法&#xff1b;为数据传输提供了线路级对象表示法。Java的序列化机制是通过…

男人可以有多敷衍?

1 现在更流行「红茶女生」&#xff1f;&#xff08;via.白头叔&#xff09;▼2 谢谢&#xff0c;有被冒犯到&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 天使与恶魔▼4 男朋友可以多敷衍&#xff1f;▼5 你的高原红&#xff0c;像极了妈妈的巴掌印&#xff…

linux 内核代码构架图

转载于:https://www.cnblogs.com/kuainiao/archive/2012/12/17/2822384.html

Win11开始大范围推送!

微软宣布 Windows11 现已开始向更多符合最低硬件要求的电脑推送。预计到 2022 年年中&#xff0c;所有符合条件的电脑都可以免费升级到 Windows 11。微软将根据硬件条件、可靠性、使用时间&#xff0c;及其它会影响升级后使用体验的因素&#xff0c;为 Windows 10 电脑分阶段推…

puppet安装

一&#xff0e; 服务器端和客户端都需要做的操作。 1. 下载软件 wget http://puppetlabs.com/downloads/facter/facter-1.6.4.tar.gz wget http://downloads.puppetlabs.com/puppet/puppet-2.7.9.tar.gz 2. 安装ruby puppet是ruby开发的&#xff0c;所以需要安装。 Yum …

HTFS.Software.v7.3-ISO 1DVD(传热模拟,最新完全解密版)

工厂设计相关软件&#xff1a; Intergraph产品: Intergraph Intools Engineering Suite v5.2-ISO 1CD(国际顶级仪表工程的设计软件) Intergraph SmartPlant Enterprise 2007-ISO 2DVD Intergraph SmartPlant 3D 2009-ISO 1DVD Intergraph SmartPlant 3D v6.1 WinXP-ISO 1DVD I…

状态压缩 + 暴力 HDOJ 4770 Lights Against Dudely

题目传送门 题意&#xff1a;有n*m的房间&#xff0c;.表示可以被点亮&#xff0c;#表示不能被点亮&#xff0c;每点亮一个房间会使旁边的房间也点亮&#xff0c;有意盏特别的灯可以选择周围不同方向的房间点亮。问最少需要多少灯使得所有房间点亮 分析&#xff1a;需要被点亮的…

有什么看起来很难,但是其实很简单的题目

全世界只有3.14 % 的人关注了爆炸吧知识做题其实很简单今天超模君一进办公室就感觉充满“杀气”&#xff0c;果不其然&#xff0c;一抬头就看见小天拿着一张纸对着我坏笑。莫非这家伙又要我折纸&#xff1f;拿过纸张一看&#xff0c;虽然密密麻麻的一大堆公式&#xff0c;但我相…

iphone-common-codes-ccteam源代码 CCTestMacros.m

// // CCTestMacros.m // CCFC // // Created by xichen on 11-12-30. // Copyright 2011 ccteam. All rights reserved. // #import "CCTestMacros.h" implementation CCTestMacros end 可能有更新: googlecode链接地址&#xff1a;http://code.googl…

双11,2分钟狂挣20亿的神秘大厂,急招.NET!

双11小米开门红&#xff0c;2分钟不到突破20亿&#xff0c;于是机智的我又去逛了下小米的招聘官网&#xff1a;招5年左右.NET&#xff0c;35k左右&#xff0c;14薪&#xff0c;要求WPF和自动化&#xff0c;真香&#xff01;回首牛年2个跳槽季&#xff0c;招WPF的大厂太多了&…

炸了!刚刚数学家获得了2020年诺贝尔物理学奖!没想到诺奖也能蝉联.......

全世界只有3.14 % 的人关注了爆炸吧知识就在刚刚&#xff0c;万众瞩目的2020年诺贝尔奖物理学奖获得者确定了&#xff01;他们就是——天体物理学家&#xff08;该领域连续两年获得诺奖&#xff09;物理学奖得主罗格彭罗斯爵士&#xff08;Roger penrose&#xff09;&#xff0…

Perl深拷贝

使用mkdir可以创建一个目录&#xff0c;但只能创建一个目录。 使用mkpath则可以创建连续的子目录。在linux下使用cp -p同样可以实现同样的功能。 再使用File::Copy来拷贝。 1 use File::Path; 2 use File::Copy;3 sub writeSubFolder4 {5 my $root E:/perl_work/; 6 …

硬盘维护方法介绍

硬盘维护方法介绍 1、保持电脑工作环境清洁 硬盘以带有超精过滤纸的呼吸孔与外界相通&#xff0c;它可以在普通无净化装置的室内环境中使用&#xff0c;若在灰尘严重的环境下&#xff0c;会被吸附到PCBA的表面、主轴电机的内部以及堵塞呼吸过滤器&#xff0c;因此必须防尘。 还…

Envoy实现.NET架构的网关(五)集成Redis实现限流

.NET网关与Gateway实战-Envoy与kong课程什么是限流限流即限制并发量&#xff0c;限制某一段时间只有指定数量的请求进入后台服务器&#xff0c;遇到流量高峰期或者流量突增时&#xff0c;把流量速率限制在系统所能接受的合理范围之内&#xff0c;不至于让系统被高流量击垮。而E…

php写带分页的留言板,php中分页程序之基于留言板详解_PHP教程

文章是重点是讲php中的分页原理&#xff0c;同时我们是利用一个实现来讲解如何在php中实现分页&#xff0c;这个就是基于自己写的留方板程序了&#xff0c;有需要的朋友可以参考一下&#xff0c;很适合于初学者哦。分页的关键问题其实在于Mysql的一个关键字limite这个关键字后边…

使用 Daynamic 动态添加属性

所谓的Dynamic 动态类型&#xff0c;页面也要是动态的&#xff08;强撸&#xff09; 很简单的 直接上代码&#xff1a; //案例一 DynamicpersonCollection new ObservableCollection(); for (var i 0; i < 10; i) { dynamic p new ExpandoObject(); ((IDictionary<str…

豆瓣9分+纪录片,每一部都美到窒息......

全世界只有3.14 % 的人关注了爆炸吧知识自然类的纪录片一直是BBC的金字招牌&#xff0c;制作精良的纪录片&#xff0c;不仅能让孩子享受视觉的艺术&#xff0c;还能通过独特的视角去解读大自然&#xff0c;真正激发出孩子探索世界的热情。也适合大人影迷们在看了N部电影后视觉疲…

Android中常用到的权限

android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问"properties"表在checkin数据库中&#xff0c;改值可以修改上传 android.permission.ACCESS_COARSE_LOCATION 允许一个程序访问CellID或WiFi热点来获取粗略的位置 android.permission.ACCESS_FINE_LOC…

英语中十二个月份的由来

最近在学习英文&#xff0c; 先从月份开始喽~~把整理来的12个月份分享一下(*^__^*) 一月January在罗马传说中&#xff0c;有一位名叫雅努斯的守护神&#xff0c;生有先后两副脸&#xff0c;一副回顾过去&#xff0c;一副眺望未来。人们认为选择他的名字作为除旧迎新的第一个月月…