您好,登錄后才能下訂單哦!
本篇內容主要講解“Eclipse Che 7工作區的用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Eclipse Che 7工作區的用法”吧!
Eclipse Che工作區由devfile定義。 devfile是開發人員工作區中使用的所有內容的定義。
Che使用devfiles定義:
克隆項目
使用的瀏覽器IDE
預配置命令
您需要的工具
應用程序運行時定義
創建工作空間時,Che使用該定義為您初始化所有內容,并為您的工具和應用程序運行時運行所有容器。 Che還安裝文件系統卷,以使您的源代碼可用于工作空間。
可以使用項目源代碼對Devfiles進行版本控制。當您需要一個工作空間來修復舊的維護分支時,項目devfile為您提供了一個工作空間的定義,其中包含工具和確切的依賴關系以開始在舊分支上工作。使用它可以輕松地按需實例化工作區。
Che使用您在工作空間中使用的工具來維護devfile的最新信息:
工作區的項目(路徑,Git位置,分支)
執行日常任務(構建,運行,測試,調試)的命令
運行時環境(用于運行應用程序的容器映像)
Che-Theia插件,具有開發人員將在工作區中使用的工具,IDE功能和幫助程序(Git,Java支持,Sonarlint,Pull Request)
本節介紹如何使用您自己的現有devfile啟動Che工作區。
先決條件
Eclipse Che的運行實例。要安裝Eclipse Che的實例,請參見Che'quick-starts'。
在此Eclipse Che實例上定義的現有工作區從用戶儀表板創建工作區。
有幾種方法可以基于準備好的dev文件啟動Che工作區:
將devfile添加到Git源存儲庫,然后從該存儲庫創建工廠。
將devfile.yaml文件放在Git存儲庫的根目錄中。
通過打開以下URL執行工廠:
https:// <您的che-host> /f?url=https://github.com/ <mygroup> / <myrepo>
通過使用指向devfile原始內容的URL構造工廠來執行devfile,例如:
https:// <您的che-host> /f?url=https://pastebin.com/raw/ux6iCGaW
使用帶有chectl工具的workspace:start參數從devfile執行工作空間,如下所示:
$ chectl workspace:start --devfile=devfile.yaml
本節介紹如何為您的項目創建最小的devfile,以及如何在devfile中包含多個項目。
準備最小的devfile 足以運行工作空間的最小devfile由以下部分組成:
規格版本
名稱
apiVersion: 1.0.0 metadata: name: minimal-workspace
無需任何進一步配置,帶有默認編輯器的工作空間將隨其默認插件一起啟動,這些插件在Che Server上配置。 Che-Theia與Che Machine Exec插件一起配置為默認編輯器。
添加以下部分以實現更實用的工作空間:
組件列表:開發組件和用戶運行時
項目列表:源代碼存儲庫
命令列表:用于管理工作空間組件的操作,例如運行開發工具,啟動運行時環境等
apiVersion: 1.0.0 metadata: name: petclinic-dev-environment projects: - name: petclinic source: type: git location: 'https://github.com/spring-projects/spring-petclinic.git' components: - type: chePlugin id: redhat/java/latest
在devfile中指定多個項目 一個devfile可以指定多個項目。對于每個項目,請指定源存儲庫的類型,其位置以及(可選)還指定要將項目克隆到的目錄。
apiVersion: 1.0.0 metadata: name: example-devfile projects: - name: frontend source: type: git location: https://github.com/acmecorp/frontend.git - name: backend clonePath: src/github.com/acmecorp/backend source: type: git location: https://github.com/acmecorp/backend.git
在前面的示例中,定義了兩個項目,前端和后端。每個項目都位于其自己的存儲庫中。后端項目有一個特殊要求,即必須克隆到源根目錄下的src/github.com/acmecorp/ backend/目錄(由Che運行時隱式定義),而前端項目將被克隆到源目錄下的frontend /目錄中根。
有關所有devfile組件分配和可能值的詳細說明,請參見:
規格庫
詳細的json模式文檔
這些示例devfile是很好的靈感來源:
用戶界面中默認使用的Eclipse Che工作區的示例devfile。
來自Red Hat Developer程序的Eclipse Che工作區的示例devfile。
本節包含devfile參考和有關如何使用devfile組成的各種元素的說明。
單個devfile中的每個組件都必須具有唯一的名稱。
通過定義其ID描述工作空間中使用的編輯器。一個devfile只能包含cheEditor類型的一個組件。
components: - alias: theia-editor type: cheEditor id: eclipse/che-theia/next
如果缺少cheEditor,則會提供默認編輯器及其默認插件。還為顯式定義的編輯器提供了默認插件,這些編輯器具有與默認ID相同的ID(即使它是不同的版本)。 Che-Theia與Che Machine Exec插件一起配置為默認編輯器。
要指定工作區不需要編輯器,請在devfile屬性中使用editorFree:true屬性。
通過定義插件ID來描述工作空間中的插件。允許具有多個chePlugin組件。
components: - alias: exec-plugin type: chePlugin id: eclipse/che-machine-exec-plugin/0.0.1
上面兩種類型都使用id(即用斜杠分隔的發布者),Che Plugin注冊表中插件的名稱和版本。 可用的Che插件列表以及有關注冊表的更多信息可以在https://github.com/eclipse/che-plugin-registry上找到。
要為cheEditor和chePlugin組件類型指定替代注冊表,請使用RegistryUrl參數:
components: - alias: exec-plugin type: chePlugin registryUrl: https://my-customregistry.com id: eclipse/che-machine-exec-plugin/0.0.1
指定cheEditor或chePlugin的一種替代方法,而不是使用編輯器或插件ID(以及可選的替代注冊表),是通過使用引用字段提供到組件描述符(通常名為meta.yaml)的直接鏈接:
components: - alias: exec-plugin type: chePlugin reference: https://raw.githubusercontent.com.../plugin/1.0.1/meta.yaml
不能在單個組件定義中混合使用id和reference字段。它們是互斥的。
要為cheEditor或chePlugin指定容器的內存限制,請使用memoryLimit參數:
components: - alias: exec-plugin type: chePlugin id: eclipse/che-machine-exec-plugin/0.0.1 memoryLimit: 256M
此限制將應用于給定組件的每個容器。
可能需要精確調整組件,在這種情況下,可以使用組件首選項。該示例顯示了如何使用插件首選項配置JVM。
id: redhat/java/0.38.0 type: chePlugin preferences: java.jdt.ls.vmargs: '-noverify -Xmx1G -XX:+UseG1GC -XX:+UseStringDeduplication'
一種復雜的組件類型,允許從Kubernetes或OpenShift列表中應用配置。可以通過引用屬性來提供組件的內容,該引用屬性指向具有組件內容的文件。
components: - alias: mysql type: kubernetes reference: petclinic.yaml selector: app.kubernetes.io/name: mysql app.kubernetes.io/component: database app.kubernetes.io/part-of: petclinic
另外,要將具有此類組件的devfile發布到REST API,可以使用referenceContent字段將Kubernetes或OpenShift列表的內容嵌入到devfile中:
components: - alias: mysql type: kubernetes reference: petclinic.yaml referenceContent: | kind: List items: - apiVersion: v1 kind: Pod metadata: name: ws spec: containers: ... etc
與dockerimage組件一樣,可以使用command和args屬性覆蓋Kubernetes或OpenShift列表中包含的容器的入口點(Kubernetes可以理解)。
列表中可以有更多容器(包含在部署的Pod或Pod模板中)。選擇要應用入口點的容器會更改。
入口點可以定義如下:
components: - alias: appDeployment type: kubernetes reference: app-deployment.yaml entrypoints: - parentName: mysqlServer command: ['sleep'] args: ['infinity'] - parentSelector: app: prometheus args: ['-f', '/opt/app/prometheus-config.yaml']
入口點列表包含用于選擇容器的約束以及要應用于它們的命令和args參數。在上面的示例中,約束是parentName:mysqlServer,這將導致命令應用到在任何名為mysqlServer的父對象中定義的所有容器。假定父對象是引用文件中定義的列表中的頂級對象,在上例中為app-deployment.yaml。
其他類型的約束(及其組合)也是可能的:
containerName:容器的名稱
parentName:(間接)包含要覆蓋的容器的父對象的名稱
parentSelector:父對象需要具有的標簽集
這些約束的組合可用于精確定位引用的Kubernetes列表內的容器。
要指定項目源目錄裝入容器,請使用mountSources參數:
components: - alias: appDeployment type: kubernetes reference: app-deployment.yaml mountSources: true
如果啟用,則項目源安裝將應用于給定組件的每個容器。此參數也適用于chePlugin類型的組件。
允許在工作空間中定義容器的基于容器映像的配置的組件類型。一個devfile只能包含dockerimage類型的一個組件。組件的dockerimage類型將自定義工具引入工作空間。該組件由其圖像標識。
components: - alias: maven type: dockerimage image: eclipe/maven-jdk8:latest volumes: - name: mavenrepo containerPath: /root/.m2 env: - name: ENV_VAR value: value endpoints: - name: maven-server port: 3101 attributes: protocol: http secure: 'true' public: 'true' discoverable: 'false' memoryLimit: 1536M command: ['tail'] args: ['-f', '/dev/null']
最小dockerimage組件的示例
apiVersion: 1.0.0 metadata: name: MyDevfile components: type: dockerimage image: golang memoryLimit: 512Mi command: ['sleep', 'infinity']
它指定組件的類型,dockerimage,并且image屬性使用通常的docker命名約定命名要用于組件的映像,即,上述type屬性等于 docker.io/library/golang:latest。
dockerimage組件具有許多功能,可通過使用圖像資源與Eclipse Che進行有意義的集成所需的其他資源和信息來擴展圖像。
為了使dockerimage組件有權訪問項目源,必須將mountSources屬性設置為true。
apiVersion: 1.0.0 metadata: name: MyDevfile components: type: dockerimage image: golang memoryLimit: 512Mi mountSources: true command: ['sleep', 'infinity']
源安裝在CHE_PROJECTS_ROOT環境變量中存儲的位置,該位置在映像的運行容器中可用。此位置默認為/ projects。
dockerimage的command屬性以及其他參數用于修改從映像創建的容器的入口點命令。在Eclipse Che中,該容器需要無限期運行,以便您可以隨時連接到該容器并執行任意命令。因為sleep命令的可用性及其對infinity參數的支持是不同的,并且取決于特定圖像中使用的基本圖像,所以Che無法自行自動插入此行為。但是,您可以利用此功能來例如以修改后的配置啟動必要的服務器等。
Docker映像工具可以指定要安裝在映像中特定位置的自定義卷。請注意,卷名在所有組件之間共享,因此該機制也可用于在組件之間共享文件系統。
apiVersion: 1.0.0 metadata: name: MyDevfile components: type: dockerimage image: golang memoryLimit: 512Mi mountSources: true command: ['sleep', 'infinity'] volumes: - name: cache containerPath: /.cache
Eclipse Che允許您通過修改映像容器中可用的環境變量來配置Docker容器。
apiVersion: 1.0.0 metadata: name: MyDevfile projects: name: my-go-project source: type: git location: https://github.com/acme/my-go-project.git clonePath: go/src/github.com/acme/my-go-project components: type: dockerimage image: golang memoryLimit: 512Mi mountSources: true command: ['sleep', 'infinity'] env: - name: GOPATH value: $(CHE_PROJECTS_ROOT)/go - name: GOCACHE value: /tmp/go-cache
變量擴展在環境變量之間起作用,并且它使用Kubernetes約定來引用變量。 您可以在自己的定義中使用預定義的變量。Che服務器預先設置了以下環境變量:
CHE_PROJECTS_ROOT:項目目錄的位置(請注意,如果組件未裝入源,則將無法訪問項目)。
CHE_WORKSPACE_LOGS_ROOT__DIR:所有組件共有的日志的位置。如果組件選擇將日志放入此目錄,則可以從所有其他組件訪問日志文件。
CHE_API_INTERNAL:用于與Che服務器通信的Che服務器API端點的URL。
CHE_WORKSPACE_ID:當前工作空間的ID。
CHE_WORKSPACE_NAME:當前工作空間的名稱。
CHE_WORKSPACE_NAMESPACE:當前工作空間的名稱空間。
CHE_MACHINE_TOKEN:用于根據Che服務器驗證請求的令牌。
CHE_MACHINE_AUTH_SIGNATUREPUBLICKEY:用于保護與Che服務器的通信安全的公用密鑰。
CHE_MACHINE_AUTH_SIGNATURE__ALGORITHM:在與Che服務器的安全通信中使用的加密算法。
一個開發文件可能只需要CHE_PROJECTS_ROOT環境變量即可在組件的容器中找到克隆的項目。更高級的devfile可以使用CHE_WORKSPACE_LOGS_ROOT__DIR環境變量來讀取日志(例如,作為devfile命令的一部分)。用于安全訪問Che服務器的環境變量大多不在devfile的范圍內,并且僅在通常由Che插件處理的高級用例中才存在。
您可以指定Docker映像公開的端點。如果Che集群正在使用Kubernetes入口或OpenShift路由運行,則可以使用戶訪問這些端點,并且可以訪問工作空間內的其他組件。如果您的應用程序或數據庫服務器正在偵聽端口,并且您希望自己能夠直接與其交互或希望其他組件與之交互,則可以為應用程序或數據庫創建端點。
端點具有許多屬性,如以下示例所示:
apiVersion: 1.0.0 metadata: name: MyDevfile projects: name: my-go-project source: type: git location: https://github.com/acme/my-go-project.git clonePath: go/src/github.com/acme/my-go-project components: type: dockerimage image: golang memoryLimit: 512Mi mountSources: true command: ['sleep', 'infinity'] env: - name: GOPATH value: $(CHE_PROJECTS_ROOT)/go - name: GOCACHE value: /tmp/go-cache endpoints: name: web port: 8080 attributes: discoverable: false public: true protocol: http type: dockerimage image: postgres memoryLimit: 512Mi env: name: POSTGRES_USER value: user name: POSTGRES_PASSWORD value: password name: POSTGRES_DB value: database endpoints: name: postgres port: 5432 attributes: discoverable: true public: false
在這里,有兩個dockerimage,每個dockerimage定義一個端點。端點是一個可訪問的端口,可以使它在工作區內部或公開(例如,從UI)訪問。每個端點都有一個名稱和端口,這是容器中運行的某些服務器正在偵聽的端口。以下是您可以在端點上設置的一些屬性:
discoverable:如果可發現端點,則意味著可以使用其名稱作為工作空間容器內的主機名來訪問它(在Kubernetes看來,將使用提供的名稱為其創建服務)。
public:端點也可以在工作空間之外訪問(可以從Che用戶界面訪問該端點)。此類端點總是在端口80或443上發布(取決于是否在Che中啟用了tls)。
protocol:對于公共端點,該協議向UI提示如何構建用于端點訪問的URL。典型值為http,https,ws,wss。
secure:布爾值(默認為false),指定是否將端點放置在需要JWT工作區令牌授予訪問權限的JWT代理之后。
path:端點的URL
unsecuredPaths:端點中以逗號分隔的路徑列表,即使將secure屬性設置為true也不應該對其進行保護
CookiesAuthEnabled:設置為true(默認值為false)時,將自動獲取JWT工作區令牌并將其包含在特定于工作區的cookie中,以允許請求通過JWT代理傳遞。
與使用POST請求的服務器結合使用時,此設置可能會導致CSRF攻擊。
當在組件內啟動新服務器時,Che會自動檢測到此情況,并且UI會自動將此端口公開為公用端口。例如,這對于調試Web應用程序很有用。對于使用容器自動啟動的服務器(例如,數據庫服務器)無法執行此操作。對于此類組件,請明確指定端點。
可以使用可以在devfile中引用的Kubernetes或OpenShift資源列表來描述復雜的部署。這將使它們成為工作空間的一部分。
由于Che工作區在內部被表示為單個部署,因此Kubernetes或OpenShift列表中的所有資源都合并到該單個部署中。
設計此類列表時必須小心,因為這可能導致名稱沖突和其他問題。
僅支持Kubernetes對象的以下子集:部署,pod,服務,持久卷聲明,機密和配置映射。 Kubernetes入口將被忽略,但支持OpenShift路由。使用其他任何對象類型從devfile創建的工作空間將無法啟動。
如果在Kubernetes集群上運行Che,則僅支持Kubernetes列表。但是,如果在OpenShift集群上運行Che,則同時支持Kubernetes和OpenShift列表(因為OpenShift是Kubernetes的超集)。
apiVersion: 1.0.0 metadata: name: MyDevfile projects: name: my-go-project source: type: git location: https://github.com/acme/my-go-project.git clonePath: go/src/github.com/acme/my-go-project components: type: kubernetes reference: ../relative/path/postgres.yaml
前面的組件引用了一個相對于devfile本身位置的文件。 這意味著,該devfile僅可由Che工廠加載,您可以向其提供devfile的位置,因此,它可以找出所引用的Kubernetes資源列表的位置。
以下是postgres.yaml文件的示例。
apiVersion: v1 kind: List items: - apiVersion: v1 kind: Deployment metadata: name: postgres labels: app: postgres spec: template: metadata: name: postgres app: name: postgres spec: containers: - image: postgres name: postgres ports: - name: postgres containerPort: 5432 volumeMounts: - name: pg-storage mountPath: /var/lib/postgresql/data volumes: - name: pg-storage persistentVolumeClaim: claimName: pg-storage - apiVersion: v1 kind: Service metadata: name: postgres labels: app: postgres name: postgres spec: ports: - port: 5432 targetPort: 5432 selector: app: postgres - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pg-storage labels: app: postgres spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
有關帶有關聯Kubernetes或OpenShift列表的devfile的基本示例,請參見https://github.com/redhat-developer/devfile/tree/master/samples/web-nodejs-with-db-sample。
如果使用僅需要資源的子集的常規或大型資源列表,則可以使用選擇器從列表中選擇特定資源(與通常的Kubernetes選擇器一樣,該選擇器可用于列表中資源的標簽) 。
apiVersion: 1.0.0 metadata: name: MyDevfile projects: name: my-go-project source: type: git location: https://github.com/acme/my-go-project.git clonePath: go/src/github.com/acme/my-go-project components: type: kubernetes reference: ../relative/path/postgres.yaml selector: app: postgres
此外,還可以修改資源列表中存在的容器的入口點(命令和自變量)。有關高級用例的詳細信息,請參見參考資料(TODO:鏈接)。
devfile允許指定可在工作空間中執行的命令。每個命令都可以包含動作的子集,這些動作與將在其容器中執行的特定組件相關。
commands: - name: build actions: - type: exec component: mysql command: mvn clean workdir: /projects/spring-petclinic
您可以使用命令來自動化工作空間。您可以定義用于構建和測試代碼或清除數據庫的命令。
以下是兩種命令:
Che特定命令:您完全可以控制哪個組件執行該命令。
特定于編輯器的命令:可以使用特定于編輯器的命令定義(例如:Theia中的task.json和launch.json,等效于這些文件在VS Code中的工作方式)。
每個特定于che的命令都有一個動作屬性(一個要執行的命令)和一個組件屬性(指定一個應在其中執行命令的容器)。這些命令使用容器中的默認外殼程序運行。
apiVersion: 1.0.0 metadata: name: MyDevfile projects: name: my-go-project source: type: git location: https://github.com/acme/my-go-project.git clonePath: go/src/github.com/acme/my-go-project components: type: dockerimage image: golang alias: go-cli memoryLimit: 512Mi mountSources: true command: ['sleep', 'infinity'] env: - name: GOPATH value: $(CHE_PROJECTS_ROOT)/go - name: GOCACHE value: /tmp/go-cache commands: - name: compile and run actions: - type: exec component: go-cli command: “go get -d && go run main.go” workdir: “${CHE_PROJECTS_ROOT}/src/github.com/acme/my-go-project”
如果要在命令中使用的組件必須具有別名。 此別名用于引用命令定義中的組件。 示例:別名:組件定義中的go-cli和組件:命令定義中的go-cli。 這樣可以確保Eclipse Che可以找到正確的容器來運行命令。 一個命令只能有一個動作。
如果工作空間中的編輯器支持它,則devfile可以以編輯器特定的格式指定其他配置。 這取決于工作空間編輯器本身中提供的集成代碼,因此不是通用機制。 但是,Eclipse Che中的默認Theia編輯器可以理解devfile中提供的task.json和launch.json文件。
apiVersion: 1.0.0 metadata: name: MyDevfile projects: name: my-go-project source: type: git location: https://github.com/acme/my-go-project.git clonePath: go/src/github.com/acme/my-go-project commands: - name: tasks actions: - type: vscode-task referenceContent: > { "version": "2.0.0", "tasks": [ { "label": "create test file", "type": "shell", "command": "touch ${workspaceFolder}/test.file" } ] }
此示例顯示task.json文件與devfile的關聯。注意,vscode-task類型指示Che-Theia編輯器將此命令解釋為任務定義和referenceContent屬性,其中包含文件本身的內容。您還可以將該文件與devfile分開保存,并使用reference屬性指定相對或絕對URL。
除了vscode-task命令之外,Che-Theia編輯器還了解vscode-launch類型,您可以使用該類型指定啟動配置。
Devfile屬性可用于配置各種功能。
如果未在devfile中指定編輯器,則會提供默認值。當不需要編輯器時,應使用editorFree屬性。默認值為false,這意味著devfile需要配置默認編輯器。
沒有編輯器的devfile示例
apiVersion: 1.0.0 metadata: name: petclinic-dev-environment components: - alias: myApp type: kubernetes local: my-app.yaml attributes: editorFree: true Attribute: persistVol
默認情況下,即使容器重啟后,在devfile中指定的卷和PVC也綁定到主機文件夾以持久保存數據。有時,可能有必要禁用數據持久性,例如在卷后端速度較慢時,并且需要使工作空間更快時。為此,應使用persistVolumes devfile屬性。默認值為true,如果為false,則將emptyDir卷用于配置的卷和PVC。
啟用短暫模式的devfile的示例
apiVersion: 1.0.0 metadata: name: petclinic-dev-environment projects: - name: petclinic source: type: git location: 'https://github.com/che-samples/web-java-spring-petclinic.git' attributes: persistVolumes: false
到此,相信大家對“Eclipse Che 7工作區的用法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。