本文介绍在无法通过git clone方式下载github上的skywalking源码的情况下,如何能够通过github上下载的zip包完成编译打包。
源码准备
下载源码
下载skywalking-data-collect-protocol 的 proto文件
下载proto文件并拷贝到目录skywalking/apm-protocol/apm-network/src/main/proto/(这个原来的是个submodule) 下
如果不做上述处理,会编译报错“程序包org.apache.skywalking.apm.network.common.v3不存在”
参考issue: github.com/apache/skyw…
If you download in zip ,all proto files do not exist ,you should download proto files (github.com/apache/skyw… )again and put them into /apm-protocol/apm-network/src/main/proto/ and run ./mvnw compile -Dmaven.test.skip=true\
下载 skywalking-query-protocol/ 的 proto文件
下载proto文件并拷贝到目录skywalking/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol(同样是个submodule)
不然oap-server启动后会报错
2022-09-07 08:06:16,616 org.apache.skywalking.oap.server.starter.OAPServerBootstrap 60 [main] ERROR [] - [9.1.0-ebd1dc4] classpath:query-protocol/common.graphqls
java.io.FileNotFoundException: classpath:query-protocol/common.graphqls
at graphql.kickstart.tools.SchemaParserBuilder.readFile(SchemaParserBuilder.kt:193) ~[graphql-java-tools-12.0.2.jar:?]
at graphql.kickstart.tools.SchemaParserBuilder.parseDocuments(SchemaParserBuilder.kt:171) ~[graphql-java-tools-12.0.2.jar:?]
at graphql.kickstart.tools.SchemaParserBuilder.parseDefinitions(SchemaParserBuilder.kt:159) ~[graphql-java-tools-12.0.2.jar:?]
at graphql.kickstart.tools.SchemaParserBuilder.scan(SchemaParserBuilder.kt:152) ~[graphql-java-tools-12.0.2.jar:?]
at graphql.kickstart.tools.SchemaParserBuilder.build(SchemaParserBuilder.kt:200) ~[graphql-java-tools-12.0.2.jar:?]
at org.apache.skywalking.oap.query.graphql.GraphQLQueryProvider.start(GraphQLQueryProvider.java:141) ~[query-graphql-plugin-9.1.0.jar:9.1.0]
at org.apache.skywalking.oap.server.library.module.BootstrapFlow.start(BootstrapFlow.java:46) ~[library-module-9.1.0.jar:9.1.0]
at org.apache.skywalking.oap.server.library.module.ModuleManager.init(ModuleManager.java:60) ~[library-module-9.1.0.jar:9.1.0]
at org.apache.skywalking.oap.server.starter.OAPServerBootstrap.start(OAPServerBootstrap.java:44) [server-starter-9.1.0.jar:9.1.0]
at org.apache.skywalking.oap.server.starter.OAPServerStartUp.main(OAPServerStartUp.java:23) [server-starter-9.1.0.jar:9.1.0]
添加ui的submodule
下载skywalking-ui源码github.com/apache/skyw…
并放到自己的代码仓库中git.xxxxxx.com/skywalking-…
然后,在skywalking工程目录下添加刚刚自己上传的ui代码仓为skywalking工程的submodule
cd skywalking
git submodule add https://git.xxxxxx.com/skywalking-booster-ui.git skywalking-ui
编译
cd skywalking
./mvnw clean package -Dmaven.test.skip
开发java项目少不了要用到maven或者gradle,对比gradle而言,可能maven要更加常用一些。要使用maven那就必要要安装maven,如果有些用户不想安装maven怎么办?或者说用户不想全局安装maven,那么可以使用项目级别的Maven Wrapper来实现这个功能。 segmentfault.com/a/119000002…
打包UI镜像
- 拷贝skywalking/dist下的文件apache-skywalking-apm-bin.tar.gz拷贝到skywalking/docker/ui下
我们打包后在工程的dist文件夹下有个apache-skywalking-apm-bin.tar.gz文件,没编译打包是没有dist这个文件夹的,构建镜像签需要把apache-skywalking-apm-bin.tar.gz文件放在构建目录中。
- 修改Dockerfile
ARG DIST="apache-skywalking-apm-bin.tar.gz"
- 打镜像
docker build -t xxxxxxxxx/apache/skywalking-ui:v0.0.1 --no-cache .
docker push xxxxxxxxx/apache/skywalking-ui:v0.0.1
打包OAP镜像
-
拷贝skywalking/dist下的文件apache-skywalking-apm-bin.tar.gz拷贝到skywalking/docker/oap下
-
修改Dockerfile
ARG SKYWALKING_CLI_VERSION="0.10.0"
ARG DIST="apache-skywalking-apm-bin.tar.gz"
- 打镜像
docker build -t xxxxxxxxx/apache/skywalking-oap:v0.0.1 --no-cache .
docker push xxxxxxxxx/apache/skywalking-oap:v0.0.1