用于更新GitHub提交状态和启用拉动请求所需状态检查的命令行工具

249 阅读4分钟

github-status-updater dockergo

命令行工具,用于更新GitHub提交状态和启用拉动请求所需的状态检查

适用于CI环境,可以设置更具体的提交和构建状态,包括设置目标URL(代表构建状态的页面的URL,或部署应用程序的URL)。

repo:statuspublic_repo 作用域

注意:上图中的图标是发放GitHub访问令牌的用户的头像。

使用方法

注意:该模块接受作为命令行参数或ENV变量的参数(或命令行参数和ENV变量的任何组合)。 命令行参数优先于ENV变量。

命令行参数ENV变量说明
行动GITHUB_ACTION要执行的行动:update_stateupdate_branch_protection
标记GITHUB_TOKENGithub访问令牌
所有者GITHUB_OWNERGithub 仓库所有者
版本库GITHUB_REPOGithub 仓库名称
术语GITHUB_REF提交 SHA、分支名称或标签
状态GITHUB_STATE提交状态。可能的值是pending,success,errorfailure
上下文GITHUB_CONTEXT状态标签。可以是一个CI环境的名称*(例如*:my-ci)
描述github_description状态的简短高层总结
网址github_target_url代表该状态的页面的URL

在本地构建Go程序

go get

CGO_ENABLED=0 go build -v -o "./dist/bin/github-status-updater" *.go

使用ENV变量在本地运行

export GITHUB_ACTION=update_state
export GITHUB_TOKEN=XXXXXXXXXXXXXXXX
export GITHUB_OWNER=cloudposse
export GITHUB_REPO=github-status-updater
export GITHUB_REF=XXXXXXXXXXXXXXXX
export GITHUB_STATE=success
export GITHUB_CONTEXT="my-ci"
export GITHUB_DESCRIPTION="Commit status with target URL"
export GITHUB_TARGET_URL="https://my-ci.com/build/1"

./dist/bin/github-status-updater

执行上述命令后,提交状态将被更新为success ,目标URL为https://my-ci.com/build/1 (下图中的绿色勾号)。

用命令行参数在本地运行

./dist/bin/github-status-updater \
        -action update_state \
        -token XXXXXXXXXXXXXXXX \
        -owner cloudposse \
        -repo github-status-updater \
        -ref XXXXXXXXXXXXXXX \
        -state success \
        -context "my-ci" \
        -description "Commit status with target URL" \
        -url "https://my-ci.com/build/1"

构建Docker镜像

注意:它将下载所有Go 的依赖项,然后在容器内构建程序(见 Dockerfile)

docker build --tag github-status-updater  --no-cache=true .

在带有ENV变量的Docker容器中运行

docker run -i --rm \
        -e GITHUB_ACTION=update_state \
        -e GITHUB_TOKEN=XXXXXXXXXXXXXXXX \
        -e GITHUB_OWNER=cloudposse \
        -e GITHUB_REPO=github-status-updater \
        -e GITHUB_REF=XXXXXXXXXXXXXXXX \
        -e GITHUB_STATE=success \
        -e GITHUB_CONTEXT="my-ci" \
        -e GITHUB_DESCRIPTION="Commit status with target URL" \
        -e GITHUB_TARGET_URL="https://my-ci.com/build/1" \
        github-status-updater

在Docker容器中运行,并将本地ENV变量传播到容器的环境中

export GITHUB_ACTION=update_state
export GITHUB_TOKEN=XXXXXXXXXXXXXXXX
export GITHUB_OWNER=cloudposse
export GITHUB_REPO=github-status-updater
export GITHUB_REF=XXXXXXXXXXXXXXXX
export GITHUB_STATE=success
export GITHUB_CONTEXT="my-ci"
export GITHUB_DESCRIPTION="Commit status with target URL"
export GITHUB_TARGET_URL="https://my-ci.com/build/1"

docker run -i --rm \
        -e GITHUB_ACTION \
        -e GITHUB_TOKEN \
        -e GITHUB_OWNER \
        -e GITHUB_REPO \
        -e GITHUB_REF \
        -e GITHUB_STATE \
        -e GITHUB_CONTEXT \
        -e GITHUB_DESCRIPTION \
        -e GITHUB_TARGET_URL \
        github-status-updater

在Docker容器中运行,并在一个文件中声明ENV变量

docker run -i --rm --env-file ./example.env github-status-updater

GitHub要求的状态检查

该模块可用于更新对拉动请求的必要状态检查。

这对CI环境来说是很有用的,可以用构建页面的URL来设置构建状态。

首先,版本库管理员需要在拉动请求中合并分支或在本地分支上的提交可以被推送到受保护的远程分支之前,强制执行分支保护和所需的状态检查。

然后,为了将my-ci 添加为github-status-updater repo 的分支test 的状态检查,在本地执行update_branch_protection 动作

./dist/bin/github-status-updater \
        -action update_branch_protection \
        -token XXXXXXXXXXXXXXXXXXXXXX \
        -owner cloudposse \
        -repo github-status-updater \
        -ref test \
        -context my-ci

或在Docker容器中

docker run -i --rm \
        -e GITHUB_ACTION=update_branch_protection \
        -e GITHUB_TOKEN=XXXXXXXXXXXXXXXX \
        -e GITHUB_OWNER=cloudposse \
        -e GITHUB_REPO=github-status-updater \
        -e GITHUB_REF=test \
        -e GITHUB_CONTEXT="my-ci" \
        github-status-updater

命令执行后,该分支的状态检查my-ci 将被启用,如下图所示

CodeFreshCI/CD管线集成

github-status-updater 可以很容易地集成到CI/CD管线中,特别是那些使用容器的构建步骤。

codefresh.yml显示了一个CodeFresh管道的完整例子,它执行了以下步骤:

  • 为应用程序构建一个Docker镜像
  • 构建一个Helm
  • 将Docker镜像(用于提交、分支和标签)推送至CodeFresh仓库
  • github-status-updater Docker容器上执行update_branch_protection 动作,将Staging Environment 作为必要的状态检查。
  • github-status-updater Docker容器上执行update_state 操作,将Staging Environment 的部署状态更新为pending
  • 将Helm图表部署到Kubernetes集群中
  • github-status-updater Docker容器上执行update_state 动作,将Staging Environment 部署状态更新为success

开发

如果你有兴趣成为一个贡献者,并希望参与开发github-status-updater ,我们很想听到你的意见!请给我们发电子邮件。请向我们发送电子邮件

一般来说,我们欢迎PR。我们遵循典型的 "fork-and-pull "的Git工作流程:

  1. 分叉GitHub上的repo
  2. 克隆项目到自己的机器上
  3. 向自己的分支提交修改
  4. 把你的工作推回你的分叉上
  5. 提交一个拉取请求,以便我们能够审查你的修改。

注意:在提交拉动请求之前,请确保合并来自 "上游 "的最新版本。

许可证

请参阅LICENSE以了解完整的细节。

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.