我想用在GitHub上动作的复合运行步骤的动作,如所描述这里,为了重新使用他们在不同的工作流程。但是,我收到错误:
An action could not be found at the URI 'https://api.github.com/repos/scripts/build_ubuntu/tarball/v1
Run Code Online (Sandbox Code Playgroud)
我的主要工作流程(.github/workflows/BuildUbuntu.yml)如下:
[...]
jobs:
ubuntu_build_appimage:
name: Build MeshLab (Ubuntu - AppImage)
runs-on: ubuntu-16.04
steps:
- uses: scripts/build_ubuntu@v1
[...]
Run Code Online (Sandbox Code Playgroud)
复合步骤 ( .github/workflows/scripts/build_ubuntu/action.yml) 如下:
runs:
using: "composite"
steps:
- uses: actions/checkout@v2
with:
submodules: true
[other steps...]
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我引导一个简单的 Angular (v10.1) 应用程序并创建 Github 操作工作流,如下所示。请注意,我已将测试配置为使用Angular 测试文档中指定的推荐配置运行
# ./github/workflows/main.yml
name: Test master branch
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.10]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Cache Node.js modules
uses: actions/cache@v2
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.OS }}-node-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.OS }}-node-
${{ …Run Code Online (Sandbox Code Playgroud) 在我的 CI 中,我需要确保我的代码与 mongo 一起使用,因此我使用官方 mongo docker 映像并将所需的凭据作为 mongo 映像的环境变量传递。
build-on-mongo:
runs-on: ${{ matrix.os }}
env:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: password
MONGO_INITDB_DATABASE: vote-stuysu-org
services:
mongo:
image: mongo
ports:
# Maps tcp port 27017 on service container to the host
- 27017:27017
strategy:
matrix:
os: [ubuntu-20.04]
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '14.x'
- name: Install dependencies
run: npm install
- name: Test
run: npm test
env:
MONGO_URL: mongodb://root:password@localhost:27017/vote-stuysu-org
Run Code Online (Sandbox Code Playgroud)
但是,在测试步骤中,会记录一条错误消息:
(节点:2158)未处理的PromiseRejectionWarning:MongoError:身份验证失败。
我在 nodejs 旁边使用 mongoose,所以这是负责身份验证的代码:
mongoose.connect(process.env.MONGO_URL, {
useUnifiedTopology: true, …Run Code Online (Sandbox Code Playgroud) 我正在使用 GitHub 操作“构建并推送 Docker 映像”,因为它来自 Docker,并且是评价最高的已验证操作。
我的 YAML 文件的相关片段如下
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: user/app:latest
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
Run Code Online (Sandbox Code Playgroud)
正如示例中所示。工作流运行时,我始终看到错误
10 [stage-1 2/2] COPY --from=build /workspace/target/*.jar app.jar
#10 DONE 0.9s
#12 exporting to …Run Code Online (Sandbox Code Playgroud) 我 dockerized 一个 rails 应用程序,它可以在我的本地机器上完美运行。我将 Github Actions 配置为将应用程序推送到 Docker Hub 上的私有映像中,当我尝试在本地或另一台机器上拉取并运行它时,它会拉取映像,但容器随后退出,因为 Rails 失败并出现以下错误:
app | rm: cannot remove 'tmp/pids/server.pid': No such file or directory
app | => Booting Puma
app | => Rails 6.0.3.3 application starting in development
app | => Run `rails server --help` for more startup options
app | Exiting
app | (erb):9:in `<main>': Cannot load database configuration: (NoMethodError)
app | undefined method `[]' for nil:NilClass
app | from /usr/local/lib/ruby/2.7.0/erb.rb:905:in `eval'
app | from /usr/local/lib/ruby/2.7.0/erb.rb:905:in `result'
app | …Run Code Online (Sandbox Code Playgroud) ruby-on-rails docker dockerhub docker-compose github-actions
我最近突然想到,on pull_request如果你有一个公共存储库,任何人都可以触发 GitHub 操作的事件。
IE:
something.yml文件添加到.github/workflows在pull_request事件上运行的文件然后运行他们在拉取请求中指定的操作。如果您有自托管运行器,那么实际上地球上的任何人都可以在自托管运行器用户的上下文中在您的服务器上运行 shell 命令。
如果这像我认为的那样工作,那么地球上的任何人都可以通过拉取请求在您的服务器上运行任意代码。我试过这个,似乎是这样。
如何将可以在存储库上触发的操作列入白名单?否则,我如何安全地将 Github Actions 与公共存储库和自托管运行器一起使用。我已经看到了警告......我只是假设我必须小心不要接受来自未知来源的拉取请求。
我正在尝试构建将在 PowerShell 中运行的工作流。我正在为我的分支名称设置一个环境,以便在检出不同存储库的步骤中使用。
run: |
$branchName = $Env:GITHUB_REF -replace "refs/heads/", ""
echo "CURRENT_BRANCH=${branchName}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
Run Code Online (Sandbox Code Playgroud)
在后面的步骤中,我试图传入变量:
- name: Checkout repo
uses: actions/checkout@v2
with:
repository: 'MyOrg/MyRepo'
ref: ${env:CURRENT_BRANCH}
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的格式,包括大括号,但我一直从构建中获取输出,该输出显示该确切文本作为路径。我不确定如何对其进行评估。
当我这样做时, ${{ env:CURRENT_BRANCH }}我收到以下错误:
工作流无效。.github/workflows/publish.yml(第 54 行,第 14 列):意外符号:'env:CURRENT_BRANCH'。位于表达式中的位置 1:env:CURRENT_BRANCH
据我所知,在 Github Actions 中设置环境变量有两种方式:
但是如果我不想让他们保密怎么办?在上图中,SERVER_PREFIX 和 ANALYTICS_ENABLED 不应该是秘密的。有没有办法在设置页面上设置环境变量并使它们可见?在 Travis 中,我们有这样的选择。
我有一个使用 'strategy' = 'matrix' 和要构建的特定配置列表的工作流。
#
# build-N-test-v2.1-Dev and build-N-test-v2.1-Release are neary
# identical, but a few tests are commented out (to not needlessly stress CI system)
# for v2.1-Dev builds
#
# NOTE: I've tried many tricks - none which seem to work - to get this working on one file with one
# workflow and tests
# https://github.community/t/what-is-the-correct-if-condition-syntax-for-checking-matrix-os-version/16221
# https://github.community/t/how-to-conditionally-include-exclude-items-in-matrix-eg-based-on-branch/16853
#
# but none seem to work
#
name: build-N-test-v2.1-Dev
on:
push:
branches:
- v2.1-Dev
#- …Run Code Online (Sandbox Code Playgroud) 我正在做一个简单的前端项目,我(或用户)在其中对 openweathermap api 进行 API 调用,获取天气信息并将其显示在网站上。
简单的 HTML、CSS 和 vanilla JS
所以我想保持 repo 公开并使用 GitHub Pages 托管站点......但我的 js 文件包含运行时所需的 API 密钥。
(所有这些都是我搜索时发现的)
我知道有一种方法可以将 API 密钥保存在 GitHub 机密中,然后在 yml 文件中将其作为 GitHub Actions 中的环境变量引用。但是如何在运行时为访问我网站的任何用户将该秘密放入 js 代码中?
github-actions ×10
docker ×3
github ×2
angular ×1
api-key ×1
docker-push ×1
dockerhub ×1
github-pages ×1
mongodb ×1
mongoose ×1
node.js ×1
powershell ×1
spring-boot ×1