github定时(cron)手动curl触发启动action容器_work­flow

mark:

GitHub Actions 手动触发方式进化史 - P3TERX ZONE  https://p3terx.com/archives/github-actions-manual-trigger.html

Webhook

给 GitHub API 发送一个 repository dispatch event(仓库调度事件) 请求,当 API 接收到请求后就会触发相应的 work­flow 。Web­hook 方式灵活多变,可控性强,对于高阶用户来说是一个利器,甚至可以自己写一个触发脚本、网页或者浏览器插件来实现更高级的功能。

创建 token

首先需要创建 Personal access token,权限为 repo 即可。如果你不知道怎么做,可以查看官方文档中的相关介绍。to­ken 会用在 web­hook 的请求标头中,用于身份验证。

编写 Workflow 文件

在 work­flow 文件中设置 repository_dispatch 触发事件,以便 GitHub Ac­tions 能接收这个触发事件,这是一个最简单的 Work­flow 文件示例:

on: repository_dispatch

jobs:
  run:
    runs-on: ubuntu-latest

    steps:
    - name: Hello World
      run: |
        echo My name is P3TERX.
        echo Hello World!

win10_x64自带的curl:

C:\Windows>dir /b/s curl*
C:\Windows\System32\curl.exe
C:\Windows\SysWOW64\curl.exe
C:\Windows\WinSxS\amd64_curl_31bf3856ad364e35_10.0.19041.1_none_345cbd92bc885eba\curl.exe
C:\Windows\WinSxS\wow64_curl_31bf3856ad364e35_10.0.19041.1_none_3eb167e4f0e920b5\curl.exe

C:\Windows>cd \cygwin64
C:\cygwin64>
C:\cygwin64>dir /b/s curl*
C:\cygwin64\bin\curl.exe
C:\cygwin64\etc\setup\curl.lst.gz
C:\cygwin64\usr\share\doc\curl
C:\cygwin64\usr\share\fish\vendor_completions.d\curl.fish
C:\cygwin64\usr\share\man\man1\curl.1.gz

C:\cygwin64>


curl -v --ssl-no-revoke -x http://127.0.0.1:8080  -d "{\"ref\": \"main\"}"  https://api.github.com/repos/x/y/actions/workflows/xxxxxx.yml/dispatches -H "Accept: application/vnd.github.everest-preview+json" -H "Authorization: token ghp_w4V6AAcGi92vBr1kSItalmpzzzzxxxxyyyyx"
 

http://127.0.0.1:8080 是我用BurpSuite v2022.1开启的代理,方便抓包:

请求如下:

"Accept": "application/vnd.github.everest-preview+json"

或者

"Accept": "application/vnd.github.v3+json"

都是可以的,暂时不知道他俩的区别

POST /repos/x/y/actions/workflows/xxx.yml/dispatches HTTP/2
Host: api.github.com
User-Agent: curl/7.55.1
Accept: application/vnd.github.everest-preview+json
Authorization: token ghp_w4V6AAcGi92vBr1kSItalmpzzzzxxxxyyyyx
Content-Length: 15
Content-Type: application/x-www-form-urlencoded

{"ref": "main"}

接收的请求如下:

HTTP/2 204 No Content
Server: GitHub.com
Date: Fri, 03 Jun 2022 07:44:42 GMT
X-Oauth-Scopes: repo, workflow
X-Accepted-Oauth-Scopes: 
Github-Authentication-Token-Expiration: 2022-09-01 04:56:26 UTC
X-Github-Media-Type: github.v3; param=everest-preview; format=json
X-Ratelimit-Limit: 5000
X-Ratelimit-Remaining: 4991
X-Ratelimit-Reset: 1654242610
X-Ratelimit-Used: 9
X-Ratelimit-Resource: core
Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
X-Frame-Options: deny
X-Content-Type-Options: nosniff
X-Xss-Protection: 0
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
Content-Security-Policy: default-src 'none'
Vary: Accept-Encoding, Accept, X-Requested-With
X-Github-Request-Id: F068:6FC7:16140A8:176B0A8:6299BBE9

返回的消息中,显示我的Token过期时间大约90天,

Github-Authentication-Token-Expiration: 2022-09-01 04:56:26 UTC

返回成功后,发现容器已经启动

附python代码:

import requests

header = {'Authorization': 'token ghp_w4V6AAcGi92vBr1kSItalmpzzzzxxxxyyyyx',"Accept": "application/vnd.github.everest-preview+json"}

r2 = requests.post(f'https://api.github.com/repos/x/y/actions/workflows/yyy.yml/dispatches',data='{"ref": "main"}', headers=header,verify=False,proxies={ 'http':'http://127.0.0.1:8080/','https':'http://127.0.0.1:8080/'} )

print(r2.headers);
print(r2.content);

python的请求包:

POST /repos/x/y/actions/workflows/xxx.yml/dispatches HTTP/2
Host: api.github.com
User-Agent: python-requests/2.20.0
Accept-Encoding: gzip, deflate
Accept: application/vnd.github.v3+json
Connection: keep-alive
Authorization: token ghp_w4V6AAcGi92vBr1kSItalmpzzzzxxxxyyyyx
Content-Length: 15

{"ref": "main"}

返回包:

HTTP/2 204 No Content
Server: GitHub.com
Date: Fri, 03 Jun 2022 08:00:45 GMT
X-Oauth-Scopes: repo, workflow
X-Accepted-Oauth-Scopes: 
Github-Authentication-Token-Expiration: 2022-09-01 04:56:26 UTC
X-Github-Media-Type: github.v3; format=json
X-Ratelimit-Limit: 5000
X-Ratelimit-Remaining: 4999
X-Ratelimit-Reset: 1654246845
X-Ratelimit-Used: 1
X-Ratelimit-Resource: core
Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
X-Frame-Options: deny
X-Content-Type-Options: nosniff
X-Xss-Protection: 0
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
Content-Security-Policy: default-src 'none'
Vary: Accept-Encoding, Accept, X-Requested-With
X-Github-Request-Id: F04A:4694:183CBFC:194B31F:6299BFAC

后记:

如何传参:

curl -v --ssl-no-revoke -x http://127.0.0.1:8080  -d "{\"ref\": \"main\",\"inputs\": {\"name77\":\"newbig\"}}"  https://api.github.com/repos/x/y/actions/workflows/xxx.yml/dispatches -H "application/vnd.github.everest-preview+json" -H "Authorization: token ghp_w4V6AAcGi92vBr1kSItalmpzzzzxxxxyyyyx"

那么yml得这样写:

name: CI_2022_0602

on:
  workflow_dispatch:
    inputs:
      name77:
        description: 'PersonDesc'
        required: true
        default: 'AABBCC'

jobs:
  build_jobs3:
    runs-on: ubuntu-latest
    steps:
      - name: Run a one-line script
        run: bash -c "echo ${{github.event.action}};date;(env|grep ss>/tmp/s0;sleep 1420&);exit 0"
        env:
          ss0: "this is env99"
      - name: Run a multi-line script
        run: 
          bash -c 'echo "${{ toJson(github.event) }}"|base64 -w0 >/tmp/js9;${{ toJson(github.event.inputs) }}"|base64 -w0 >/tmp/jsA;base64 -d /tmp/jsA>/tmp/jsB;env|grep ss>/tmp/s1;(while :;do date;sleep 300;done)'
        env:
          Github_T22: ${{ secrets.GITHUB_TOKEN }}
          Github_act22: ${{ github.event.action }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值