如何在CI中构建和推送quarkus原生容器?

问题描述 投票:0回答:1

我只想构建一个 CI 工作流程来创建和推送 quarkus 原生微容器。

几个月来,我断断续续地尝试让它发挥作用。我总是遇到 docker 命令在工作中不起作用的问题。

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 

我尝试了很多方法。构建 CI 一次只执行一个命令。就这样调试。使用其他图像来完成工作。使用不同的动作。它只是不会构建那个 Docker 镜像。

它在 gitlab.com 和 github.com 上都不起作用。所以我设置了自己的 Gitea 实例,因为在某些时候我读到这些站点不支持 dind。 AFAIK,我遵循了我能找到的所有方法,关于如何设置动作跑步者与 dind 一起工作。但他们显然不这样做。

我没有主意了。不知道该寻找什么了。我什至不知道我需要告诉你什么,所以你可以帮助我。但我会努力的。

我正在 k8s 集群中使用官方 Gitea Helm Chart 运行 Gitea。

我有一个 act_runner 部署。运行良好并完成应有的工作:

apiVersion: apps/v1
kind: Deployment
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: act-runner
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    spec:
      containers:
        - command:
            - sh
            - '-c'
            - >-
              while ! nc -z localhost 2376 </dev/null; do echo 'waiting for
              docker daemon...'; sleep 5; done; /sbin/tini -- /opt/act/run.sh
          env:
            - name: DOCKER_HOST
              value: tcp://localhost:2376
            - name: DOCKER_CERT_PATH
              value: /certs/client
            - name: DOCKER_TLS_VERIFY
              value: '1'
            - name: GITEA_INSTANCE_URL
              value: http://gitea-http:3000
            - name: GITEA_RUNNER_REGISTRATION_TOKEN
              valueFrom:
                secretKeyRef:
                  key: token
                  name: runner-secret
          image: gitea/act_runner:latest
          imagePullPolicy: Always
          name: runner
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /certs
              name: docker-certs
            - mountPath: /data
              name: runner-data
            
        - env:
            - name: DOCKER_TLS_CERTDIR
              value: /certs
          image: docker:23.0.6-dind
          imagePullPolicy: IfNotPresent
          name: daemon
          resources: {}
          securityContext:
            privileged: true
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /certs
              name: docker-certs
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
        - emptyDir: {}
          name: docker-certs
        - name: runner-data
          persistentVolumeClaim:
            claimName: act-runner-vol

我的工作流程定义如下所示:

name: Main Push
on:
  push:
    branches:
      - main

jobs:
  verify:
    name: Verify
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up GraalVM JDK
        uses: graalvm/setup-graalvm@v1
        with:
          java-version: '21'
          distribution: 'graalvm'

      - name: Set up Maven
        uses: stCarolas/setup-maven@v4
        with:
          maven-version: '3.9.6'

      - name: Maven Verify
        run: mvn --batch-mode --update-snapshots verify

  push_container:
    needs: verify
    name: Push Container
    runs-on: ubuntu-latest
    container:
      image: catthehacker/ubuntu:act-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up GraalVM JDK
        uses: graalvm/setup-graalvm@v1
        with:
          java-version: '21'
          distribution: 'graalvm'

      - name: Set up Maven
        uses: stCarolas/setup-maven@v4
        with:
          maven-version: '3.9.6'

      - name: Maven Install
        run: mvn --batch-mode --update-snapshots install -Dnative -Dquarkus.container-image.build=true -Dquarkus.container-image.push=true -Dquarkus.container-image.username=dscham -Dquarkus.container-image.password=${{ secrets.GITEA_TOKEN }}

一切都贯穿。只是最后,当

maven install
命令构建容器镜像时,由于上述错误而失败。我为这项工作使用了不同的图像。尝试手动安装 docker。使用来自 Action Marketplace 的设置 docker 操作。没有任何办法可以解决这个问题。

docker github-actions quarkus gitea quarkus-native
1个回答
0
投票

docker:dind
容器作为服务运行,并使用卷挂载共享套接字。

name: Test Docker on GitHub Actions

on:
  pull_request:
  push:
    branches: 
      - main

jobs:
  push_container:
    runs-on: ubuntu-latest
    services:
      docker:
        image: docker:dind
        options: --privileged --shm-size=2g
        ports:
          - 2375:2375
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock:ro
    container:
      image: catthehacker/ubuntu:act-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Test Docker
        run: |
          docker version
          docker info

最后一步检查与 Docker 服务器的连接,并且应该成功运行。

© www.soinside.com 2019 - 2024. All rights reserved.