admin管理员组

文章数量:1303389

I am trying to make an AWS EC2 instance a build machine for azure devops, In my pipeline I am trying to use a nerdbank gitversioning docker container to get the build version. The start of the pipeline looks like:

steps:
- checkout: self
  fetchDepth: 0

- script: |
    docker pull andrewlock/nerdbank-gitversioning:latest
  displayName: 'Pull Docker Image'

- script: |
    VERSION=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) andrewlock/nerdbank-gitversioning:latest get-version | grep -oP '(^Version:)\K.*' | xargs)
    echo "Version found: $VERSION"
    echo "##vso[task.setvariable variable=VERSION]$VERSION"  # Sets VERSION as a variable for later steps
  displayName: 'Get version from Docker'

However when I run the pipeline on the EC2 instance, I get the error:

Unhandled Exception: LibGit2Sharp.LibGit2SharpException: unsupported repository version 1. Only versions up to 0 are supported.
   at LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
   at LibGit2Sharp.Core.Proxy.git_repository_open(String path)
   at LibGit2Sharp.Repository..ctor(String path, RepositoryOptions options, RepositoryRequiredParameter requiredParameter)
   at Nerdbank.GitVersioning.GitExtensions.OpenGitRepo(String pathUnderGitRepo)
   at Nerdbank.GitVersioning.Tool.Program.OnGetVersionCommand(String projectPath, String format, String versionOrRef) in D:\a\1\s\src\nbgv\Program.cs:line 236
   at Nerdbank.GitVersioning.Tool.Program.Main(String[] args) in D:\a\1\s\src\nbgv\Program.cs:line 110
Version not found! Failing the pipeline.

When I run the build on my own laptop as a build agent, the pipeline runs fine.

I've tried setting the git config to use repository version 0 in the cloud init startup script:

su ubuntu -c "git config --global core.repositoryFormatVersion 0"
echo "[url \"https://\"]" >> /home/ubuntu/.gitconfig
echo "  insteadOf = git://" >> /home/ubuntu/.gitconfig
echo "[core]" >> /home/ubuntu/.gitconfig
echo "  repositoryFormatVersion = 0" >> /home/ubuntu/.gitconfig

The git config also says it is version 0:

cat .\.git\config                      
[core]
        repositoryformatversion = 0

However it is still failing. I am not sure why it works on my laptop, but not on AWS. Why is this happening?

For reference, my full cloud init script is:

#!/bin/bash

export VSTS_AGENT_INPUT_URL=${url}
export VSTS_AGENT_INPUT_AUTH=pat
export VSTS_AGENT_INPUT_TOKEN=${token}
export VSTS_AGENT_INPUT_POOL=${pool}

echo "export VSTS_AGENT_INPUT_URL=${url}" >> /home/ubuntu/.bashrc
echo "export VSTS_AGENT_INPUT_AUTH=pat" >> /home/ubuntu/.bashrc
echo "export VSTS_AGENT_INPUT_TOKEN=${token}" >> /home/ubuntu/.bashrc
echo "export VSTS_AGENT_INPUT_POOL=${pool}" >> /home/ubuntu/.bashrc

cd /home/ubuntu
usermod -aG docker ubuntu

wget .248.0/vsts-agent-linux-x64-4.248.0.tar.gz
mkdir myagent && cd myagent
tar zxvf ../vsts-agent-linux-x64-4.248.0.tar.gz
./bin/installdependencies.sh

chown -R ubuntu:ubuntu .
su ubuntu -c './config.sh --unattended'
echo "HOME=/home/ubuntu" >> .env
./svc.sh install

mkdir -p _work

chown -R ubuntu:ubuntu _work

su ubuntu -c './run.sh'

cleanup_agent() {
    echo "Stopping and unregistering the build agent..."
    su ubuntu -c './config.sh remove --unattended --token ${token}'
    ./svc.sh stop
    ./svc.sh uninstall
}

trap cleanup_agent SIGTERM SIGINT

while true; do
    sleep 60
done

The AMI image that the EC2 instance is running from already has docker installed. If I manually clone the repo and run:

docker run --rm -v $(pwd):$(pwd) -w $(pwd) andrewlock/nerdbank-gitversioning:latest get-version

it works fine

I am trying to make an AWS EC2 instance a build machine for azure devops, In my pipeline I am trying to use a nerdbank gitversioning docker container to get the build version. The start of the pipeline looks like:

steps:
- checkout: self
  fetchDepth: 0

- script: |
    docker pull andrewlock/nerdbank-gitversioning:latest
  displayName: 'Pull Docker Image'

- script: |
    VERSION=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) andrewlock/nerdbank-gitversioning:latest get-version | grep -oP '(^Version:)\K.*' | xargs)
    echo "Version found: $VERSION"
    echo "##vso[task.setvariable variable=VERSION]$VERSION"  # Sets VERSION as a variable for later steps
  displayName: 'Get version from Docker'

However when I run the pipeline on the EC2 instance, I get the error:

Unhandled Exception: LibGit2Sharp.LibGit2SharpException: unsupported repository version 1. Only versions up to 0 are supported.
   at LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
   at LibGit2Sharp.Core.Proxy.git_repository_open(String path)
   at LibGit2Sharp.Repository..ctor(String path, RepositoryOptions options, RepositoryRequiredParameter requiredParameter)
   at Nerdbank.GitVersioning.GitExtensions.OpenGitRepo(String pathUnderGitRepo)
   at Nerdbank.GitVersioning.Tool.Program.OnGetVersionCommand(String projectPath, String format, String versionOrRef) in D:\a\1\s\src\nbgv\Program.cs:line 236
   at Nerdbank.GitVersioning.Tool.Program.Main(String[] args) in D:\a\1\s\src\nbgv\Program.cs:line 110
Version not found! Failing the pipeline.

When I run the build on my own laptop as a build agent, the pipeline runs fine.

I've tried setting the git config to use repository version 0 in the cloud init startup script:

su ubuntu -c "git config --global core.repositoryFormatVersion 0"
echo "[url \"https://\"]" >> /home/ubuntu/.gitconfig
echo "  insteadOf = git://" >> /home/ubuntu/.gitconfig
echo "[core]" >> /home/ubuntu/.gitconfig
echo "  repositoryFormatVersion = 0" >> /home/ubuntu/.gitconfig

The git config also says it is version 0:

cat .\.git\config                      
[core]
        repositoryformatversion = 0

However it is still failing. I am not sure why it works on my laptop, but not on AWS. Why is this happening?

For reference, my full cloud init script is:

#!/bin/bash

export VSTS_AGENT_INPUT_URL=${url}
export VSTS_AGENT_INPUT_AUTH=pat
export VSTS_AGENT_INPUT_TOKEN=${token}
export VSTS_AGENT_INPUT_POOL=${pool}

echo "export VSTS_AGENT_INPUT_URL=${url}" >> /home/ubuntu/.bashrc
echo "export VSTS_AGENT_INPUT_AUTH=pat" >> /home/ubuntu/.bashrc
echo "export VSTS_AGENT_INPUT_TOKEN=${token}" >> /home/ubuntu/.bashrc
echo "export VSTS_AGENT_INPUT_POOL=${pool}" >> /home/ubuntu/.bashrc

cd /home/ubuntu
usermod -aG docker ubuntu

wget https://vstsagentpackage.azureedge/agent/4.248.0/vsts-agent-linux-x64-4.248.0.tar.gz
mkdir myagent && cd myagent
tar zxvf ../vsts-agent-linux-x64-4.248.0.tar.gz
./bin/installdependencies.sh

chown -R ubuntu:ubuntu .
su ubuntu -c './config.sh --unattended'
echo "HOME=/home/ubuntu" >> .env
./svc.sh install

mkdir -p _work

chown -R ubuntu:ubuntu _work

su ubuntu -c './run.sh'

cleanup_agent() {
    echo "Stopping and unregistering the build agent..."
    su ubuntu -c './config.sh remove --unattended --token ${token}'
    ./svc.sh stop
    ./svc.sh uninstall
}

trap cleanup_agent SIGTERM SIGINT

while true; do
    sleep 60
done

The AMI image that the EC2 instance is running from already has docker installed. If I manually clone the repo and run:

docker run --rm -v $(pwd):$(pwd) -w $(pwd) andrewlock/nerdbank-gitversioning:latest get-version

it works fine

Share Improve this question edited Feb 10 at 12:58 Tom McLean asked Feb 10 at 10:44 Tom McLeanTom McLean 6,3691 gold badge21 silver badges49 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 0

I skip commenting/lamenting that this is obviously a bad idea to downgrade the repository version in a (git) distributed system and answer anyway:

Not sure there exists one in Options for Git repositories - Azure Pipelines | Microsoft Learn (microsoft), however, if you have write-access before mount, you can move, clone again with the repository version you require.

The docker container for nerdbank git versioning is very old, just create a new one, for instance:

ARG DOTNET_VERSION="6.0"
FROM "mcr.microsoft/dotnet/sdk:${DOTNET_VERSION}" AS builder
ARG NBGV_VERSION="3.5.113"
RUN dotnet tool install --global nbgv --version $NBGV_VERSION
FROM "mcr.microsoft/dotnet/runtime:${DOTNET_VERSION}-bullseye-slim"
COPY --from=builder /root/.dotnet/tools/ /opt/bin
ENV PATH="/opt/bin:${PATH}"

And then you can use that container.

Or, install dotnet and the nbgv tool onto the build machine and use the cli tool directly.

本文标签: