7

我创建了一个集成在每个提交上的 Xcode Bot。

在“运行脚本”触发器中,我想使用已运行的测试的集成状态更新当前的 GitHub 提交。相当标准的 CI 东西。

Xcode 机器人运行脚本

然后我将运行如下脚本:

curl -i -X POST -H "Content-type: application/json"
-H 'Authorization: token TOKEN_HERE' -d 
'{
"state": "success",
"target_url": "https://example.com/build/status",
"description": "The build succeeded!",
"context": "continuous-integration/jenkins"
}' 
https://api.github.com/repos/ORGANIZATION_HERE/REPO_HERE/statuses/SHA_HERE

看起来我将能够从 Xcode Bot 环境变量中获取successor状态:failure

访问 Xcode Server CI bot 运行中的构建文件夹(环境变量?)

但是,未列出当前提交的 SHA。此时我如何能够获取用于集成的提交的 SHA,以用于 GitHub 状态 API 请求?

4

3 回答 3

3

我在我的 Xcode Bot 触发器中使用此代码来获取提交的 SHA:

git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse HEAD

这是获取分支名称:

git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse --abbrev-ref HEAD

这将在源目录中执行 git 命令,将“name_of_your_git_repo”替换为您在 git 上的存储库的名称

于 2015-06-05T15:52:36.013 回答
1

XCS_OUTPUT_DIR有一个名为sourceControl.log. 该文件具有如下日志:

"DVTSourceControlLocationRevisionKey" : "3787c0d9e5107861a8b8d4c7300b2d414ad41dbb",

您可以解析该日志以找到 SHA。

也许更实际的是,CaveJohnson可以提取 SHA:

PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH
SHA=`cavejohnson getSha`

或者它可以继续将 GitHub 状态设置为单行:

#!/bin/bash
PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH
cavejohnson setGithubStatus

值得注意的是,除了成功和失败之外,还有更多的状态,我知道至少有 6 个。你可以在我的Xcode 6 CI Missing Manual中阅读更多关于它们的信息。

于 2015-02-23T19:56:39.887 回答
1

使用cavejohnson另一个答案中的代码(从 Xcode 日志中的某些键获取哈希),我遇到了一个问题,即返回的哈希是最后一次构建的过时哈希

我现在改为使用git rev-parse HEAD来获取 CI 构建中实际使用的提交的哈希值。我已将此作为对cavejohnson.

用于get_sha()检索 SHA-1 哈希:

def get_sha():
    return get_repo_sha(get_git_directory())

def get_git_directory():
    for subdir in os.listdir('.'):
        if is_git_directory(subdir):
            return subdir
    assert False

def is_git_directory(path = '.'):
    return subprocess.call(['git', '-C', path, 'status'], stderr=subprocess.STDOUT, stdout = open(os.devnull, 'w')) == 0    

def get_repo_sha(repo):
    sha = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=repo).decode('ascii').strip()
    return sha
于 2015-02-27T23:54:20.453 回答