Privátní repozitáře zdarma s Git a Visual Studio Team Services

Hledáte pro váš vývojový tým protostor pro privátní repozitáře postavené na Git protokolu s bezpečným uložením v cloudu s funkcemi jako je webové GUI, pull requesty, řízení projektu, testování či CI/CD? Zkuste Visual Studio Team Services, které je pro týmy do velikosti pět uživatelů zdarma s neomezeným počtem privátních repozitářů a dokonce jednou hostovanou CI/CD pipeline. Pokud váš projekt poroste snadno si připlatíte víc uživatelů, víc pipeline nebo další služby jako je testování. Vyzkoušejme si dnes základní práci s version control s využitím oblíbeného Git.

Nejjednoduší cesta k privátnímu repozitáři

Po založení základního účtu zdarma (není potřeba kreditní karta) si můžeme vytvořit svůj první projekt.

Zadáme název a ponecháme Git jako výchozí protokol. Další nastavení se týká řízení projektu, ale o tom jindy.

Hotovo - máme URL našeho projektu a můžeme začít využívat Git. Protože jsme tu ale poprvé, musíme vyřešit ještě způsob přihlašování. Git příkazová řádka, s kterou budu na začátek pracovat, nepodporuje jednoduše některé moderní metody ověřování jako je OAuth nebo vícefaktorové přihlašování. Začneme tedy tím, co není pro praxi doporučováno, ale na úvod to uděláme (a v průběhu článku změníme) - vygenerujeme si k našemu účtu separátní login pro Git protokol.

Vytvoříme si heslo.

Teď můžeme do klasického Git CLI (na možnosti využití GUI nebo IDE se podíváme později).

$ git clone https://mujtym.visualstudio.com/_git/paradniProjekt
Cloning into 'paradniProjekt'...
Username for 'https://mujtym.visualstudio.com': tokubica@microsoft.com
Password for 'https://tokubica@microsoft.com@mujtym.visualstudio.com':
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

Výborně - teď můžeme něco vytvořit, provést commit a push.

$ cd paradniProjekt/                                                                                               
$ echo "# Paradni projekt" > README.md                                                              
$ git add -A                                                                                        
$ git commit -m "Vytvoren uvodni README"        

[master (root-commit) 5692497] Vytvoren uvodni README                                                                                                       
 Committer:  <tomas@xxx>                                                                                                
...                                                                                                                      
                                                                                                                                                            
 1 file changed, 1 insertion(+)                                                                                                                             
 create mode 100644 README.md   

$ git push  

...                                                                                   
                                                                                                                                                            
Username for 'https://mujtym.visualstudio.com': tokubica@microsoft.com                                                                                      
Password for 'https://tokubica@microsoft.com@mujtym.visualstudio.com':                                                                                      
Counting objects: 3, done.                                                                                                                                  
Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done.                                                                                                   
Total 3 (delta 0), reused 0 (delta 0)                                                                                                                       
remote: We noticed you're using an older version of Git. For the best experience, upgrade to a newer version.                                               
remote: Analyzing objects... (3/3) (15 ms)                                                                                                                  
remote: Storing packfile... done (183 ms)                                                                                                                   
remote: Storing index... done (48 ms)                                                                                                                       
To https://mujtym.visualstudio.com/_git/paradniProjekt                                                                                                      
 * [new branch]      master -> master

Práce s kódem přes webové GUI

Náš nový soubor uvidíme v GUI našeho projektu v sekci Code. Klikneme na něj.

Soubor můžeme editovat přímo odtud.

Přidáme nějaký text.

Můžeme se podívat jak bude Markdown vypadat.

A také vypsat změny proti původní verzi.

Jsme spokojeni, provedeme Commit.

K dispozici máme verze souboru.

Podívejme se také na přehled commitů.

Teď už můžeme udělat pull v CLI.

$ git pull

Username for 'https://mujtym.visualstudio.com': tokubica@microsoft.com
Password for 'https://tokubica@microsoft.com@mujtym.visualstudio.com':
remote: Microsoft (R) Visual Studio (R) Team Services
remote: We noticed you're using an older version of Git. For the best experience, upgrade to a newer version.
remote: Found 3 objects to send. (6 ms)
Unpacking objects: 100% (3/3), done.
From https://mujtym.visualstudio.com/_git/paradniProjekt
   5692497..dabddbf  master     -> origin/master
Updating 5692497..dabddbf
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)

$ cat README.md

# Paradni projekt

- uprava z webu

Osobní tokeny

Využití fixního separátního jména a hesla pro Git není ideální z pohledu bezpečnosti a není doporučováno. Lepší je vygenerování osobního tokenu. Na vršku stránky najdete svou ikonku a tam můžeme změnit bezpečnostní nastavení.

Nejprve zrušíme fixní login.

Ověříme si, že už nefunguje.

$ git pull

Username for 'https://mujtym.visualstudio.com': tokubica@microsoft.com
Password for 'https://tokubica@microsoft.com@mujtym.visualstudio.com':
fatal: Authentication failed for 'https://mujtym.visualstudio.com/_git/paradniProjekt/'

Založíme se raději osobní token.

Všimněte si dvou zásadních změn. Tou první je omezená platnost tokenu a tou podstatnější je granulární řízení přístupu. Pro různé úkony, pracovní počítače, IDE apod. můžete mít různé tokeny s různými právy. Navíc kdykoli je to potřeba lze token zrušit, revokovat. Pro jednoduchost necháme všechno povolené a token vytvoříme.

Teď je ten správný okamžik si token "opsat" - pak už se k němu nedostanete.

Zkusíme ho použít jako heslo k našemu účtu. Bude fungovat.

$ git pull

Username for 'https://mujtym.visualstudio.com': tokubica@microsoft.com
Password for 'https://tokubica@microsoft.com@mujtym.visualstudio.com':
Already up-to-date.

Automatizace tokenů s credential managerem

Možná se vám nebude chtít starat se o expirované tokeny a chodit do GUI - je to sice třeba jen jednou za 3 měsíce, ale i to může obtěžovat. Navíc s tokenem musíte manipulovat - nějak ho překopírovat a někde si ho třeba uložit a pokud to neuděláte bezpečně, je to riziko. Microsoft má k dispozici credential manager, který tento proces pro Git automatizuje. V zásadě jde o to, že s ním můžete využít moderní formy ověřování včetně vícefaktorové autentizace vůči Azure Active Directory. Po tomto velmi bezpečném procesu pro vás credential manager vygeneruje token a ten uloží. V případě Windows nebo pokud máte ve svém Linuxu GNOME je toto úložiště tokenu šifrované - v případě, kdy tuto možnost nemáte (například jedete Ubuntu Server bez GNOME), lze uložit klíč do git konfigurace (tam je ale nešifrovaný, takže pro jeho ochranu před ostatními uživateli systému doporučuji použít šifrování domovského adresáře (tam se .gitconfig obvykle nachází).

Projekt a informace k instalaci na různé systémy najdete zde: https://github.com/Microsoft/Git-Credential-Manager-for-Mac-and-Linux/blob/master/Install.md

Já budu provádět instalaci na Ubuntu s využitím Windows subsystem for Linux a GNOME nemám. Nejprve nainstalujeme Javu, stáhneme instalačku a provedeme instalaci.

$ sudo apt-get install default-jre

$ wget https://github.com/Microsoft/Git-Credential-Manager-for-Mac-and-Linux/releases/download/git-credential-manager-2.0.3/git-credential-manager-2.0.3.jar
$java -jar ./git-credential-manager-2.0.3.jar install

Protože nemám GNOME, bude tokeny ukládat v Git konfiguračním souboru.

$ git config --global credential.canFallBackToInsecureStore true

Původní token smažeme.

Půjdeme do CLI a zkusíme git pull. Pokud bychom byli v Git for Windows naskočí nám moderní interaktivní přihlašovací dialog. V případě Linux se ověření provede přes token do registrační služby. Otevřete přihlašovací stránku (na libovolném stroji s prohlížečem), zadáte tento kód a normálně se přihlásíte.

$ git pull

------------------------------------
OAuth 2.0 Device Flow authentication
------------------------------------
To complete the authentication process, please open a web browser and visit the following URI:
https://aka.ms/devicelogin
When prompted, enter the following code:
DTQ4UZRC6
Once authenticated and authorized, execution will continue.

V prohlížeči dokončíme přihlášení.

A je to - přihlášení je v pořádku a git pull se provedl. Při dalším pull už tuto proceduru opakovat nemusíme - máme token a je stále platný.

Already up-to-date.

$ git pull
Already up-to-date.

Automaticky vytvořený token samozřejmě najdeme i v GUI (resp. informaci o něm, ne jeho obsah) a můžeme ho tam klidně revokovat, pokud to bude nutné.

Tento postup přihlašování je velmi dobrý pro Windows prostředí. Hesla zůstávají schována a ani uživatel samotný je nevidí. Úvodní proces logování je plně interaktivní a jednoduchý. Pokud je váš vývoj primárně v Linuxu, doporučoval bych SSH klíče - právě o tom bude následující část.

SSH klíče

Použití public/private key infrastruktury je velmi bezpečné a při tom pro uživatele jednoduché. Nastavení v Linux prostředí je snadné a velmi typické - je mnoho důvodů pro používání SSH klíčů místo hesel v Linuxu. Stačí vygenerovat privátní a veřejný klíč a ten privátní uložit na správné místo ve vašem systému (typicky ~/.ssh/id_rsa). Použití tohoto procesu je možné i u Windows, ale nastavení je o něco složitější, protože to není nativní chování systému - návod najdete zde: http://www.cgranade.com/blog/2016/06/06/ssh-keys-in-vscode.html

Já už na svém stroji privátní klíč mám, takže mi stačí nakopírovat veřejný klíč do Visual Studio Team Services. Stále jsme na stránce bezpečnosti a přidáme veřejný SSH klíč.

Aktuálně mám git repozitář napojen přes HTTPS protokol a to musíme změnit na SSH. Nejprve tedy jakou URL použít. Tu najdeme například na stránce svého projektu v sekci Code. Klikneme na Clone.

Nakopírujte si SSH URL.

V Git CLI přenastavíme URL na SSH protokol a provedeme pull. Protože privátní klíče mám na své stanici, všechno proběhne.

$ git remote set-url origin ssh://mujtym@mujtym.visualstudio.com:22/_git/paradniProjekt

$ git pull
Already up-to-date.

Jednoduché a bezpečné, pro Linux svět určitě ideální.

 

Potřebujete privátní Git repozitář zcela zdarma pro váš tým a k tomu pěkné GUI, pull requesty, správu releasů, řízení projektu či CI/CD pipeline? Podívejte se na Visual Studio Team Services, které je do pěti uživatelů zdarma. Pokud se rozrostete i tak je řešení jedním z cenově nejdostupnějších - ostatně 10 uživatelů vás vyjde asi na 25 EUR měsíčně. A pokud jste předplatiteli Visual Studio máte typicky Team Services v ceně.



Jak na Terraform pro Azure služby, které jsou zatím jen v Preview Automatizace
Datové hřiště - zpracování proudu událostí s Azure Stream Analytics nakopnuté Terraformem Automatizace
Datové hřiště - generátory fake dat do kontejneru zabalené Terraformem v Azure nahozené Automatizace
Datové hřiště - jak si hrát s daty bez sebemenšího kliknutí s Terraform a Azure Automatizace
Federace tokenů GitHub Actions s Azure Active Directory pro přístup z vaší CI/CD do Azure bez hesel Automatizace