#kubernetes #buildkite #ci

bin+lib buildkite-jobify

从 Buildkite 获取工作配置,并创建 Kubernetes 作业以满足这些请求的服务

6 个版本

0.7.0 2022年9月15日
0.6.2 2022年2月4日
0.6.1 2021年8月27日
0.6.0 2021年3月12日
0.5.1 2021年3月12日

#2251 in 命令行工具

MIT/Apache

105KB
2K SLoC

👷 buildkite-jobify

Embark Embark dependency status Build status

通过 GraphQL API 观察 1 个或多个 Buildkite 管道,以启动临时 Kubernetes 作业,这些作业(假设)将启动 Buildkite 代理来获取 Buildkite 已安排但尚未找到代理的作业。

仓库设置

期望 Kubernetes 作业规范及其对应的代理标签配置存储在管道附加的仓库中,从而将 CI 配置保留在该仓库中。

您仓库的管道上传作业应创建一个包含您配置的 gziped tarball 并在添加管道的其他步骤之前上传它,以便程序可以下载正在构建的提交的确切配置。

以下是一个示例 bash 脚本,旨在在 Alpine Linux 容器中运行。

#!/bin/bash
set -eu

echo "--- :aws-artifact: Uploading Jobify templates"
archive="jobify.tar.gz"

# Create a tarball of our jobify files
tar c -zf "$archive" -C .ci/jobify .

# Checksum the tarball and use that as our key
chksum=$(sha1sum $archive | awk '{ print $1 }')

# TODO: Just support CAS artifacts, and only upload unique ones (but maybe buildkite already does?)

# Upload the tarball as a Buildkite artifact
buildkite-agent artifact upload "$archive" &> upload_out
rm "$archive"

upload_info=$(cat upload_out)

# Buildkite doesn't seem to have a convenient way to know the ID assigned to the artifact
# so just cheat and parse its output for now
rx='Uploading\sartifact\s([0-9a-f-]{36})\sjobify\.tar\.gz'
if [[ "$upload_info" =~ $rx ]]; then
    # Set a metadata key to point to the archive we uploaded so that jobify can pick it up
    buildkite-agent meta-data set "jobify-artifact-id" "${BASH_REMATCH[1]}"
    # Set the chksum so we can avoid an additional lookup if jobify already has the data
    buildkite-agent meta-data set "jobify-artifact-chksum" "$chksum"
else
    echo "Failed to upload jobify configuration"
    exit 1
fi

echo "--- Uploading :pipeline:"
# Upload our main pipeline to kick off the rest of the build
buildkite-agent pipeline upload "$(dirname "$0")/pipeline.yml"

贡献

Contributor Covenant

我们欢迎社区对这个项目的贡献。

请阅读我们的 贡献指南 了解如何开始。

许可

许可协议为以下之一:

您可选择其中之一。

贡献

除非您明确声明,否则您提交的任何贡献,根据 Apache-2.0 许可证定义,将按上述方式双许可,不附加任何额外条款或条件。

依赖关系

~61–84MB
~1.5M SLoC