【发布时间】:2025-11-26 16:55:02
【问题描述】:
我维护一个 lerna/yarn monorepo。我正在将 CI/CD 从 circle 迁移到新的 GitHuba Actions 发布测试版。我创建了以下工作流程:
name: CD
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Checkout master
run: git checkout master
- name: Install rsync
run: sudo apt install rsync
- name: Install yarn
run: |
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update
sudo apt-get install yarn
- name: Install Packages
run: yarn install
- name: Test
run: yarn test
- name: Upload coverage results to Code Climate
run: sh ./scripts/upload-coverage.sh
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
- name: Authenticate with Registry
run: echo "registry=//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Configure CI Git User
run: |
git config --global user.email octobot@github.com
git config --global user.name GitHub Actions
- name: Publish package
run: yarn deploy --yes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build Docs
run: yarn docs
- name: Deploy Docs
run: |
echo "apolloelements.dev" > docs/CNAME
npx gh-pages --dist docs
在发布包步骤失败并显示以下消息:
lerna info git Pushing tags...
lerna ERR! Error: Command failed: git push --follow-tags --no-verify origin master
lerna ERR! fatal: could not read Username for 'https://github.com': No such device or address
lerna ERR!
lerna ERR! at makeError (/home/runner/work/apollo-elements/apollo-elements/node_modules/execa/index.js:174:9)
lerna ERR! at Promise.all.then.arr (/home/runner/work/apollo-elements/apollo-elements/node_modules/execa/index.js:278:16)
lerna ERR! Error: Command failed: git push --follow-tags --no-verify origin master
lerna ERR! fatal: could not read Username for 'https://github.com': No such device or address
lerna ERR!
lerna ERR! at makeError (/home/runner/work/apollo-elements/apollo-elements/node_modules/execa/index.js:174:9)
lerna ERR! at Promise.all.then.arr (/home/runner/work/apollo-elements/apollo-elements/node_modules/execa/index.js:278:16)
lerna ERR! lerna Command failed: git push --follow-tags --no-verify origin master
lerna ERR! lerna fatal: could not read Username for 'https://github.com': No such device or address
lerna ERR! lerna
error Command failed with exit code 128.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
将遥控器更改为使用 HTTPS 并且 github 令牌没有帮助:
git remote rm origin
git remote add origin "https://$USER_NAME:$GITHUB_PERSONAL_ACCESS_TOKEN@github.com/apollo-elements/apollo-elements.git"
其中GITHUB_PERSONAL_ACCESS_TOKEN 是通过秘密传递的 PAT。
在那种情况下,我收到了这个错误:
lerna ERR! ENOREMOTEBRANCH Branch 'master' doesn't exist in remote 'origin'.
我应该如何设置项目以便能够将标签和提交从 CD 推送回存储库?
【问题讨论】:
-
developer.github.com/actions/managing-workflows/storing-secrets 文档说“每个存储库都包含一个 GITHUB_TOKEN 密码,但默认情况下它不可用于操作。您必须将 GITHUB_TOKEN 密码添加到每个需要访问权限的操作。”我不知道“将令牌秘密添加到操作中”意味着什么,因为我在文档中找不到详细信息,而且我还没有进入测试版,所以我无法自己测试。但如果这涉及 GitHub GUI 中的某些配置步骤,请检查您是否已完成。
-
或者,由于“无法读取用户名”出现在错误中,您只需要编辑 Lerna 配置以使 repo URL 为
https://USERNAME:GITHUB_TOKEN@github.com/yourorg/yourrepo或其他内容。可能就是这么简单。 -
谢谢,我已经编辑了问题以反映我在这些方面所做的尝试
-
啊……现在我们到了某个地方。我们似乎已经连接到 repo,但是我们得到了一个不同的错误,可能是因为 lerna 的本地副本不知道
originrepo 包含哪些分支(因为自从你创建以来它从未在它上面做过fetch遥控器)。所以在git remote add origin $URL步骤之后立即执行git fetch origin,然后lerna 的repo 本地副本应该知道originrepo 包含哪些分支,并且应该能够推送到origin的master` 分支。
标签: github lerna github-actions