首页 > 解决方案 > 启动时自动创建 Rundeck 作业(Docker 容器中的 Rundeck)

问题描述

我正在尝试在 Docker 容器中设置 Rundeck。我想使用 Rundeck 来配置和管理我的 Docker 舰队。我发现了一个带有 ansible-plugin 的图像。到目前为止,运行简单的剧本和自动发现我的 Pi 节点都可以工作。

码头工人脚本:

echo "[INFO] prepare rundeck-home directory"
mkdir ../../target/work/home
mkdir ../../target/work/home/rundeck
mkdir ../../target/work/home/rundeck/data

echo -e "[INFO] copy host inventory to rundeck-home"
cp resources/inventory/hosts.ini ../../target/work/home/rundeck/data/inventory.ini

echo -e "[INFO] pull image"
docker pull batix/rundeck-ansible

echo -e "[INFO] start rundeck container"
docker run -d \
    --name rundeck-raspi \
    -p 4440:4440 \
    -v "/home/sebastian/work/workspace/workspace-github/raspi/target/work/home/rundeck/data:/home/rundeck/data" \
    batix/rundeck-ansible

现在我想为容器提供剧本,这些剧本应该成为在 Rundeck 中运行的作业。谁能给我一个提示,告诉我如何从外部创建 Rundeck 作业(应该调用 ansible 剧本)?通过api?

我能想到的一种方法是手动创建一次作业并将它们导出为 XML 或 YAML。当容器和​​ Rundeck 启动并运行时,我可以自动导入作业。rundeck-home 中是否有某个文件夹或可以放置这些文件以进行自动导入的某个文件夹?还是有 API 调用之类的?

Jenkins 会比 Rundeck 更适合这项任务吗?


编辑:刚刚更改为 Dockerfile

FROM batix/rundeck-ansible:latest

COPY resources/inventory/hosts.ini /home/rundeck/data/inventory.ini
COPY resources/realms.properties /home/rundeck/etc/realms.properties
COPY resources/tokens.properties /home/rundeck/etc/tokens.properties


# import jobs
ENV RD_URL="http://localhost:4440"
ENV RD_TOKEN="yJhbGciOiJIUzI1NiIs"
ENV rd_api="36"
ENV rd_project="Test-Project"
ENV rd_job_path="/home/rundeck/data/jobs"
ENV rd_job_file="Ping_Nodes.yaml"

# copy job definitions and script
COPY resources/jobs-definitions/Ping_Nodes.yaml /home/rundeck/data/jobs/Ping_Nodes.yaml
RUN curl -kSsv --header "X-Rundeck-Auth-Token:$RD_TOKEN" \
    -F yamlBatch=@"$rd_job_path/$rd_job_file" "$RD_URL/api/$rd_api/project/$rd_project/jobs/import?fileformat=yaml&dupeOption=update"

你知道我怎样才能将卷曲延迟到 rundeck 服务启动并运行之后吗?

标签: dockeransiblerundeck

解决方案


没错,您可以在部署实例(部署实例并稍后导入作业的脚本)之后使用cURL(指向您的 Docker 实例)设计一个带有API调用的脚本,我留下一个基本示例(在此示例中,您需要XML 格式的作业定义)。

对于 XML 作业定义格式:

#!/bin/sh

# protocol
protocol="http"

# basic rundeck info
rdeck_host="localhost"
rdeck_port="4440"
rdeck_api="36"
rdeck_token="qNcao2e75iMf1PmxYfUJaGEzuVOIW3Xz"

# specific api call info
rdeck_project="ProjectEXAMPLE"
rdeck_xml_file="HelloWorld.xml"

# api call
curl -kSsv --header "X-Rundeck-Auth-Token:$rdeck_token" \
  -F xmlBatch=@"$rdeck_xml_file" "$protocol://$rdeck_host:$rdeck_port/api/$rdeck_api/project/$rdeck_project/jobs/import?fileformat=xml&dupeOption=update"

对于 YAML 作业定义格式:

#!/bin/sh

# protocol
protocol="http"

# basic rundeck info
rdeck_host="localhost"
rdeck_port="4440"
rdeck_api="36"
rdeck_token="qNcao2e75iMf1PmxYfUJaGEzuVOIW3Xz"

# specific api call info
rdeck_project="ProjectEXAMPLE"
rdeck_yml_file="HelloWorldYML.yaml"

# api call
curl -kSsv --header "X-Rundeck-Auth-Token:$rdeck_token" \
  -F xmlBatch=@"$rdeck_yml_file" "$protocol://$rdeck_host:$rdeck_port/api/$rdeck_api/project/$rdeck_project/jobs/import?fileformat=yaml&dupeOption=update"

这里是 API 调用。


推荐阅读