我正在使用 github 工作流为 java/spring 应用程序生成 jar 文件,然后从中构建 docker 镜像。问题是当我使用 docker 在本地运行该镜像时,它不会启动 grpc
我正在使用 github 工作流为 java/spring 应用程序生成 jar 文件,然后从中构建 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 工作流文件执行相同操作并尝试在本地运行推送的 docker 镜像时,它不会启动 grpc 服务器。
我已经验证了两个图像(在本地和 github 上的 vs 上生成)并且它们的 sha 是相同的。所以这让我认为问题出在 gradle
.
以下这些信息应该可以帮助缩小范围。
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
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
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 .
然后我开始了我的图像并且一切运行良好。