«Ошибка: невозможно получить доступ к jar-файлу» в действиях GitHub при выполнении через .NET, но работает из командной JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 «Ошибка: невозможно получить доступ к jar-файлу» в действиях GitHub при выполнении через .NET, но работает из командной

Сообщение Anonymous »

У меня есть база данных, схема которой управляется с помощью Liquibase. У меня есть приложение .NET, которое использует эту базу данных для сохранения. У меня есть интеграционные тесты, использующие Testcontainers. Поэтому, когда эти тесты выполняются, каждый набор тестов получает через Docker свою собственную базу данных MySQL для запуска своих тестов, а затем эти базы данных закрываются.
Liquibase не имеет встроенной интеграции с .NET. , поэтому для запуска миграции базы данных я вызываю интерфейс командной строки Liquibase из .NET после того, как тест-контейнеры станут доступны. Это прекрасно работает локально, но у меня возникают проблемы при попытке объединить это в действиях GitHub:

Код: Выделить всё

jobs:
build-app:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Configure AWS CLI
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-west-2
- name: Checkout
uses: actions/checkout@v4
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.0.0
with:
dotnet-version: 6.0.x
- name: Setup Java
uses: actions/setup-java@v2
with:
distribution: 'adopt'
java-version: '11'
- name: Install Liquibase
run: |
mkdir liquibase
chmod +w liquibase
wget https://github.com/liquibase/liquibase/releases/download/v4.26.0/liquibase-4.26.0.tar.gz
tar -xzf liquibase-4.26.0.tar.gz -C liquibase
echo "LIQUIBASE_HOME=${GITHUB_WORKSPACE}/liquibase/liquibase" >> $GITHUB_ENV

chmod -R 755 liquibase

liquibase/liquibase --version
- name: Login to AWS CodeArtifact
run: |
aws codeartifact login --tool dotnet --repository ${{ secrets.AWS_CODEARTIFACT_REPOSITORY }} --domain ${{ secrets.AWS_CODEARTIFACT_DOMAIN }} --domain-owner ${{ secrets.AWS_CODEARTIFACT_ACCOUNT_NUMBER }}
- name: Restore
uses: cake-build/cake-action@v2
with:
target: Restore
- name: Build
uses: cake-build/cake-action@v2
with:
target: Build-CI
arguments: |
versionNumber: ${{inputs.version}}
- name: Configure AWS CLI
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.INTEGRATION_RUNNER_AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.INTEGRATION_RUNNER_AWS_SECRET_ACCESS_KEY }}
aws-region: eu-west-2
role-to-assume: ${{ secrets.INTEGRATION_RUNNER_ROLE_ARN }}
- name: Run tests
uses: cake-build/cake-action@v2
with:
target: Test-CI
Вызов liquibase/liquibase --version на этапе Установить Liquibase выполняется хорошо, поэтому я знаю, что Liquibase установлена ​​правильно. Однако, как только я вызываю Liquibase из .NET, я получаю следующую ошибку:

Код: Выделить всё

Error: Unable to access jarfile /home/runner/work/MyProject/WorkingDirectory/liquibase/liquibase/internal/lib/liquibase-core.jar
Этот файл существует, поэтому проблема не в пути. Код .NET, который это делает:

Код: Выделить всё

private void RunLiquibaseChangesets()
{
const string changelog = "db/root-changelog.xml";
var (username, password, databaseName) = DeconstructConnectionString(_dbContainer.GetConnectionString());
var url = $"jdbc:mysql://localhost:{_dbContainer.GetMappedPublicPort(ContainerPortNumber)}/{databaseName}";
var arguments =
$"update --url={url} --username={username} --password={password} --changeLogFile={changelog} --contexts=test-data";
var fileName = Environment.GetEnvironmentVariable("LIQUIBASE_HOME") ?? throw new InvalidOperationException(
"LIQUIBASE_HOME environment variable not set.  Please set it to the liquibase installation directory.");
var rootDirectory = Environment.GetEnvironmentVariable("GITHUB_WORKSPACE") ??
Path.Combine(Directory.GetCurrentDirectory(), "..", "..", "..", "..", "..");

var startInfo = new ProcessStartInfo
{
FileName = fileName,
Arguments = arguments,
WorkingDirectory = rootDirectory,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
};

using var process = new Process();
process.StartInfo = startInfo;
process.Start();

// Use StringBuilder to capture output
var outputBuilder = new StringBuilder();
var errorBuilder = new StringBuilder();

// Handle the output events
process.OutputDataReceived += (_, args) => outputBuilder.AppendLine(args.Data);
process.ErrorDataReceived += (_, args) => errorBuilder.AppendLine(args.Data);

// Start reading output and error asynchronously
process.BeginOutputReadLine();
process.BeginErrorReadLine();

var exited = process.WaitForExit(10000);

Console.WriteLine("----------------- Liquibase Output Start -----------------");
Console.WriteLine(outputBuilder.ToString());
Console.WriteLine("----------------- Liquibase Output End -----------------");

Console.WriteLine("----------------- Liquibase Error Start -----------------");
Console.WriteLine(errorBuilder.ToString());
Console.WriteLine("----------------- Liquibase Error End -----------------");

// Check to see if the process has exited.
if (!exited)
{
throw new InvalidOperationException($"Process did not exit: Output: {outputBuilder} Error: {errorBuilder}");
}
}
Я подозреваю, что это разрешения, но я предоставил полные разрешения через chmod, поэтому не могу решить, что делать дальше.


Подробнее здесь: https://stackoverflow.com/questions/781 ... ia-net-but
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»