在工作流步骤中获取服务容器名称

时间:2021-03-22 13:23:25

标签: docker github-actions

我的一般问题是:如何在 Github 工作流中获取正在运行的服务名称?

我有一个 Keycloak 容器设置 ass 服务,我想通过在 Keycloak 容器内执行脚本来导入领域,这是我的工作流程的片段:

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

[...]

要连接到正在运行的容器,我需要它的名称。服务名称 keycloak 不起作用,因为我在 Github 操作日志中看到了正在运行的容器列表:

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

有没有办法通过运行容器名称连接到正在运行的容器?

1 个答案:

答案 0 :(得分:1)

两个选项:

  1. 您在服务对象选项中设置了 --name
jobs:
  test:
    name: Test
    ...
    
    services:
      keycloak:
        ...

        options: --name keycloak --hostname keycloak

Possible docker create options

Workflow syntax documentation

  1. 根据此example,您的服务对象的键可以用作hostname。但这似乎仅在从容器内运行作业时才相关。