Problem

Manchmal stehen wir vor dem Problem, das wir ein vorhandenes Gitub Repository mit einem anderen Repository auf Azure DevOps synchronisieren möchten. Zum Beispiel um von dort aus auf Azure zu deployen. Wie geht man nun am besten vor?

Lösung

Nach mehreren Versuchen habe ich die für mich beste Lösung gefunden.

Zuerst fügte ich in der "Secrets"-Sektion der Github Actions folgende Secrets hinzu:

  1. AZUREPAT (Hier fügen Sie den Personal Access Token aus Azure DevOps ein. Siehe Link)
  2. AZURENAME (Hier fügen Sie den Username aus Azure DevOps ein)
  3. AZUSER_EMAIL (Hier fügen Sie die Emailadresse hinzu, die Sie mit Ihrem Azure DevOps Konto nutzen)
  4. AZORG (Hier fügen Sie den Namen der Azure DevOps Organisation ein)

Jetzt erstellte ich auf der obersten Ebene des Repositories folgendes commit.sh Script:

AZUREPAT=$AZUREPAT
AZUSERNAME=$AZUSERNAME
AZUSER_EMAIL=$AZUSER_EMAIL
AZORG=$AZORG
git clone https://github.com/saigkill/Moonglade ./Moonglade-gh
cd Moonglade-gh
rm -rf .git
 
cd ..
 
GIT_CMD_REPOSITORY="https://$AZUSERNAME:$AZUREPAT@dev.azure.com/$AZORG/Moonglade/_git/Moonglade"
git clone $GIT_CMD_REPOSITORY ./Moonglade-az
 
cp -r Moonglade-gh/* Moonglade-az/
 
cd Moonglade-az
 
git config --global user.email "$AZUSER_EMAIL"
git config --global user.name "$AZUSERNAME"
 
git add .
git commit -m "sync from git to azure"
 
git push
 
Hier habe ich das ganze exemplarisch für mein "Moonglade" Projekt gezeigt.
Es werden beide Repositories ausgecheckt, dann der Inhalt des Github Repositories in das ausgecheckte Azure DevOps Repository übertragen und wieder eingecheckt.
 
Zuletzt muss das ganze noch regelmäßig ausgeführt werden. Dazu erstellt man eine neue Github Actions Aktion an:
 
name: Push directory to another repository
on: push
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    environment: AzurePAT
    steps:
    - uses: actions/checkout@v2
    - name: Run script file
      env:
        AZUREPAT: ${{secrets.AZUREPAT}}
        AZUSERNAME: ${{secrets.AZUSERNAME}}
        AZUSER_EMAIL: ${{secrets.AZUSER_EMAIL}}
        AZORG: ${{secrets.AZORG}}
      run: |
         chmod +x ./commit.sh
         ./commit.sh
      shell: bash
 
Diese Action würde also bei jedem "Push" ausgelöst werden. Man kann das ganze auch auf einzelne Branches beschränken, was durchaus Sinn macht.
 
Ich danke dem User harishlalwani für seinen guten Hinweis.