Gitlab CI无法下载正确的子模块文件

时间:2019-04-08 14:40:05

标签: git gitlab gitlab-ci git-submodules

我正在尝试在应用程序中使用私有git repo作为子模块。 在本地,我可以克隆主存储库并正确提取所有子模块。

我正在使用GitLab.com进行托管和运行。 在GitLab运行程序中,GitHub托管的公共回购协议可以正常运行,但是私有GitLab托管的回购协议不会获取最新代码。 我是主项目以及私有子模块的所有者。

我注意到这是在我完成并在主项目上进行更改并将其推送到子模块之后开始的。

当我尝试在GitLab运行器上进行自动构建时,子模块将拉动,但是即使它显示了正确的(当前/最新)的Git Ref SHA1,文件也是从很早以前提交的。我尝试了许多方法来获取私有存储库,并且对子模块进行了微不足道的更改。甚至我仍然无法提取子模块代码的最新版本。

我已经尝试使用内置的GitLab runner variables来拉出子模块,并且已经设置了before_script来尝试手动拉出。

我还确保更新了本地子模块,并将更改提交给我的主仓库。

这里使用的是GitLab运行器变量

<button id='btnShow' class='btn btn-info pull-right' onclick='pingall()'><i class='fa fa-desktop'></i>Show All</button> 

这是脚本之前的示例,我尝试过在没有设置GIT_SUBMODULE_STRATEGY的情况下进行此操作: 我已经尝试了许多删除和添加行的方法,以获取最新的代码。

var showallButton=document.getElementById('btnShow');
if((showallButton.innerText).trim()=="Show All"){        
    showallButton.innerHTML="Hide All";
}else{
    showallButton.innerHTML="Show All";         
}

预期: GitLab运行程序应将最新提交提交到子模块的分支上。

实际: GitLab拉出子模块,但是即使显示的提交是最新的,在特定提交之后的代码更改也不会显示。

1 个答案:

答案 0 :(得分:0)

在花费了上周的全部时间试图解决这个问题之后,我今天找到了解决方案。 我发现this question对最终解决方案有所帮助。

这是我的gitlab-ci.yml

stages:
  - deployGAE

deploy_production:
  image: google/cloud-sdk:alpine
  stage: deployGAE
#  variables:
#    GIT_SUBMODULE_STRATEGY: recursive
  environment:
    name: Production
  only:
    - master
  before_script:
    - git submodule update --init --remote --merge
    - git submodule status
    - git submodule foreach git log -1
  script:
    # Set GCloud service account key
    - echo $SERVICE_ACCOUNT > /tmp/$CI_PIPELINE_ID.json
    # Authenticate to GCloud API
    - gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
    # Globally set the GCLoud project for future commands
    - gcloud config set project $PROJECT_ID
    # Deploy the app to GCloud Build for deployment on App Engine
    - gcloud --quiet app deploy app.yaml #--verbosity=info
    # Remove versions that are no longer serving traffic
    - gcloud --quiet app versions delete $(gcloud app versions list --sort-by '~version' --format 'value(version.id)' --filter="TRAFFIC_SPLIT:0.00")
  after_script:
    # Remove the GCloud service account key
    - rm /tmp/$CI_PIPELINE_ID.json