GitHubAction全自动阿里云盘打卡签到
每天都手动签到阿里云盘很费力,在吾爱上看见一个zhuoxin99大佬发了一个某盘签到的一个java项目,今天正好心血来潮准备试试。
项目地址:https://GitHub.com/dellevin/ToDoTaskForGithubAction
创建工作流
在./github/workflows 的文件夹下面创建yml文件,文件名随便,后缀名一定是yml的格式
编写配置
下面贴一下我的完整配置
name:JavaCIon:schedule:-cron:"3022***"#北京时间上午06:30workflow_dispatch:#添加workflow_dispatch触发器,用于手动运行jobs:build:runs-on:ubuntu-lateststeps:-name:Checkoutcodeuses:actions/checkout@v2-name:SetupJDKuses:actions/setup-java@v1with:java-version:'11'#这里可以指定你需要的Java版本-name:CacheMavenpackagesuses:actions/cache@v2with:path:~/.m2key:${{runner.os}}-m2-${{hashFiles('**/pom.xml')}}restore-keys:${{runner.os}}-m2-name:BuildwithMavenrun:mvn-Bpackage--filepom.xml#使用Maven进行项目构建,可以根据你的项目需要修改命令-name:runJavaApplicationrun:|java-Djava.security.manager-Djava.security.policy==src/main/resources/policy.policy-jartarget/ToDoTask.jar#附带权限加载运行程序env:REFRESH_TOKEN:${{secrets.REFRESH_TOKEN}}
name: Java CI表示我的工作流叫做Java CI
on里面我就不写了,已经打注释了
接下来是重头戏是job里面的东西们
runs-on: ubuntu-latest表示我在这个ubuntu的系统上运行的(一个linux系统)
build任务首先做checkout代码操作。
接下来是构建步骤,
- name 表示我这个步骤叫什么名
下面表示我是java11版本运行的
uses:actions/setup-java@v1with:java-version:'11'#这里可以指定你需要的Java版本
这一步表示 缓存Maven本地包,加速构建,避免了每次运行都要下载maven里面引入的包(ps:我是看别人写的copy过来的)
-name:CacheMavenpackagesuses:actions/cache@v2with:path:~/.m2key:${{runner.os}}-m2-${{hashFiles('**/pom.xml')}}restore-keys:${{runner.os}}-m2
使用Maven进行项目打包构建。
-name:BuildwithMavenrun:mvn-Bpackage--filepom.xml#使用Maven进行项目构建,可以根据你的项目需要修改命令
最后调用Java命令运行打包生成的JAR文件
-name:runJavaApplicationrun:|java-Djava.security.manager-Djava.security.policy==src/main/resources/policy.policy-jartarget/ToDoTask.jar#附带权限加载运行程序env:REFRESH_TOKEN:${{secrets.REFRESH_TOKEN}}
其中-Djava.security.manager -Djava.security.policy==src/main/resources/policy.policy的作用是设置权限,让github设置的screct传入进来,也就是传入到ToDoTask类里面的private static final String refresh_token = System.getenv("REFRESH_TOKEN");里面,其中System.getenv("REFRESH_TOKEN")就是用来获取GitHub设置的screct的,通过yml配置文件里面的,
env:REFRESH_TOKEN:${{secrets.REFRESH_TOKEN}}
进行传入,如果不加入-Djava.security.manager -Djava.security.policy==src/main/resources/policy.policy这句话的话refresh_token 获取的一直是null。。。。。
因为我每次运行都是各种权限错误,运行一次加一次,最后索性在policy文件下面加了一个permission java.security.AllPermission;释放所有权限
报错log(部分)
---1Error:Exceptioninthread"main"java.lang.IllegalStateException:java.security.AccessControlException:accessdenied("java.lang.RuntimePermission""getProtectionDomain")----2accessdenied("java.lang.RuntimePermission""setFactory")----3accessdenied("java.util.PropertyPermission""java.protocol.handler.pkgs""read")----4accessdenied("java.util.PropertyPermission""java.protocol.handler.pkgs""write")----5accessdenied("java.lang.RuntimePermission""getProtectionDomain")
然后好多权限报错问题,运行一次报一次。。。。。。
yml配置之 项目切忌class方式运行
一开始我是懵的,创建的是springboot的项目,然后就要编写如何运行java文件的东西,一开始我选择的是采用直接编译java文件运行class类的方式。
这种方式是大错特错的,因为是项目的原因,必须要引入这个
name:BuildwithMavenrun:mvn-Bpackage--filepom.xml
pom配置之 一定要加bulid
也就是说一定要加入下面这段,finalName标签是必须要的,因为是打包成一个jar包运行的是一个jar包,你不加finalName人家都不知道运行啥,运行class文件吗,别搞笑了。
另外plugins标签里面也一定要加上,因为该插件提供了打包和运行Spring Boot项目的能力。添加这个插件后可以直接使用mvn spring-boot:run来运行Spring Boot应用,我不加上无法运行jar包。。。。
<build><!--打包后的文件名--><finalName>ToDoTask</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
java文件之获取传入进来的token
我一直好奇的是REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }}这段是如何传入进来的,结果百度无果之后果断问了gpt,他告诉我用System.getenv("REFRESH_TOKEN")接收就好(ps:gpt真厉害)。在我运行工作流之后,发现token是null,很明显是没传入进来嘛,然后又去问,他告诉我要设置权限,也就是上面提到的哪些。。。。这样下来,最终是完成了这个
其中
env:REFRESH_TOKEN:${{secrets.REFRESH_TOKEN}}
这一段你要放在外面就是全局变量,你要放在里面就是局部变量
注意
Github Action对于公有仓库是免费的,对于私有仓库用户提供了一定的免费额度:
对于运行在Linux上的作业,github提供了2000分钟的免费额度;
Github提供了10G免费的缓存,并且会对7天内未被访问的key进行删除;
以上的使用限额,会在每个月进行重置;
相关专题