要构建当前项目的图像,请使用gradle任务bootBuildImage
。此任务将创建一个OCI image using Cloud Native Buildpacks。
- name: Build image with Gradle
run: ./gradlew bootBuildImage
下一步,我尝试使用build-push-action将这个docker映像推送到我的私有GitHub注册表中。
- name: Push image to Registry
uses: docker/build-push-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
registry: docker.pkg.github.com
repository: sullrich84/wettkampfdb-backend
tags: latest
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
从日志中可以看出,此步骤的问题在于它似乎依赖于工作空间根目录中不存在的Dockerfile
。
unable to prepare context: unable to evaluate symlinks in Dockerfile path:
lstat /github/workspace/Dockerfile: no such file or directory
是否可以将通过bootBuildImage
创建的图像推送到我的私有GitHub注册表中,而无需使用/创建专用的Dockerfile
?
答案 0 :(得分:2)
如果您只是想处理docker push
,可以使用本机docker
命令来完成。
类似这样的东西。
- name: run docker push
run: |
@docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
@docker push $BUILD_TAG
@docker push $LATEST_TAG
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_USERNAME: ${{ secrets.DOCKER_PASSWORD }}
答案 1 :(得分:1)
您使用的github动作不是用于推送由repository
和tag
定义的图像,而是用于推送build and push
https://github.com/docker/build-push-action#build-push-action
构建并推送Docker映像,并在需要时登录Docker注册表。
具体来说,这也与https://github.com/docker/build-push-action/issues/17有关-因此,无需推送即可进行构建,反之亦然。
此github动作还不允许仅推送。
对于许多CI / CD解决方案来说,这是目前非常普遍的情况,其中构建和推送是一项任务。
答案 2 :(得分:1)
我使用gradle bootBuildImage的publishRegistry选项。
在你的 build.gradle 中设置参数(下面是 gradle.kts)
tasks.bootBuildImage {
imageName = "${imageName}:${project.version}"
isPublish = true
docker {
publishRegistry {
url = dockerUrl
username = dockerUsername
password = dockerPassword
}
}
}
检查这个document