欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

快速在GitHub搭建一个规范的开源项目(三)

程序员文章站 2022-03-22 13:12:32
...

上两篇博客快速在GitHub搭建一个规范的开源项目(一)
快速在GitHub搭建一个规范的开源项目(二)我们分别讲了如何如何初始一个团队并且制定了规范的开发流程和代码提交流程以及Issue规范。
这一篇我们来讲一下如何规范的在GitHub上做持续集成。
经常游览GitHub的同学可能发现,大一点的开源项目都会有这个两个标志。build passing和codecov。
快速在GitHub搭建一个规范的开源项目(三)
这两个标志分别代表单测通过以及代码测试覆盖率达到多少的意思,同时也表示这个项目接入了CI以及代码测试覆盖率分析。接下来我一步步的叫大家如何接入CI,下一篇文章我再教大家如何生成代码覆盖率分析报告。
能够帮助我们做CI的应用有很多,这个大家可以去GitHub的Marketplace中找到。这里我们以用的较多的Travis-CI为例教大家如何接入CI。
快速在GitHub搭建一个规范的开源项目(三)

  1. 注册账号
    首先你得去Travis-Ci官网注册一个账号(官网链接),很简单你可以直接用你的GitHub账号绑定登录即可。
  2. 将我们开源项目的代码上传到你的github上,并在travis-ci上选择同步该项目。如果需要同步团队的项目,需要团队管理员授权。
  3. 在你的项目的根目录添加 .travis.yml 文件
    如果你跟我一样是采用maven开发的Java项目,.travis.yml文件的内容可以填下面这段????,其他语言的可以根据官方教程配置,在右下方选择一种特定的语言即可快速入门。
language: java
sudo: false # faster builds

jdk:
  - openjdk8

cache:
  directories:
    - $HOME/.m2
## 不需要安装任何其他脚本
install: true

script:
  - travis_wait 30 ./mvnw --batch-mode clean install -DskipTests=false  -Dmaven.javadoc.skip=true

after_success:
  - echo "build success!"

after_failure:
  - echo "build failed!"
  1. 如果你的项目还写过单测用例,你需要创建测试文件以及maven配置。如已有可以忽略此步骤。
    为你的项目添加maven依赖
<properties>
     <java.version>1.8</java.version>
     <project.encoding>UTF-8</project.encoding>
     <groovy.version>2.4.7</groovy.version>
     <spock.version>1.2-groovy-2.4</spock.version>
</properties>

<dependencies>
		...其他依赖省略
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
           <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>${spock.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-spring</artifactId>
            <version>${spock.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy.version}</version>
        </dependency>

        <dependency> <!-- enables mocking of classes (in addition to interfaces) -->
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy</artifactId>
            <version>1.9.3</version>
            <scope>test</scope>
        </dependency>
        <dependency> <!-- enables mocking of classes without default constructor (together with CGLIB) -->
            <groupId>org.objenesis</groupId>
            <artifactId>objenesis</artifactId>
            <version>2.6</version>
            <scope>test</scope>
        </dependency>     
</dependencies>   

<build>
        <finalName>datasource-spring-boot-starter</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.0.RELEASE</version>
                <configuration>
                    <mainClass>com.xy.datasource.spring.boot.starter.Application</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- maven编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.encoding}</encoding>
                </configuration>
            </plugin>

			<!-- maven资源打包插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <encoding>${project.encoding}</encoding>
                </configuration>
            </plugin>

            <!--引入groovy编译插件-->
            <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-all</artifactId>
                        <version>${groovy.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

            <!--surefire框架整合 spec,test-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.21.0</version>
                <configuration>
                    <includes>
                        <!--没错此处为.java -->
                        <include>**/*Spec.java</include>
                        <include>**/*Test.java</include>
                    </includes>
                    <systemPropertyVariables>
                        <jacoco-agent.destfile>target/coverage-reports/jacoco-unit.exec</jacoco-agent.destfile>
                    </systemPropertyVariables>
                    <useSystemClassLoader>false</useSystemClassLoader>
                </configuration>
            </plugin>

            <!--jacoco生成覆盖率及报告-->
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.3</version>
                <configuration>
                    <!--指定生成 .exec 文件的存放位置-->
                    <destFile>target/coverage-reports/jacoco-unit.exec</destFile>
                    <!--Jacoco 是根据 .exec 文件生成最终的报告,所以需指定 .exec 的存放路径-->
                    <dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>
                    <!--制定单元测试覆盖率统计文件的生成路径-->
                    <outputDirectory>target/jacoco-aggregate</outputDirectory>
                </configuration>
                <executions>
                    <execution>
                        <id>jacoco-initialize</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-site</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            
            <!-- maven单测报告插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <version>3.0.0-M3</version>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
            </plugin>
        </plugins>
    </build>     

创建单测用例,这里你可以采用Junit,也可以使用groovy写测试用例。

  1. 在Travis-CI同步项目,并且开启持续集成。
    快速在GitHub搭建一个规范的开源项目(三)
  2. 当你提交PR时,将会自动跑测试用例
    快速在GitHub搭建一个规范的开源项目(三)
  3. 跑成功后会出现build passing,点击这个build passing会弹出一个弹窗,将弹窗中的内容复制到你的README.md文件中就可以出现文章开头的那个标签效果。当你的项目正在跑单元测试时,它会显示running。当你的项目单元测试挂了,它会显示failed。
    快速在GitHub搭建一个规范的开源项目(三)
    最后,还提供一个小工具,用来生成其他标签在线标签生成器
相关标签: 项目管理