Сборка Gradle генерирует разные jar при запуске из конвейера или локальноJAVA

Программисты JAVA общаются здесь
Anonymous
Сборка Gradle генерирует разные jar при запуске из конвейера или локально

Сообщение Anonymous »

Я использую рабочий процесс GitHub для создания файла jar для приложения Java/Spring, а затем создаю из него образ Docker.
Проблема в том, что когда я запускаю этот образ локально с помощью Docker, он НЕ запускает сервер grpc.
Я провел тест для запуска на локальном компьютере (это MacOS):

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

bash gradlew clean bootJar
docker build --build-arg JAR_FILE=build/libs/user-service-0.0.20.jar -t user-service-local:0.0.20 .
а затем я запустил свой образ, и все работает хорошо.
Когда я делаю то же самое, но через файл рабочего процесса github, и пытаюсь запустить отправленный докер изображение на локальном компьютере не запускает сервер grpc.
Я проверил оба изображения (сгенерированные на локальном компьютере и на github), и их ша идентичны.
Это наводит меня на размышления проблема в gradle.
Вот кусочки, которые помогут сузить круг вопросов.

< h3>Рабочий процесс Github

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

build:
if: github.event.pull_request.merged == true
needs: determine-version
runs-on: ubuntu-latest
name: Deploying ${{ needs.determine-version.outputs.new_version }}
env:
ECR_REPOSITORY: ${{ vars.ECR_REPOSITORY }}
ECR_REGISTRY: ${{ vars.ECR_REGISTRY }}
steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Set up JDK 8
uses: actions/setup-java@v2
with:
java-version: '8'
distribution: 'temurin'
architecture: x64

- name: Build with Gradle
run: ./gradlew clean build --refresh-dependencies

- name: Identify JAR file
id: identify-jar
run: |
jar_file=$(basename $(ls build/libs/*.jar | grep -v '\-plain\.jar'))
echo "Identified JAR file: $jar_file"
echo "::set-output name=jar_file::$jar_file"

- name: Debug JAR file
run: echo "JAR file ${{ steps.identify-jar.outputs.jar_file }}"

- name: Verify JAR file existence
run: |
if [[ ! -f build/libs/${{ steps.identify-jar.outputs.jar_file }} ]]; then
echo "JAR file not found!"
exit 1
fi
echo "JAR file found: build/libs/${{ steps.identify-jar.outputs.jar_file }}"

- name: Update version in build.gradle
run: |
old_version=$(grep "^version = '" build.gradle | cut -d"'" -f2)
echo "Old version: $old_version"
sed -i "s/version = '.*'/version = '${{ needs.determine-version.outputs.new_version }}'/g" build.gradle
new_version=$(grep "^version = '" build.gradle | cut -d"'" -f2)
echo "Updated version in build.gradle: $new_version"

- name: Commit and tag new version
env:
GITHUB_TOKEN: ${{ secrets.GH_PAT }}
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git remote set-url origin https://x-access-token:${{ secrets.GH_PAT }}@github.com/${{ github.repository }}.git
git add build.gradle
git commit -m "Increment version to ${{ needs.determine-version.outputs.new_version }}"
git tag -a "${{ needs.determine-version.outputs.new_version }}"  -m "Release ${{ needs.determine-version.outputs.new_version }}"
git push origin --tags
git push origin main

- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
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: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
env:
AWS_REGION: eu-west-2

- name: Build Docker image
run: |
docker build --build-arg JAR_FILE=build/libs/${{ steps.identify-jar.outputs.jar_file }} -t ${{ vars.ECR_REPOSITORY }}:latest -t ${{ vars.ECR_REPOSITORY }}:${{ needs.determine-version.outputs.new_version }} .

- name: Tag Docker image
run: |
docker tag ${{ vars.ECR_REPOSITORY }}:${{ needs.determine-version.outputs.new_version }} ${{ vars.ECR_REGISTRY }}/${{ vars.ECR_REPOSITORY }}:${{ needs.determine-version.outputs.new_version }}
docker tag ${{ vars.ECR_REPOSITORY }}:latest ${{ vars.ECR_REGISTRY }}/${{ vars.ECR_REPOSITORY }}:latest

- name: Push Docker image
run: |
docker push ${{ vars.ECR_REGISTRY }}/${{ vars.ECR_REPOSITORY }}:${{ needs.determine-version.outputs.new_version }}
docker push ${{ vars.ECR_REGISTRY }}/${{ vars.ECR_REPOSITORY }}:latest
Gradle-wrapper.properties

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

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
build.gradle

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

plugins {
id 'org.springframework.boot' version '2.6.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'com.google.protobuf' version '0.8.14'
}

group = 'com.uberkaretki.user'
version = '0.0.20'
sourceCompatibility = '1.8'

configurations {
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
mavenLocal()

repositories {
maven {
name 'GitHub'
url "https://maven.pkg.github.com/uberkaretki/common"

credentials {
username = 'xxx'
password = 'yyy' // Just packages:read
}
}
}

}

dependencies {
implementation "com.uberkaretki:karetki-common:0.1.2"

compileOnly 'org.projectlombok:lombok:1.18.22'
annotationProcessor 'org.projectlombok:lombok'

}

protobuf {
generatedFilesBaseDir = "$projectDir/src/main/java/generated"
protoc {
artifact = 'com.google.protobuf:protoc:3.10.1'
}

plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.25.0'
}
}

generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
Я провел тест для локального запуска (то есть MacOS):

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

bash gradlew clean bootJar
docker build --build-arg JAR_FILE=build/libs/user-service-0.0.20.jar -t user-service-local:0.0.20 .
а затем я запустил свой образ, и все работает хорошо.

Подробнее здесь: https://stackoverflow.com/questions/788 ... e-vs-local

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