通过Codehip自动将文件从一个GitHub存储库复制到另一个存储库

时间:2017-12-05 12:12:40

标签: github webhooks codeship

我有两个存储库:S1S2

如果文件被更改或创建,我想自动将文件从S1推送到S2

例如:

我将translation.en.json推送到/translations/translation.en.json中的S1translation.en.json应自动推送到/dashboard/translation.en.json中的S2

当我在S1中推送某个主分支时,将运行代码生成。

我想用codeship步骤编写一个脚本,可以自动执行此操作。

我尝试过这样的事情:

#!/bin/bash
set -e
mkdir -p _translations/dashboard/
cd _translations
git fetch --unshallow || true
git fetch origin "+refs/heads/*:refs/remotes/origin/*"
git push git@github.com:company/translations.git "${CI_COMMIT_ID}:master"

1 个答案:

答案 0 :(得分:1)

我们有一个基于脚本的部署,可以推送到https://github.com/codeship/scripts/blob/master/deployments/git_push.sh

提供的其他git存储库

您可以通过设置所需的环境变量并添加curl命令添加脚本部署,将其添加到部署管道中,例如

export REMOTE_REPOSITORY="git@github.com:company/s2.git"
export REMOTE_BRANCH="master"
\curl -sSL https://raw.githubusercontent.com/codeship/scripts/master/deployments/git_push.sh | bash -s

您还需要确保允许Codeship项目SSH密钥(通过项目设置可用)推送到第二个存储库。有关如何配置此内容,请参阅https://documentation.codeship.com/general/projects/access-to-other-repositories-fails-during-build/

但是,这会将S1的完整内容推送到其他存储库。如果您只想推送特定文件(或一组文件),我建议克隆第二个存储库,复制文件,然后提交和推送。示例脚本可能如下所示:

cd "${HOME}"
git clone git@github.com:company/s2.git
# "${HOME}/clone" is the default checkout path on Codeship
cp ./clone/translation.en.json ./s2/
cd ./s2
git commit -a "Automatic commit, based on "company/s1@${CI_COMMIT_ID}"
git push origin master

请注意,此脚本未经过测试,必须根据您的具体需求进行调整。有关身份验证和访问第二个存储库的说明也适用于此用例。