Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Example: Build Docker container image #1

Open
Cyclenerd opened this issue Jan 3, 2025 · 0 comments
Open

Example: Build Docker container image #1

Cyclenerd opened this issue Jan 3, 2025 · 0 comments
Labels
example Example GitHub Action

Comments

@Cyclenerd
Copy link
Owner

Cyclenerd commented Jan 3, 2025

This GitHub Action example workflow automates the creation of a GitHub Actions Runner on Hetzner Cloud, builds a Docker image using that runner, and then automatically deletes the runner to avoid unnecessary costs. It utilizes the Cyclenerd/hcloud-github-runner GitHub Action for managing the runner lifecycle and leverages the docker buildx command for efficient image building and pushing to the GitHub Container Registry.

Image used: docker-ce Hetzner Cloud Docker CE App (based on Ubuntu 24.04)

name: "Docker"

on:
  workflow_dispatch:

jobs:
  create-runner:
    name: Create Runner
    runs-on: ubuntu-24.04
    outputs:
      label: ${{ steps.create-runner.outputs.label }}
      server_id: ${{ steps.create-runner.outputs.server_id }}
    steps:
      - name: Create runner
        id: create-runner
        uses: Cyclenerd/hcloud-github-runner@v1
        with:
          mode: create
          github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
          hcloud_token: ${{ secrets.HCLOUD_TOKEN }}
          server_type: cx22
          # Use Hetzner Cloud Docker CE App (based on Ubuntu 24.04)
          # https://docs.hetzner.com/cloud/apps/list/docker-ce
          # https://github.com/hetznercloud/apps/tree/main/apps/hetzner/docker-ce
          image: docker-ce
          # Add SSH key to disable root password generation and email notifications
          # ssh_key: 123

  build:
    name: Build Image
    needs:
      - create-runner # required to get output from the create-runner job
    runs-on: ${{ needs.create-runner.outputs.label }}
    steps:
      - name: Checkout 🛎️
        uses: actions/checkout@v4
      - name: Login to GitHub container registry 🏭
        # https://docs.docker.com/reference/cli/docker/login/
        run: docker login ghcr.io -u "${{ github.repository_owner }}" -p "${{ secrets.github_token }}"
      - name: Build Container image 🧪
        # https://docs.docker.com/reference/cli/docker/buildx/build/
        # Replace "ghcr.io/cyclenerd/hcloud-github-runner:example"
        run: |
          docker buildx build . \
            --file "Dockerfile" \
            --tag "ghcr.io/cyclenerd/hcloud-github-runner:example" \
            --push

  delete-runner:
    name: Delete Runner
    needs:
      - create-runner # required to get output from the create-runner job
      - build # required to wait when the main job is done
    runs-on: ubuntu-24.04
    if: ${{ always() }} # required to stop the runner even if the error happened in the previous jobs
    steps:
      - name: Delete runner
        uses: Cyclenerd/hcloud-github-runner@v1
        with:
          mode: delete
          github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
          hcloud_token: ${{ secrets.HCLOUD_TOKEN }}
          name: ${{ needs.create-runner.outputs.label }}
          server_id: ${{ needs.create-runner.outputs.server_id }}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
example Example GitHub Action
Projects
None yet
Development

No branches or pull requests

1 participant