【问题标题】:Gitlab CI not downloading correct submodule filesGitlab CI没有下载正确的子模块文件
【发布时间】:2019-08-29 18:02:38
【问题描述】:

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

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

我注意到这是在我在处理我的主项目时对我的子模块进行更改并推送之后开始的。

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

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

我还确保更新我的本地子模块并将更改提交到我的主存储库。

这里使用的是 GitLab runner 变量

  variables:
    GIT_SUBMODULE_STRATEGY: recursive

这是脚本之前的示例,我尝试过设置和不设置 GIT_SUBMODULE_STRATEGY: none 我已经尝试了许多这种删除和添加行的变体,试图获取最新的代码。

    - git submodule sync --recursive
    - git submodule update --force --recursive --remote
    - git submodule foreach git pull
    - git submodule status
    - git submodule foreach git log -1

预期: GitLab runner 应该拉取子模块分支上的最新提交。

实际: GitLab 拉取子模块,但在某个提交后的代码更改不会显示,即使显示的提交是当前的。

【问题讨论】:

    标签: git gitlab gitlab-ci git-submodules


    【解决方案1】:

    在上周花了一整周的时间试图解决这个问题后,我今天找到了解决方案。 我发现 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
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多