我有一個 GitHub 操作 CI,它在此應用程式目錄的最后一個版本中構建我的應用程式.git對于構建它是強制性的,問題是 GitHub 操作不會在 CI 的 docker build 步驟中將其洗掉。
這是我的 CI 模板:
on:
push:
pull_request:
jobs:
build:
runs-on: ubuntu-20.04
if: github.ref == 'refs/heads/3.3.5-MV'
steps:
- uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
file: ./Dockerfile
tags: foo/bar:latest
push: true
-
name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
Dockerfile
FROM ubuntu:focal
ENV TZ=Europe/Paris
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt upgrade -y && apt install -y [all my dependencies]
WORKDIR /usr/src/app
COPY . .
WORKDIR /usr/src/app/build
#default path on docker image /usr/local
RUN cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local/ -DTOOLS=0
RUN make -j $(nproc) install
WORKDIR /usr/local/bin
uj5u.com熱心網友回復:
問題出在docker/build-push-action@v2 action中,默認情況下會忽略使用該actions/checkout@v2操作創建的結帳:
默認情況下,此操作使用 Git 背景關系,因此您無需使用操作/簽出操作來簽出存盤庫,因為這將由 BuildKit 直接完成。
git 參考將基于觸發您的作業流程的事件,并將導致以下背景關系:
https://github.com/<owner>/<repo>.git#<ref>.
當您將git構建背景關系傳遞給 時docker build,它不會包含.git目錄。
如果您閱讀該docker/build-push-action@v2操作的檔案,您會發現您可以覆寫此行為:
但是,您可以通過使用背景關系輸入和操作/結帳操作來使用路徑背景關系來洗掉此限制。
您需要修改您的作業流程,使其包含一個明確的
context: .,如下所示:
name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
tags: foo/bar:latest
push: true
我已經整理了一個示例存盤庫,在這里演示了這一點;您可以在此構建運行中看到驗證。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427151.html
