我们在一个存储库中有我们的单页javascript应用程序,在另一个存储库中有我们的后端服务器。有没有办法在后端服务器上传递构建来触发单页应用程序的构建?
我们不希望将它们合并到一个存储库中,但我们确实希望确保对一个存储库的更改不会破坏另一个存储库。
答案 0 :(得分:7)
是的,可以在第一个Travis作业成功后触发另一个Travis作业。您可以使用trigger-travis.sh
脚本。
脚本documentation说明了如何使用它 - 设置环境变量并在.travis.yml
文件中添加几行。
答案 1 :(得分:0)
可能是的,也可能等待相关的构建结果。
我从上一个答案中发现了trigger-travis.sh
,但在此之前我实现了自己的解决方案(有关完整的工作源代码:cf.待处理的拉取请求PR196和live result)
基于travis API v3文档:
您将需要一个travis令牌,并将此令牌设置为travis门户上的秘密环境变量。
遵循此文档,我能够触发构建并等待他。
.travis_hook_qa.sh
(提取)-触发新的构建:
REQUEST_RESULT=$(curl -s -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Travis-API-Version: 3" \
-H "Authorization: token ${QA_TOKEN}" \
-d "$body" \
https://api.travis-ci.org/repo/${QA_SLUG}/requests)
(等同于trigger-travis.sh
,您可以对构建定义进行一些自定义(使用$body
)
.travis_wait_build.sh
(提取)-等待刚刚创建的构建,获取构建信息:
BUILD_INFO=$(curl -s -X GET \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Travis-API-Version: 3" \
-H "Authorization: token ${QA_TOKEN}" \
https://api.travis-ci.org/repo/${QA_SLUG}/builds?include=build.state\&include=build.id\&include=build.started_at\&branch.name=master\&sort_by=started_atdesc\&limit=1 )
BUILD_STATE=$(echo "${BUILD_INFO}" | grep -Po '"state":.*?[^\\]",'|head -n1| awk -F "\"" '{print $4}')
BUILD_ID=$(echo "${BUILD_INFO}" | grep '"id": '|head -n1| awk -F'[ ,]' '{print $8}')
您将不得不等到超时或预期的最终状态。
提醒:travis构建状态可能是created
| started
(然后是passed
| failed