注:GitHub Enterprise Server 2.22 上的 GitHub Actions 支持是有限的公测版。 测试已结束。 GitHub Actions 现在一般可用于 GitHub Enterprise Server 3.0 或更新版本。 更多信息请参阅 GitHub Enterprise Server 3.0 发行说明。
- 有关升级到 GitHub Enterprise Server 3.0 或更新版本的更多信息,请参阅“升级 GitHub Enterprise Server”。
- 有关在升级后配置 GitHub Actions 的更多信息,请参阅 GitHub Enterprise Server 3.0 的文档。
注: GitHub 托管的运行器目前在 GitHub Enterprise Server 上不受支持。 您可以在 GitHub 公共路线图 上查看有关未来支持计划的更多信息。
简介
本指南演示了使用 Docker Hub redis
映像配置服务容器的工作流程示例。 工作流程运行脚本来创建 Redis 客户端并使用数据填充客户端。 要测试工作流程是否创建并填充 Redis 客户端,脚本会将客户端数据打印到控制台。
注:如果您的工作流程使用 Docker 容器操作或服务容器,则必须使用 Linux 运行器:
- 如果您要使用 GitHub 托管的运行器,则必须使用 Ubuntu 运行器。
- 如果您要使用自托管运行器,则必须使用 Linux 机器作为运行器,并且必须安装 Docker。
基本要求
您应该熟悉服务容器如何与 GitHub Actions 协同作用,以及直接在运行器上或在容器中运行任务之间的网络差异。 更多信息请参阅“关于服务容器”。
你可能还会发现它也有助于基本了解 YAML、GitHub Actions 的语法和 Redis。 更多信息请参阅:
- "了解 GitHub Actions"
- Redis 文档中的“Redis 使用入门”
在容器中运行作业
配置要在容器中运行的作业可简化作业与服务容器之间的网络配置。 同一用户定义的桥接网络上的 Docker 容器互相显示所有端口,因此您无需将任何服务容器端口映射到 Docker 主机。 您可以使用工作流程中配置的标签从作业容器访问服务容器。
您可以将此工作流程文件复制到仓库的 .github/workflows
目录,并根据需要进行修改。
name: Redis container 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
redis:
# Docker Hub image
image: redis
# Set health checks to wait until redis has started
options: >-
--health-cmd "redis-cli ping"
--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 Redis
# Runs a script that creates a Redis client, populates
# the client with data, and retrieves data
run: node client.js
# Environment variable used by the `client.js` script to create a new Redis client.
env:
# The hostname used to communicate with the Redis service container
REDIS_HOST: redis
# The default Redis port
REDIS_PORT: 6379
配置容器作业
此工作流程配置在 node:10.18-jessie
容器中运行的作业,并使用 ubuntu-latest
GitHub 托管的运行器作为容器的 Docker 主机。 有关 node:10.18-jessie
容器的更多信息,请参阅 Docker Hub 上的节点映像。
工作流程用 Redis
标签配置服务容器。 所有服务必须在容器中运行,因此每个服务都需要指定容器映像
。 此示例使用 redis
容器映像,并包括状态检查选项以确保服务正在运行。 更多信息请参阅 Docker Hub 上的 redis 映像。
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
redis:
# Docker Hub image
image: redis
# Set health checks to wait until redis has started
options: >-
--health-cmd "redis-cli ping"
--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 Redis
# Runs a script that creates a Redis client, populates
# the client with data, and retrieves data
run: node client.js
# Environment variable used by the `client.js` script to create a new Redis client.
env:
# The hostname used to communicate with the Redis service container
REDIS_HOST: redis
# The default Redis port
REDIS_PORT: 6379
client.js 脚本寻找 REDIS_HOST
和 REDIS_PORT
环境变量来创建客户端。 工作流程将这两个环境变量设置为“连接到 Redis”步骤的一部分,使它们可用于 client.js 脚本。 有关脚本的更多信息,请参阅“测试 Redis 服务容器”。
Redis 服务的主机名是您在工作流程中配置的标签,本例中为 redis
。 由于同一用户定义的网桥网络上的 Docker 容器默认打开所有端口,因此您将能够访问默认 Redis 端口 6379 上的服务容器。
直接在运行器机器上运行作业
直接在运行器机器上运行作业时,需要将服务容器上的端口映射到 Docker 主机上的端口。 您可以使用 localhost
和 Docker 主机端口号从 Docker 主机访问服务容器。
您可以将此工作流程文件复制到仓库的 .github/workflows
目录,并根据需要进行修改。
name: Redis runner 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
redis:
# Docker Hub image
image: redis
# Set health checks to wait until redis has started
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps port 6379 on service container to the host
- 6379:6379
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 Redis
# Runs a script that creates a Redis client, populates
# the client with data, and retrieves data
run: node client.js
# Environment variable used by the `client.js` script to create
# a new Redis client.
env:
# The hostname used to communicate with the Redis service container
REDIS_HOST: localhost
# The default Redis port
REDIS_PORT: 6379
配置运行器作业
示例使用 ubuntu-latest
GitHub 托管的运行器作为 Docker 主机。
工作流程用 Redis
标签配置服务容器。 所有服务必须在容器中运行,因此每个服务都需要指定容器映像
。 此示例使用 redis
容器映像,并包括状态检查选项以确保服务正在运行。 更多信息请参阅 Docker Hub 上的 redis 映像。
工作流程将 Redis 服务容器上的端口 6379 映射到 Docker 主机。 有关 ports
关键字的更多信息,请参阅“关于服务容器”。
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
redis:
# Docker Hub image
image: redis
# Set health checks to wait until redis has started
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps port 6379 on service container to the host
- 6379:6379
配置步骤
工作流程执行以下步骤:
- 检出运行器上的仓库
- 安装依赖项
- 运行脚本来创建客户端
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 Redis
# Runs a script that creates a Redis client, populates
# the client with data, and retrieves data
run: node client.js
# Environment variable used by the `client.js` script to create
# a new Redis client.
env:
# The hostname used to communicate with the Redis service container
REDIS_HOST: localhost
# The default Redis port
REDIS_PORT: 6379
client.js 脚本寻找 REDIS_HOST
和 REDIS_PORT
环境变量来创建客户端。 工作流程将这两个环境变量设置为“连接到 Redis”步骤的一部分,使它们可用于 client.js 脚本。 有关脚本的更多信息,请参阅“测试 Redis 服务容器”。
主机名为 localhost
或 127.0.0.1
。
测试 Redis 服务容器
您可以使用以下脚本测试工作流程,该脚本将创建 Redis 客户端,并使用某些占位符数据填充客户端。 然后,脚本将存储在 Redis 客户端中的值打印到终端。 您的脚本可以使用任何您喜欢的语言,但此示例使用 Node.js 和 redis
npm 模块。 更多信息请参阅 npm redis 模块。
您可以修改 client.js 以包含工作流程需要的任何 Redis 操作。 在此示例中,脚本创建 Redis 客户端实例、添加占位符数据,然后检索数据。
使用以下代码将名为 client.js 的新文件添加到仓库。
const redis = require("redis");
// Creates a new Redis client
// If REDIS_HOST is not set, the default host is localhost
// If REDIS_PORT is not set, the default port is 6379
const redisClient = redis.createClient({
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT
});
redisClient.on("error", function(err) {
console.log("Error " + err);
});
// Sets the key "octocat" to a value of "Mona the octocat"
redisClient.set("octocat", "Mona the Octocat", redis.print);
// Sets a key to "octocat", field to "species", and "value" to "Cat and Octopus"
redisClient.hset("species", "octocat", "Cat and Octopus", redis.print);
// Sets a key to "octocat", field to "species", and "value" to "Dinosaur and Octopus"
redisClient.hset("species", "dinotocat", "Dinosaur and Octopus", redis.print);
// Sets a key to "octocat", field to "species", and "value" to "Cat and Robot"
redisClient.hset(["species", "robotocat", "Cat and Robot"], redis.print);
// Gets all fields in "species" key
redisClient.hkeys("species", function (err, replies) {
console.log(replies.length + " replies:");
replies.forEach(function (reply, i) {
console.log(" " + i + ": " + reply);
});
redisClient.quit();
});
该脚本使用 createClient
方法创建新的 Redis 客户端,接受 host
和 port
参数。 该脚本使用 REDIS_HOST
和 REDIS_PORT
环境变量来设置客户端的 IP 地址和端口。 如果未定义 host
和 port
,则默认主机为 localhost
,默认端口为 6379。
该脚本使用 set
和 hset
方法,以一些键值、字段和值来填充数据库。 要确认 Redis 客户端是否包含数据,脚本会将数据库的内容打印到控制台日志。
运行此工作流程时,应会在“连接到 Redis”步骤中看到以下输出,确认您创建了 Redis 客户端并添加了数据:
Reply: OK
Reply: 1
Reply: 1
Reply: 1
3 replies:
0: octocat
1: dinotocat
2: robotocat