日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Github CodeSpaces 使用及定制化

發(fā)布時(shí)間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Github CodeSpaces 使用及定制化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Github CodeSpaces 使用及定制化

Intro

Github 最近推出了很多令人興奮的新功能,最近使用了 Github CodeSpaces,覺(jué)得還是挺不錯(cuò)的,CodeSpaces 相當(dāng)于自己有了一個(gè)云主機(jī),真正實(shí)現(xiàn)了云端開(kāi)發(fā),CodeSpaces 和 Github 做了很好的集成,可以很方便的針對(duì) Github 項(xiàng)目做修改,而且可以根據(jù)自己的需要自定義服務(wù)器配置和環(huán)境,很多開(kāi)源項(xiàng)目已經(jīng)集成了 CodeSpaces 的支持,可以很方便的在線開(kāi)發(fā)。

使用示例

我們以 asp.net core 的項(xiàng)目為例,來(lái)建一個(gè) Codespaces,ASP.NET Core 已經(jīng)實(shí)現(xiàn)了較好的 Codespaces 支持,我們可以直接使用 Codespaces 來(lái)對(duì) ASP.NET Core 的源碼進(jìn)行編譯和貢獻(xiàn)。

Github 針對(duì) CodeSpaces 提供了支持,在原來(lái)克隆倉(cāng)庫(kù)的地方多了一個(gè)使用 Codespaces 的選項(xiàng)

新建之后,就會(huì)開(kāi)始創(chuàng)建一個(gè)容器來(lái)運(yùn)行我們的 codespace

在上面的截圖中可以看到,我們也可以在本地的 VSCode 中打開(kāi) codespace,這需要我們本地 VSCode 安裝一個(gè) Github CodeSpaces 插件即可,但是既然要云端開(kāi)發(fā)在本地打開(kāi)干嘛呢,還是完全在云端更能體現(xiàn)其優(yōu)勢(shì)吧

等待容器構(gòu)建完成后就會(huì)進(jìn)入到我們的 codespace 中,第一次創(chuàng)建的話會(huì)執(zhí)行一個(gè)腳本,執(zhí)行完成后,我們就可以編譯自己想要編譯的項(xiàng)目了,這里我選擇了一個(gè)較小的一個(gè)項(xiàng)目 Localization 項(xiàng)目,在 對(duì)應(yīng)的目錄下執(zhí)行 dotnet build 來(lái)編譯項(xiàng)目,可以看到成功編譯通過(guò)了

如果你要給微軟提 PR,就可以很方便的進(jìn)行編譯測(cè)試自己的變更,完全是在云端進(jìn)行,不需要在本地安裝任何環(huán)境,而且在創(chuàng)建 Codespace 之后也不需要安裝任何環(huán)境,在創(chuàng)建 Codespace 的過(guò)程中就完成所需環(huán)境的安裝配置(通常要提 PR 的話,需要先 Fork 原始的項(xiàng)目,在自己 Fork 的項(xiàng)目上創(chuàng)建 Codespace,然后再來(lái)修改和提交更新)

再回到 asp.net core 項(xiàng)目之后,我們就可以在 Codespaces 處看到我們剛才創(chuàng)建的 Codespace 了,我們?cè)俅未蜷_(kāi)就不再需要重新創(chuàng)建了,之前做的變更也會(huì)保留下來(lái)

定制 CodeSpaces

Codespaces 默認(rèn)的配置會(huì)支持絕大多數(shù)語(yǔ)言,會(huì)安裝很多很多環(huán)境,針對(duì)大多數(shù)項(xiàng)目來(lái)說(shuō)是可以拿來(lái)即用的,但是對(duì)于某一些項(xiàng)目可能支持不太好,比如說(shuō),現(xiàn)在默認(rèn)是沒(méi)有 .NET 6 的 SDK 的,.NET 6 目前還是預(yù)覽版,目前默認(rèn)配置并沒(méi)有 .NET 6 的環(huán)境,如果你的項(xiàng)目是 .NET 6 的,那可能就要自定義 Codespace 的環(huán)境了

Codespace 是以容器技術(shù)為基礎(chǔ)的,運(yùn)行在微軟的 Azure 虛擬機(jī)之上的,第一次根據(jù)配置創(chuàng)建容器之后會(huì)把當(dāng)前項(xiàng)目克隆下來(lái)并根據(jù)配置初始化 VS Code,安裝必要的插件等

要自定義 Codespace 的配置,有多種方式,整體環(huán)境配置就是配置容器,有三種方式,可以直接指定要使用的鏡像,也可以提供一個(gè)自定義的 Dockerfile 去構(gòu)建,也可以通過(guò) docker-compose 來(lái)創(chuàng)建一個(gè)稍微復(fù)雜一些的環(huán)境

而且我們可以配置 VS Code 需要的插件,還可以暴露端口到公網(wǎng)上

要自定義 Codespace 的配置,我們可以通過(guò)在項(xiàng)目根目錄下創(chuàng)建一個(gè) .devcontainer 目錄,在此目錄下創(chuàng)建一個(gè) devcontainer.json 配置所需的配置,具體的配置項(xiàng)目可以參考下面的示例和 ?VS Code 的文檔 <https://code.visualstudio.com/docs/remote/devcontainerjson-reference>

如果不確定配置是不是正確,可以在本地用 VS Code 來(lái)測(cè)試,需要安裝 Remote Container 插件,然后在 Remote Container 中打開(kāi)項(xiàng)目即可測(cè)試了

Samples

Docker-Image

首先我們來(lái)看一個(gè)最簡(jiǎn)單的示例,自定義鏡像,示例配置如下:

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

上面的 image 就是指定我們使用鏡像,extensions 是我們 VS Code 中想要安裝的插件

Dockerfile

再來(lái)看一個(gè) Dockerfile 的示例,在 .devcontainer 目錄中添加一個(gè) 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 來(lái)指定 Dockfile, 默認(rèn)的 Dockerfile 構(gòu)建時(shí)上下文是配置文件所在目錄,如果需要可以配置 context 或者 build.context 來(lái)配置構(gòu)建上下文)

Docker-compose

接著我們來(lái)看一個(gè) docker-compose 的示例,和 Dockerfile 類似的,我們?cè)?.devcontainer 目錄下添加一個(gè) 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"] }

這里項(xiàng)目里依賴 redis,所以在 compose 文件中聲明了一個(gè) redis 容器,這樣我們?cè)诖a里也可以使用這個(gè) redis 來(lái)做測(cè)試了

Port-forward

我們也可以指定 port-forward,這樣就可以通過(guò)一個(gè)公網(wǎng)域名來(lái)訪問(wèn) codespace 里的服務(wù)了,配置示例如下 forwardPorts

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

使用 dotnet run 運(yùn)行項(xiàng)目之后,就可以通過(guò)公網(wǎng)訪問(wèn)了

可以看到 5000 端口當(dāng)前是 active 的,我們就可以通過(guò) 5000 端口對(duì)應(yīng)的鏈接來(lái)訪問(wèn)了(如果想要臨時(shí)添加某一個(gè)端口,直接通過(guò)上面的 Add Port 來(lái)配置就可以了),效果如下:

這樣就有了一個(gè)公網(wǎng)可以訪問(wèn)的服務(wù)了

More

Codespaces 標(biāo)準(zhǔn)化了開(kāi)發(fā)環(huán)境,其他人需要編譯時(shí)不需要再安裝這個(gè)安裝那個(gè),使用同樣的環(huán)境開(kāi)發(fā)運(yùn)行就可以了,統(tǒng)一了開(kāi)發(fā)環(huán)境,而且基于云端,性能還不錯(cuò),即使沒(méi)有電腦在身邊,甚至也是可以通過(guò)手機(jī)來(lái)操作的,非常的方便,而且環(huán)境都是配置好的,去網(wǎng)吧寫個(gè)代碼還要裝環(huán)境呢,這下好了,啥環(huán)境都不用裝了

如果你的開(kāi)源項(xiàng)目也希望別人功能來(lái)參與功能,強(qiáng)烈推薦為你的項(xiàng)目提高較好的 CodeSpaces 貢獻(xiàn)體驗(yàn),現(xiàn)在 ASP.NET Core、?.NET Runtime?、StackExchange.Redis 以及其他很多開(kāi)源項(xiàng)目已經(jīng)提供了?CodeSpaces 的支持,上面的示例也是來(lái)自于我的幾個(gè)開(kāi)源項(xiàng)目配置,可以參考文末的參考鏈接

目前個(gè)人用戶有數(shù)量限制,如果達(dá)到限制了可以刪除之前的 Codespace, 所有的 Codespaces 可以在 https://github.com/codespaces 看到

Codespaces 還有很多功能強(qiáng)大的配置就不一一細(xì)說(shuō)了,可以自己去了解一下

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

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Github CodeSpaces 使用及定制化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。