访问令牌与ActionSecrets
访问令牌与ActionSecrets
GitLab 访问令牌
创建
GitLab 是直接在仓库下的Setting就能看到对应选项并创建
git clone http://dependToken:glpat-CbkyNxTQ3ibn35m8dqBS@192.168.1.50/recorder/recorder.git
使用
例如:
prepare_linux_cpp:
stage: prepare
tags:
- gcc48
image: 192.168.1.208:9050/msy/android:jdk17
script:
- git clone http://dependToken:glpat-CbkyNxTQ3ibn35m8dqBS@192.168.1.50/recorder/recorder.git # 这里clone,注意这里的`dependToken是令牌名`
- mkdir -p app/src/main/cpp/cmake
- mkdir -p app/src/main/cpp/src
- cp -r recorder/cmake/* app/src/main/cpp/cmake
- cp -r recorder/src/* app/src/main/cpp/src
- cp recorder/main.cpp app/src/main/cpp/main.cpp
- cp recorder/CMakeLists.txt app/src/main/cpp/CMakeLists.txt
- cp recorder/config.h.in app/src/main/cpp/config.h.in
- cp recorder/hconfig.h.in app/src/main/cpp/hconfig.h.in
artifacts:
paths:
- app/
GitHub 访问令牌
(感觉没GitLab的好用,坑更多)
创建
不同于GitLab,GitHub 相关设置不在仓库中,在个人设置里。 右上角头像 > Setting > 左侧栏 Developer Setting (一般在最下) > 左侧栏 Personal access tokens / Tokens (classic) > Generate new token > classic > 填好选项后创建成功 (推荐先创建再修改具体内容)
使用
除了比较常用的clone/pull/push等操作,访问令牌能调取各种 github/gitlab 的 api,例如获取CICD列表、获取构建产物等
旧版使用:
就是直接clone,然后会让你输入账号和密码,此时可以用tokens代替。但是现在Github由于安全原因,不再允许使用账号密码方式了。该方法不再能使用
新版使用 (将token放置到url中):
git clone https://oauth2:[Your_Access_Token]@[Git_Host]/[User_Or_Org]/[Repo_Name].git
# 例如:
git clone https://oauth2:1234567890abcdef@github.com/user/repo.git
# 注意这里的oauth2是协议前缀,指定Git操作使用OAuth 2.0协议进行身份验证。
# 这个前缀通常与你的个人访问令牌一起使用,以便在不需要输入用户名和密码的情况下,通过令牌来验证你对GitHub仓库的访问权限。
# 这个前缀似乎是可选的,不必填
手把手demo:
github的访问令牌怎么clone
我的令牌:
github_pat_11AGFN......MVrMIq
我的仓库:
git@github.com:LincZero/MdNote_Work.git
或https://github.com/LincZero/MdNote_Work.git
最终命令:
# 格式 git clone https://YOUR_PAT@github.com/LincZero/MdNote_Work.git # (你会发现这个地址类似于git+https版的混合,其实就是https版多了个 `pat@` 部分而已) # 即 git clone https://github_pat_11AGFN......MVrMIq@github.com/LincZero/MdNote_Work.git
_
遇到的坑
GitHub的令牌创建位置居然在个人设置而非仓库里
如题,害我找半天
classic 的细粒度太低,不能针对仓库,要用beta那个token
如题。但是这两者的设置又不太一样。前者的资料比较多,后者很少,害我又踩了些坑
资料陈旧
例如现在的Github不支持帐密的问题
再例如权限名的问题:
权限问题
github的访问令牌需要什么权限才能clone,我设置了:
Administration Access: Read-only
Commit statuses Access: Read-only
Contents Access: Read-only
Metadata Access: Read-only
然后使用:
git clone github_pat_11AGFNV...WNZ4gzta@github.com:LincZero/MdNote_Work.git
但报错:
......TGN7WNZ4gzta@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
原因:命令写错了,要用https的基础上加token才对
在CICD工具流中使用的技巧
(以 GitHub 为例)
Actions secrets and variables
应用场景
我有个Github工作流权限相关问题:
例如我将网页源码分别放在三个仓库:VuePress工程、共建笔记库、只读笔记库。
其中第一个开源,第三个不开源,而第一个仓库会通过 github action 拉取“只读笔记库”的笔记。
这个时候一般的做法是什么?笔记库创建一个只读的访问令牌?然后 VuePress工程使用 Github Setting/Security/Actions 里的Repository sercrets?
设置
得到访问令牌后,在 Github Setting/Security/Actions 里添加一个 Secrets,例如这里我添加一个名为 “VUPRESS” 的 Secrets
工作流中使用,例如:
- name: 更新子模块到最新 (通过访问令牌)
# ${{ secrets.VUEPRESS }}
run: |
export VUEPRESS_TOKEN = ${{ secrets.VUEPRESS }}
git config --global http.extraheader "Authorization: token $VUEPRESS_TOKEN"
git config --global url."https://x-access-token:${{ secrets.VUEPRESS }}@github.com/".insteadOf "https://github.com/"
git submodule foreach git pull origin main
环境config方法
有时我们不仅是使用 clone 方法,例如在 CICD 中使用:
- name: 更新子模块到最新 (通过访问令牌)
# ${{ secrets.VUEPRESS }}
run: |
export VUEPRESS_TOKEN = ${{ secrets.VUEPRESS }}
git config --global http.extraheader "Authorization: token $VUEPRESS_TOKEN"
# 或
git config --global url."https://x-access-token:${{ secrets.VUEPRESS }}@github.com/".insteadOf "https://github.com/"
git submodule foreach git pull origin main
CICD语法糖
通过 uses: actions/checkout@v3
(或v4),可以很方便地处理好子模块、以及token。
不需要也不能像前面那样再通过 git config --global ...
来配置tokens,否则会因为重复设置 tokens 报错 重复头 问题
jobs:
deploy-gh-pages:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# 如果你文档需要 Git 子模块,取消注释下一行
submodules: true
token: '${{ secrets.VUEPRESS }}'
- name: Checkout - 更新子模块到最新
run: |
git submodule foreach git pull origin main
组织令牌问题
Github的token太奇怪了,不在仓库中……文档也没说,找了半天
- 首先需要在组织中开启允许个人创建令牌的开关(但他不叫这个) https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
- 然后接下来的流程同个人创建tokens,在个人设置>开发者选项里设置
- 此时需要注意!你可以在这个页面里先切换资源拥有者,切换成组织(如果这里没看到组织,就是你在组织那没设置好)
- 切回去组织里,Personal access tokens > Active tokens,看一下token生效了没
user:token还是只token?
在有的资料中,我看到格式是 https://<user>:<secrets>@github.com/...
,但有的资料却有没最前面那个 user
。
反正我试下来就是:
- github的话。不加直接user也行加也行,加的话他是用户名(如果是组织token也是填你的个人用户名)。不是组织名,也不是token名
- gitlab的话。不加似乎不行(不知道是不是与设置有关),提示上是
dependToken:
oauth2:
,我忘了具体是什么来着,和github的似乎不一样。不是填用户名,好像是填token名,或者固定字符oauth2
?