经验分享

GitHubAction全自动阿里云盘打卡签到

我的站长站 2023-09-02 人阅读

每天都手动签到阿里云盘很费力,在吾爱上看见一个zhuoxin99大佬发了一个某盘签到的一个java项目,今天正好心血来潮准备试试。

项目地址:https://GitHub.com/dellevin/ToDoTaskForGithubAction

创建工作流

在./github/workflows 的文件夹下面创建yml文件,文件名随便,后缀名一定是yml的格式

编写配置

下面贴一下我的完整配置

name: Java CI
on:
  schedule:
    - cron: "30 22 * * *"  # 北京时间上午06:30
  workflow_dispatch:   # 添加 workflow_dispatch 触发器,用于手动运行
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Set up JDK
      uses: actions/setup-java@v1
      with:
        java-version: '11' # 这里可以指定你需要的 Java 版本
    - name: Cache Maven packages
      uses: actions/cache@v2
      with:
        path: ~/.m2
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: ${{ runner.os }}-m2
    - name: Build with Maven
      run: mvn -B package --file pom.xml   # 使用 Maven 进行项目构建,可以根据你的项目需要修改命令
    - name: run Java Application
      run: |
        java -Djava.security.manager -Djava.security.policy==src/main/resources/policy.policy -jar  target/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@v1
      with:
        java-version: '11' # 这里可以指定你需要的 Java 版本

这一步表示 缓存Maven本地包,加速构建,避免了每次运行都要下载maven里面引入的包(ps:我是看别人写的copy过来的)

  - name: Cache Maven packages
      uses: actions/cache@v2
      with:
        path: ~/.m2
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: ${{ runner.os }}-m2

使用Maven进行项目打包构建。

- name: Build with Maven
  run: mvn -B package --file pom.xml   # 使用 Maven 进行项目构建,可以根据你的项目需要修改命令

最后调用Java命令运行打包生成的JAR文件

- name: run Java Application
  run: |
    java -Djava.security.manager -Djava.security.policy==src/main/resources/policy.policy -jar  target/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(部分)

---1
Error: Exception in thread "main" java.lang.IllegalStateException: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getProtectionDomain")
----2
access denied ("java.lang.RuntimePermission" "setFactory")
----3
access denied ("java.util.PropertyPermission" "java.protocol.handler.pkgs" "read")
----4
access denied ("java.util.PropertyPermission" "java.protocol.handler.pkgs" "write")
----5
access denied ("java.lang.RuntimePermission" "getProtectionDomain")

然后好多权限报错问题,运行一次报一次。。。。。。

yml配置之 项目切忌class方式运行

一开始我是懵的,创建的是springboot的项目,然后就要编写如何运行java文件的东西,一开始我选择的是采用直接编译java文件运行class类的方式。

这种方式是大错特错的,因为是项目的原因,必须要引入这个

name: Build with Maven
run: mvn -B package --file pom.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进行删除;

以上的使用限额,会在每个月进行重置;

相关专题
阿里云
阿里云
2022-03-05 1120

阿里云是国内大型互联网服务商之一,我的站长站为大家整理关于阿里云相关信息,包含阿里云最新活动,阿里云域名配置教程,阿里云服务器活动分享....

相关推荐
  • 阿里云盘
  • 阿里云盘本地同步上传下载软件V1.0
    阿里云盘本地同步上传下载软件V1.0

    软件介绍百度网盘有本地文件夹同步功能,阿里云网盘还没有。这款阿里云盘本地同步上传下载软件就可以解决这个问题,达到本地与阿里云盘双向同步。软件需要配合谷歌浏览器登录使用,使用前请安装谷歌浏...

    开发软件 150 2年前
  • 阿里云盘分享zip压缩包工具+方法
    阿里云盘分享zip压缩包工具+方法

    软件介绍阿里云盘开启了分享测试,但目前不支持zip压缩包格式,所以想分享压缩包,需要用工具处理下。我的站长站分享这款Jpg+文件粘合剂3.3.9.0工具,可以轻松解决这个问题。阿里云盘分享zip工具截图使...

    开发软件 514 2年前
  • 最新可用百度网盘批量迁移阿里云盘工具
    最新可用百度网盘批量迁移阿里云盘工具

    软件介绍阿里云盘终于开测了分享功能,阿里云盘号称下载不限速,所以像我的站长站这样资源存百度网盘的用户,肯定想把百度网盘资源转到阿里云盘去。毕竟百度网盘下载速度实在是太慢了,开会员也慢。我的...

    开发软件 254 2年前
最新更新