Azure Pipelineにて、他の組織のAzure Repos（git）にプッシュする方法


## 概要

下記図に示すようにAzure DevOpsの機能であるAzure Pipelineにて、別の組織にあるAzure Reps（Git）にプッシュする方法を共有します。同様の手順にて、異なるテナントのAzure DevOpsに対しても適応可能です。

![image-20200529164940227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/764587b1-60ce-479b-8d83-70dec0718340.png)



## 事前準備

-   2つのAzure DevOps組織を作成すること
-   それぞれの組織にて、プロジェクトを作成すること



## 手順

1.  プッシュ先のプロジェクト（上記図における組織B）にて、"User Setting"→"Personal access tokens"を選択。

![image-20200529161716057.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6a48b79c-8c53-e502-111e-eea3f46be7aa.png)

2 .  "New Token"を選択

![image-20200529162049045.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/423b492e-7bdb-989e-e195-1214a6a42fe3.png)



3 .  下記表の通りに入力し、"OK"を選択。表示されるアクセスキーを控えておいてください。

| 項目         | 設定値                  |
| ------------ | ----------------------- |
| Name         | ※わかりやすい名称を入力 |
| Organization | ※プッシュ先組織名を選択 |
| Code         | "Read & wire"をチェック |

![image-20200529162445880.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f6b2e83d-8591-8084-edd9-6dcfb123e36d.png)




4 .  "Pipelines"を選択後、"Create Pipeline"を選択。
![image-20200529162624309.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/43934349-e41e-73ac-e213-2d7c8aa33e30.png)




5 .  "Azure Repos Git"を選択。

![image-20200529162706324.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7635fad3-a68c-627b-533b-6e17e920de27.png)




6 .  プッシュするレポジトリーを選択。

![image-20200529162827992.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/975911fc-20a4-b34e-749f-f902907d7b5b.png)



7 .  "Stater pipeline"を選択。

![image-20200529162852358.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6e5d9f6e-78b0-5220-763c-a99aec9e5bce.png)



8 .  下記コードを張りつけ、変数の値を設定

| 変数             | 値                          |
| ---------------- | --------------------------- |
| TmpRepoDir       | _repo                       |
| UserName         | ※コミットするユーザー名     |
| OrganizationName | ※プッシュ先の組織名         |
| ProjectName      | ※プッシュ先のプロジェクト名 |
| RepositoryName   | ※プッシュ先のレポジトリー名 |

```yaml
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
variables:
  TmpRepoDir: _repo
  UserName: ryoma.nagata
  OrganizationName: import-git
  ProjectName: import-git
  RepositoryName: repository-from-otherorganizationname

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'
 
steps:
- script: |
     cd /tmp && rm -rf /tmp/$(TmpRepoDir)
     git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" clone --mirror $(Build.Repository.Uri) $(TmpRepoDir)
     git -C /tmp/$(TmpRepoDir) push --mirror https://$(UserName):$(secreat_repos)@dev.azure.com/$(OrganizationName)/$(ProjectName)/_git/$(RepositoryName)
  displayName: 'Copy to Azure DevOps Repos'
```



9 .  右上にある"Variables"を選択。

![image-20200529163526650.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/4f80a31c-c5f6-2ec8-daa0-2661492c706f.png)



10 .  "New variable"を選択。

![image-20200529163552752.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/831e0426-9164-6613-6c2f-3784e95c018e.png)




11 .  下記の入力を行い、"OK"→"Save"を選択。

| 項目                   | 値                                         |
| ---------------------- | ------------------------------------------ |
| Name                   | secreat_repos                              |
| Value                  | ※3の手順で取得したトークンキーを入力する。 |
| Keep this value secret | チェックする。                             |


![image-20200529163722193.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c326a7b9-5d47-9482-0bfc-63c9929fbef4.png)




12 .  右上にある"Save and run"を選択。

![image-20200529163526650.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/bdd187c2-5464-fbcf-586a-6401876c6b5b.png)




13 .  適切な入力を行い、"Save and run"を選択。

![image-20200529164104193.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/864d702d-f6ae-64db-4e88-47c7e8c0923e.png)




14 .  ジョブ完了後、プッシュ先のレポジトリーにコードが配置されていることを確認。


![image-20200529164304741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/28e74f0d-08ab-7e94-770b-d6f9adcb63ef.png)