我正在尝试使用 github 操作设置我们的 CI。在尝试了几天自己做之后,我来这里寻求帮助。
实际上,我有一个使用 postgres 数据库的 Go API,我的测试直接调用该 API,因此我需要运行该 API 和数据库来进行测试。
在本地,我没有任何问题,我的 API 在我使用 Makefile 中的命令构建的 docker 容器中运行。但我无法让我的测试在 github 操作上运行。
这是我的 Makefile:
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
BINARY_NAME=ATS-user
all: test build
build:
$(GOBUILD) -o $(BINARY_NAME) -v
test:
$(GOTEST) -v ./...
clean:
$(GOCLEAN)
rm -f $(BINARY_NAME)
run:
$(GOBUILD) -o $(BINARY_NAME) -v ./...
./$(BINARY_NAME)
start_db:
sudo docker network create network_app
sudo docker run --name postgresdb --net network_app -p5432:5432 -e POSTGRES_PASSWORD=***** -e POSTGRES_DB=userdb -d postgres
migrate_db:
migrate -path …Run Code Online (Sandbox Code Playgroud) 您好,我即将完成使用 GitHub 操作添加 CI/CD 步骤来部署我拥有的 R Shiny 应用程序。我遇到的问题是 R 中有一个名为的文件.Renviron,我用它来存储在 R 脚本中访问我的 SQL 数据库的凭据。通常,我在本地部署应用程序,并且在使用 rsconnect 包时包含此文件,但现在我使用 GitHub 操作,我相信我必须在 bash 脚本步骤中自己手动创建此 .Renviron 文件。
下面是我的 github 工作流程代码现在的样子。我遇到的问题是零件Create and populate .Renviron file。
# Triggered on push and pull request events
on: [push, pull_request]
# Name of the workflow => usethis::use_github_actions_badge("CI-CD")
name: CI-CD
jobs:
CI-CD:
runs-on: ${{ matrix.config.os }}
name: ${{ matrix.config.os }} (${{ matrix.config.r }})
strategy:
# we keep a matrix for convenience, but we would typically just run …Run Code Online (Sandbox Code Playgroud) continuous-integration r continuous-deployment github-actions
我有一个 flutter 项目,它依赖于 GitHub 上的私有存储库,例如:
dependencies:
flutter:
sdk: flutter
my_package:
git:
url: git@github.com:username/my_package.git
ref: main
Run Code Online (Sandbox Code Playgroud)
当我flutter pub get在本地计算机上运行时,一切正常,因为我的计算机通过 SSH 对拥有存储库的 GitHub 帐户进行身份验证,但是一旦我尝试从 GitHub Action 运行它,它就会失败并显示以下消息:
git@github.com: Permission denied (publickey)
Run Code Online (Sandbox Code Playgroud)
那么如何正确、安全地让构建机器有权获取存储库呢?
以下是 GitHub 操作工作流程:
git@github.com: Permission denied (publickey)
Run Code Online (Sandbox Code Playgroud) 很简单的问题,我不确定我错过了什么。
\n我有一个环境秘密:
\n\n在这种情况下,“生产”环境可用于所有分支。\n我只是尝试在 appsettings 替换操作中访问 MESSAGE 变量(我尝试添加和删除存储库级别 MESSAGE 但无济于事):
\n- uses: actions/checkout@master\n- name: Variable\xe2\x80\xafSubstitution\n uses: microsoft/variable-substitution@v1\n with:\n files: DummyApi/appsettings.json\n env:\n Message: ${{ secrets.MESSAGE }}\nRun Code Online (Sandbox Code Playgroud)\n这将用 repo 级别设置替换它,但不是 env 级别设置,这根本不会替换它:
\n- uses: actions/checkout@master\n- name: Variable\xe2\x80\xafSubstitution\n uses: microsoft/variable-substitution@v1\n with:\n files: DummyApi/appsettings.json\n env:\n Message: ${{ env.MESSAGE }}\nRun Code Online (Sandbox Code Playgroud)\n简单地说 - 如何访问环境中的 MESSAGE 值?我需要手动设置环境吗?谢谢。
\n补充信息:
\n我真正想做的是这样的:
\non: [push]\njobs:\n build-and-deploy:\n runs-on: ubuntu-latest\n environment: contains(\'main\', $GITHUB_REF) ? production : development\nRun Code Online (Sandbox Code Playgroud)\n我知道最后一行不起作用,但似乎如果我设置环境,我可以看到秘密 - 我只想重用大量部署代码而不是复制/粘贴。
\n我正在开始使用 CI/CD 和 Docker,我想在工作流程文件中将连接字符串传递给 docker。
deploy:
runs-on: ubuntu-latest
needs: publish
steps:
- name: deploy to server
uses: appleboy/ssh-action@master
env:
CONN_STRING: ${{ secrets.CONN_STRING }}
with:
host: ${{ secrets.SECRET_IP }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SERVER_KEY }}
port: 22
script: docker stop *** && docker rm **** && docker pull **** && docker run --env CONN_STRING=$CONN_STRING -d --name ******
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我创建了一个名为“CONN_STRING”的环境,它从我的 github 秘密中获取连接字符串。之后我想通过“CONN_STRING=$CONN_STRING”将其传递到dockerscript中。然而,自从我添加了这个之后,我的泊坞窗一直崩溃。有人知道我做错了什么吗?**** 只是我的项目的名称,我想保密。
我正在尝试使用缓存优化 android 和 ios 的 CICD 部署工作流程,但缓存路径有问题。当不缓存工作流程时效果很好,但在缓存时,fastlane 操作找不到 flutter 或 pod,并且我收到类似“error: /Users/runner/work/xxx/xxx/ios/Flutter/Release.xcconfig:1: ”的错误:在搜索路径中找不到包含的文件“Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig”(在项目“Runner”的目标“Runner”中)”
name: Deploy staging
on:
workflow_dispatch:
inputs:
lane:
description: "Staging lane to use : alpha or beta"
required: true
default: "alpha"
jobs:
deploy-to-ios:
runs-on: macos-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Flutter Cache
id: cache-flutter
uses: actions/cache@v2
with:
path: /Users/runner/hostedtoolcache/flutter
key: ${{ runner.os }}-flutter
restore-keys: |
${{ runner.os }}-flutter-
- name: Setup Flutter
uses: subosito/flutter-action@v1
if: steps.cache-flutter.outputs.cache-hit != 'true'
with:
channel: …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个存储库,它允许我为我正在分叉的项目的不同版本构建 Docker 映像。存储库应具有以下布局:
main定义工作流的分支,带有触发器,例如:
on:
push:
branches-ignore:
- main
Run Code Online (Sandbox Code Playgroud)
该工作流程从任何分支构建软件(基本上是mvn clean package,docker build并且docker push适用于软件的所有版本)software-1.2.3不包含任何.github/workflow文件的分支(将此文件复制到每个分支并在那里维护会很麻烦)从我迄今为止的研究来看,GitHub Actions 似乎仅在存在工作流定义时运行。但是,我想知道是否有一种方法可以使用网络钩子或其他方法来欺骗系统执行我想要的操作。
我的下一个最佳选择可能是使用workflow_dispatch,
我想使用 ghcr 作为缓存来存储 docker 映像,其部分在我的项目中几乎不会改变(Ubuntu、miniconda 和一堆 Python 包),然后在 Dockerfile 中使用此映像,将项目的卷和代码添加到其中。Dockerfile 由 Github Actions 运行。如何在 Dockerfile 的 From 语句中引用 ghcr 存储的图像?
我有一个 Github Action 将我的静态 Web 应用程序部署到 Azure。
在构建和部署步骤中失败并显示
deployment_token was not provided.
下面是我的工作流程 yml 文件。我已经从我的完整 Azure 静态名称发布的文件中更改了 Secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_scrubbed 。
我创建了一个名为:Azure-new-host 的 Github 环境,其中包含一个秘密 AZURE_STATIC_WEB_APPS_API_TOKEN_scrubbed 以及来自 Azure 的部署令牌。
我查看了 Github 环境 secerts 和 Azure KeyVault
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- main
jobs:
build_and_deploy_job:
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
runs-on: ubuntu-latest
name: Build and Deploy Job
environment:
name:Azure-new-host
url:https://github.com
steps:
- uses: actions/checkout@v2
with:
submodules: true
- …Run Code Online (Sandbox Code Playgroud) github environment-variables github-actions azure-static-web-app
我\xe2\x80\x99m 将管道从 Circle CI 迁移到 Github Actions,我发现有点奇怪,我只能运行作业一次而不是创建作业,然后从工作流程部分调用它,从而可以调用多次作业,而无需重复该作业中的命令/脚本。
\n我的管道将代码推送到三个环境,然后对每个环境运行灯塔扫描。在 Circle ci 中,我有 1 项工作将代码推送到我的环境,还有 1 项工作来运行 lighthouse。然后,从我的工作流程部分,我只需调用作业 3 次,并将 env 作为参数传递。我是否遗漏了一些东西,或者没有办法在 github actions 中做到这一点?我是否只需在每个作业中写 3 次命令?
\ngithub-actions ×10
github ×5
docker ×3
caching ×2
flutter ×2
appsettings ×1
cicd ×1
dart ×1
dockerfile ×1
fastlane ×1
ghcr ×1
go ×1
ios ×1
postgresql ×1
r ×1
workflow ×1