ssh - 使用 SSH 在 Azure Pipeline 中 checkout git 子模块

标签 ssh azure-devops azure-pipelines git-submodules

我尝试在 Azure DevOps Pipeline 中通过 ssh 而不是 https(如果您使用“Checkout submodules”,则为默认值) checkout git 子模块。使用图片中的选项它可以工作 - 但对于开发人员来说,如果他们正在使用存储库,则一直输入密码会很烦人。

enter image description here

为此,我使用以下说明添加 ssh key.
我创建了一个公钥和一个私钥,并复制了 known_host 条目。

这是我的 YAML 文件片段:

stages:
- stage: DeployBackend
jobs:
  - job: SSH
    steps:
      - task: InstallSSHKey@0
        inputs:
          knownHostsEntry: $(known_host)
          sshPublicKey: $(public_key)
          sshKeySecureFile: 'private_key_file'
  - job: Deploy
    steps:
      - checkout: self
        submodules: true
      - script: |
          -- here I run all docker commands to build the container and push it to Azure --
        displayName: "Deploy"

如果我使用 SSH key 将存储库克隆到我的本地计算机,我没有问题。但是,如果我运行管道,它将在子模块结帐时崩溃:

Please make sure you have the correct access rights and the repository exists. fatal: clone of 'git@ssh.dev.azure.com:v3/repoLink' into submodule path '/home/vsts/work/1/s/app/submoduleFolder' failed Failed to clone 'app/submoduleFolder'. Retry scheduled Cloning into '/home/vsts/work/1/s/app/submoduleFolder'... Host key verification failed. fatal: Could not read from remote repository.



那是 .gitmodules存储库中的文件 - 它在本地没有任何问题:
[submodule "app/subModuleName"]
    path = app/subModuleName
    url = git@ssh.dev.azure.com:v3/***/subModuleName
    branch = master

我什至写了id_rsa , known_hostsid_rsa.pub文件到 .ssh使用脚本,但似乎它们甚至不用于 ssh 验证。

最佳答案

解决方案是在一项工作中完成所有任务。不同的变量不共享job实例。

这有效:

jobs:
    - job: jobName
      steps:
        - task: AzureKeyVault@1
          inputs:
            azureSubscription: '***'
            KeyVaultName: '***'
          displayName: "Read Secrets from KeyVault"
        - task: InstallSSHKey@0
          inputs:
            knownHostsEntry: $(known_host)
            sshPublicKey: $(public_key)
            sshKeySecureFile: 'private_key_file'
          displayName: "Create SSH files"
        - script: |
            git clone --recurse-submodules git@ssh.dev.azure.com:v3/****
            git submodule update --init --recursive
            docker login -u $(userName) -p $(password) ***
            docker build ****
            docker push ****
          displayName: "Build and Push Docker Container"

关于ssh - 使用 SSH 在 Azure Pipeline 中 checkout git 子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58862131/

相关文章:

azure-devops - Azure 管道 : Conditional run of task groups

ssh - 易于ssh的终端插件

git - Windows git bash在启动时找不到agent.env

c# - 我想从使用 c# 运行的 Windows 框中通过 ssh 运行命令

azure - Visual Studio Online 持续集成构建意外失败

azure - DevOps - 禁用发布管道中的阶段

python - paramiko.ssh_exception.ProxyCommandFailure : 'Broken pipe' )

azure - 如何自动更改工作项状态

azure - 如何从Azure管道库中保存的变量组中查看锁定的变量值?

azure - 具有项目间依赖关系的同一解决方案中的多个项目 - 使用 Azure DevOps 进行部署 - CI CD Pipeline