zolv
zolv

Reputation: 1902

Get a service container name in workflow step

My general question is: how to get a running service name in Github workflow?

I have a Keycloak containerset up ass a service and I want to import a realm by executing a script inside Keycloak container, here is a snippet of my workflow:

name: Test Workflow

on:
  push:
    branches-ignore:
      - main

jobs:
  test:
    name: Test
    runs-on: ubuntu-latest

    services:
      keycloak:
        image: quay.io/keycloak/keycloak:12.0.4
        env:
            KEYCLOAK_USER: "admin"
            KEYCLOAK_PASSWORD: "admin"
            JAVA_OPTS_APPEND: "-Dkeycloak.profile.feature.upload_scripts=enabled"
        ports:
            - "8091:8080"
        volumes:
            - "/workspace/src/main/resources/keycloak:/src/main/resources/keycloak/"

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup Java
        uses: actions/setup-java@v1
        with:
          java-version: 14

      - name: List running containers
        run: docker ps -a

      - name: Setup Keycloak realm
        run: |
            docker exec -it keycloak sh -c 
            "/opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin && 
            /opt/jboss/keycloak/bin/kcadm.sh create realms -s realm=testrealm -s enabled=true && 
            /opt/jboss/keycloak/bin/kcadm.sh create partialImport -r testrealm -s ifResourceExists=SKIP -o -f /src/main/resources/keycloak/realm.json"

      - name: Gradle Test
        run: ./gradlew test

[...]

To connect to a running container, I need its name. A service name keycloak doesn't work as I see in logs of Github actions a list of running containers:

Run docker ps -a
CONTAINER ID   IMAGE                                       COMMAND                  CREATED              STATUS              PORTS                              NAMES
fdb7e1e05296   quay.io/keycloak/keycloak:12.0.4            "/opt/jboss/tools/do…"   55 seconds ago       Up 47 seconds       8443/tcp, 0.0.0.0:8091->8080/tcp   594297e586cd4bdab13cc8fa63b8954d_quayiokeycloakkeycloak1104_1ac754

Is there a way to connect to a running container via running container name?

Upvotes: 4

Views: 2357

Answers (1)

Two options:

  1. You set the --name in the service object options:
jobs:
  test:
    name: Test
    ...
    
    services:
      keycloak:
        ...

        options: --name keycloak --hostname keycloak

Possible docker create options.

Workflow syntax documentation.

  1. According to this example, the key of your service object can be used as the hostname. But this seems to be only relevant when running jobs from within containers.

Upvotes: 6

Related Questions