Note: GitHub Actions was available for GitHub Enterprise Server 2.22 as a limited beta. The beta has ended. GitHub Actions is now generally available in GitHub Enterprise Server 3.0 or later. For more information, see the GitHub Enterprise Server 3.0 release notes.
- For more information about upgrading to GitHub Enterprise Server 3.0 or later, see "Upgrading GitHub Enterprise Server."
- For more information about configuring GitHub Actions after you upgrade, see the documentation for GitHub Enterprise Server 3.0.
Note: GitHub-hosted runners are not currently supported on GitHub Enterprise Server. You can see more information about planned future support on the GitHub public roadmap.
Einführung
Diese Anleitung zeigt Dir Workflow-Beispiele, die einen Service-Container mit dem postgres
-Bild vom Docker-Hub konfigurieren. The workflow runs a script that connects to the PostgreSQL service, creates a table, and then populates it with data. To test that the workflow creates and populates the PostgreSQL table, the script prints the data from the table to the console.
Hinweis: Wenn Deine Workflows Docker-Containeraktionen oder Dienstcontainer verwenden, musst Du einen Linux-Läufer verwenden:
- If you are using GitHub-hosted runners, you must use an Ubuntu runner.
- Wenn Du selbst gehostete Läufer verwendest, musst Du einen Linux-Rechner als Deinen Läufer verwenden und Docker muss installiert sein.
Vorrausetzungen
Du solltest damit vertraut sein, wie Service-Container mit GitHub Actions arbeiten und die Netzwerkunterschiede kennen zwischen dem Laufen lassen von Aufträgen direkt auf dem Läufer oder in einem Container. Weitere Informationen findest Du unter "Über Service-Container."
Es kann Dir auch helfen, YAML, die Syntax für GitHub Actions und PostgreSQL grundlegende zu verstehen. Weitere Informationen findest Du unter:
- "Learn GitHub Actions"
- "PostgreSQL-Tutorial" in der PostgreSQL-Dokumentation
Jobs in Containern ausführen
Das Konfigurieren von Aufträgen für die Ausführung in einem Container vereinfacht die Netzwerkkonfigurationen zwischen dem Auftrag und den Dienstcontainern. Docker-Container im gleichen benutzerdefinierten Bridge-Netzwerk exponieren gegenseitig alle Ports, sodass Du keinen der Servicecontainer-Ports dem Docker-Host zuordnen musst. Mit der im Workflow konfigurierten Kennzeichnung kannst Du vom Auftrags-Container her auf den Dienst-Container zugreifen.
Du kannst diese Workflow-Datei in das .github/workflows
Verzeichnis Deines Repository kopieren und nach Bedarf verändern.
name: PostgreSQL service example
on: push
jobs:
# Label of the container job
container-job:
# Containers must run in Linux based operating systems
runs-on: ubuntu-latest
# Docker Hub image that `container-job` executes in
container: node:10.18-jessie
# Service containers to run with `container-job`
services:
# Label used to access the service container
postgres:
# Docker Hub image
image: postgres
# Provide the password for postgres
env:
POSTGRES_PASSWORD: postgres
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
# Downloads a copy of the code in your repository before running CI tests
- name: Check out repository code
uses: actions/checkout@v2
# Performs a clean installation of all dependencies in the `package.json` file
# For more information, see https://docs.npmjs.com/cli/ci.html
- name: Install dependencies
run: npm ci
- name: Connect to PostgreSQL
# Runs a script that creates a PostgreSQL table, populates
# the table with data, and then retrieves the data.
run: node client.js
# Environment variables used by the `client.js` script to create a new PostgreSQL table.
env:
# Der Name des Hosts fuer die Kommunikation mit dem PostgreSQL-Servicecontainer
POSTGRES_HOST: postgres
# The default PostgreSQL port
POSTGRES_PORT: 5432
Runner-Job konfigurieren
Dieser Workflow konfiguriert einen Auftrag, der im node:10.18-jessie
Container läuft und benutzt den ubuntu-latest
GitHub-gehosteten Läufer als Docker-Host für den Container. Weitere Informationen zum node:10.18-jessie
Container findest Du unter Knotenabbild auf „Docker Hub".
Der Workflow konfiguriert einen Servicecontainer mit der Kennzeichnung postgres
. Alle Dienste müssen in einem Container ausgeführt werden, daher erfordert jeder Dienst, dass Du den Container image
angibst. Dieses Beispiel verwendet das postgres
Containerbild, stellt das standardmäßige PostgreSQL-Passwort bereit und enthält Optionen für Systemdiagnosen, um sicherzustellen, dass der Dienst ausgeführt wird. Weitere Informationen findest Du im postgres image auf „Docker Hub".
jobs:
# Label des Container-Jobs
container-job:
# Container muessen in Linux-basierten Betriebssystemen laufen
runs-on: ubuntu-latest
# Docker-Hub-Image, das `container-job` in
container: node:10.18-jessie ausfuehrt
# Service-Container, die mit `container-job` laufen sollen
services:
# Label fuer den Zugriff auf den Service-Container
postgres:
# Docker-Hub-Image
image: postgres
# Passwort fuer postgres bereitstellen
env:
POSTGRES_PASSWORD: postgres
# Health checks so einstellen, dass sie warten, bis Postgres gestarted ist
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
„Steps“ (Schritte) konfigurieren
Der Workflow führt die folgenden Schritte aus:
- Auschecken des Repository auf dem Läufer
- Installieren von Abhängigkeiten
- Ausführen eines Script, um einen Client zu erstellen
steps:
# Downloads a copy of the code in your repository before running CI tests
- name: Check out repository code
uses: actions/checkout@v2
# Performs a clean installation of all dependencies in the `package.json` file
# For more information, see https://docs.npmjs.com/cli/ci.html
- name: Install dependencies
run: npm ci
- name: Connect to PostgreSQL
# Runs a script that creates a PostgreSQL table, populates
# the table with data, and then retrieves the data.
run: node client.js
# Environment variable used by the `client.js` script to create
# a new PostgreSQL client.
env:
# Der Name des Hosts fuer die Kommunikation mit dem PostgreSQL-Servicecontainer
POSTGRES_HOST: postgres
# Der standardmaessige PostgreSQL-Port
POSTGRES_PORT: 5432
Das Client.js-Skript sucht nach den POSTGRES_HOST
und POSTGRES_PORT
Umgebungsvariablen, um den Client zu erstellen. Der Workflow legt diese beiden Umgebungsvariablen als Teil des Schritts "Mit PostgreSQL verbinden" fest, um sie dem client.js-Skript zur Verfügung zu stellen. Weitere Informationen zum Skript findest Du unter "Testen des PostgreSQL-Dienstcontainers."
Der Hostname des PostgreSQL-Dienstes ist der Label, den Du in Deinem Workflow konfiguriert hast, in diesem Fall postgres
. Da Docker-Container im gleichen benutzerdefinierten Bridge-Netzwerk standardmäßig alle Ports öffnen, kannst Du auf den Service-Container durch den standardmäßigen PostgreSQL-Port 5432 zugreifen.
Jobs direkt auf der Runner-Maschine ausführen
Wenn Du einen Job direkt auf der Runner-Maschine ausführst, musst Du die Ports des Service-Containers den Ports des Docker-Hosts zuordnen. Du kannst über den Docker-Host auf den Service-Container zugreifen, indem Du localhost
und die Port-Nummer des Docker-Hosts verwendest.
Du kannst diese Workflow-Datei in das .github/workflows
Verzeichnis Deines Repository kopieren und nach Bedarf verändern.
name: PostgreSQL Service Example
on: push
jobs:
# Label of the runner job
runner-job:
# You must use a Linux environment when using service containers or container jobs
runs-on: ubuntu-latest
# Service containers to run with `runner-job`
services:
# Label used to access the service container
postgres:
# Docker Hub image
image: postgres
# Provide the password for postgres
env:
POSTGRES_PASSWORD: postgres
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps tcp port 5432 on service container to the host
- 5432:5432
steps:
# Downloads a copy of the code in your repository before running CI tests
- name: Check out repository code
uses: actions/checkout@v2
# Performs a clean installation of all dependencies in the `package.json` file
# For more information, see https://docs.npmjs.com/cli/ci.html
- name: Install dependencies
run: npm ci
- name: Connect to PostgreSQL
# Runs a script that creates a PostgreSQL table, populates
# the table with data, and then retrieves the data
run: node client.js
# Environment variables used by the `client.js` script to create
# a new PostgreSQL table.
env:
# Der Hostname fuer die Kommunikation mit dem PostgreSQL-Service-Container
POSTGRES_HOST: localhost
# Standardmaessiger PostgreSQL-Port
POSTGRES_PORT: 5432
Runner-Job konfigurieren
Das Beispiel verwendet den ubuntu-latest
GitHub-gehosteten Läufer als Docker-Host.
Der Workflow konfiguriert einen Servicecontainer mit der Kennzeichnung postgres
. Alle Dienste müssen in einem Container ausgeführt werden, daher erfordert jeder Dienst, dass Du den Container image
angibst. Dieses Beispiel verwendet das postgres
Containerbild, stellt das standardmäßige PostgreSQL-Passwort bereit und enthält Optionen für Systemdiagnosen, um sicherzustellen, dass der Dienst ausgeführt wird. Weitere Informationen findest Du im postgres image auf „Docker Hub".
Der Workflow ordnet Port 5432 des PostgreSQL-Service-Containers dem Docker-Host zu. Weitere Informationen über das Schlüsselwort ports
findest Du unter "Informationen über Service-Container."
jobs:
# Label des Runner-Jobs
runner-job:
# Du musst fuer Service-Containers oder Container-Jobs eine Linux-Umgebung verwenden
runs-on: ubuntu-latest
# Service-Containers zum Betrieb mit `runner-job`
services:
# Label fier den Zugriff auf den Service-Container
postgres:
# Docker-Hub-Image
image: postgres
# Das Passwort fuer Postgres bereitstellen
env:
POSTGRES_PASSWORD: postgres
# Health-Checks einstellen, dass sie warten, bis Postgres gestarted ist
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Ordnet TCP-Port 5432 des Service-Containers dem Host zu
- 5432:5432
„Steps“ (Schritte) konfigurieren
Der Workflow führt die folgenden Schritte aus:
- Auschecken des Repository auf dem Läufer
- Installieren von Abhängigkeiten
- Ausführen eines Script, um einen Client zu erstellen
steps:
# Downloads a copy of the code in your repository before running CI tests
- name: Check out repository code
uses: actions/checkout@v2
# Performs a clean installation of all dependencies in the `package.json` file
# For more information, see https://docs.npmjs.com/cli/ci.html
- name: Install dependencies
run: npm ci
- name: Connect to PostgreSQL
# Runs a script that creates a PostgreSQL table, populates
# the table with data, and then retrieves the data
run: node client.js
# Environment variables used by the `client.js` script to create
# a new PostgreSQL table.
env:
# Der Hostname zur Kommunikation with the PostgreSQL-Service-Container
POSTGRES_HOST: localhost
# Der standardmaessige PostgreSQL-Port
POSTGRES_PORT: 5432
Das Client.js-Skript sucht nach den POSTGRES_HOST
und POSTGRES_PORT
Umgebungsvariablen, um den Client zu erstellen. Der Workflow legt diese beiden Umgebungsvariablen als Teil des Schritts "Mit PostgreSQL verbinden" fest, um sie dem client.js-Skript zur Verfügung zu stellen. Weitere Informationen zum Skript findest Du unter "Testen des PostgreSQL-Dienstcontainers."
Der Hostname ist localhost
oder 127.0.0.1
.
Den PostgreSQL-Service-Container testen
You can test your workflow using the following script, which connects to the PostgreSQL service and adds a new table with some placeholder data. The script then prints the values stored in the PostgreSQL table to the terminal. Dein Skript kann jede beliebige Sprache verwenden, aber in diesem Beispiel wird Node.js mit dem npm-Modul pg
genutzt. Weitere Informationen findest Du unter npm-Modul pg.
Du kannst client.js anpassen, um alle PostgreSQL-Vorgänge einzuschließen, die für Deinen Workflow erforderlich sind. In this example, the script connects to the PostgreSQL service, adds a table to the postgres
database, inserts some placeholder data, and then retrieves the data.
Füge Deinem Repository eine neue Datei namens client.js hinzu mit dem folgenden Code.
const { Client } = require('pg');
const pgclient = new Client({
host: process.env.POSTGRES_HOST,
port: process.env.POSTGRES_PORT,
user: 'postgres',
password: 'postgres',
database: 'postgres'
});
pgclient.connect();
const table = 'CREATE TABLE student(id SERIAL PRIMARY KEY, firstName VARCHAR(40) NOT NULL, lastName VARCHAR(40) NOT NULL, age INT, address VARCHAR(80), email VARCHAR(40))'
const text = 'INSERT INTO student(firstname, lastname, age, address, email) VALUES($1, $2, $3, $4, $5) RETURNING *'
const values = ['Mona the', 'Octocat', 9, '88 Colin P Kelly Jr St, San Francisco, CA 94107, United States', 'octocat@github.com']
pgclient.query(table, (err, res) => {
if (err) throw err
});
pgclient.query(text, values, (err, res) => {
if (err) throw err
});
pgclient.query('SELECT * FROM student', (err, res) => {
if (err) throw err
console.log(err, res.rows) // Print the data in student table
pgclient.end()
});
The script creates a new connection to the PostgreSQL service, and uses the POSTGRES_HOST
and POSTGRES_PORT
environment variables to specify the PostgreSQL service IP address and port. Wenn host
Und port
nicht definiert sind, ist der Standard-Host localhost
und der Standard-Port 5432.
Das Skript erstellt eine Tabelle und füllt sie mit Platzhalterdaten auf. To test that the postgres
database contains the data, the script prints the contents of the table to the console log.
When you run this workflow, you should see the following output in the "Connect to PostgreSQL" step, which confirms that you successfully created the PostgreSQL table and added data:
null [ { id: 1,
firstname: 'Mona the',
lastname: 'Octocat',
age: 9,
address:
'88 Colin P Kelly Jr St, San Francisco, CA 94107, United States',
email: 'octocat@github.com' } ]