Przejdź do treści

Zmienne i sekrety

Automatyzacja rzadko jest samowystarczalna - potrzebuje adresu środowiska, nazwy kontrahenta, identyfikatora katalogu, a często także loginu i hasła. Wszystkie takie wartości przekazujesz przez zakładkę Zmienne i sekrety w widoku automatyzacji, a skrypt odczytuje je jako zwykłe zmienne środowiskowe.

Zakładka Zmienne i sekrety


1. Dwa typy wartości

Typ Kiedy używać Gdzie leży wartość
Wartość jawna Adresy, parametry, przełączniki, identyfikatory - wszystko, co nie jest tajne. Zapisana przy automatyzacji, widoczna w panelu.
Sekret Hasła, tokeny, klucze API. Zapisana we wspólnym magazynie sekretów. Przy automatyzacji leży wyłącznie wskazanie.

Hasło wpisane jako wartość jawna jest widoczne

Wartość jawna jest pokazywana w panelu każdemu, kto ma dostęp do projektu, i nie podlega zasłanianiu w dzienniku przebiegu. Do haseł i tokenów używaj wyłącznie typu Sekret.


2. Dodanie zmiennej

W widoku automatyzacji przejdź do zakładki Zmienne i sekrety i kliknij Dodaj zmienną. Pojawi się wiersz z trzema polami: Nazwa, Typ oraz trzecim polem, którego postać zależy od wybranego typu.

2.1. Wartość jawna

Wybierz typ Wartość jawna i wpisz treść wprost w polu Wartość.

Dodawanie zmiennej z wartością jawną

Tak podajesz adresy środowisk, identyfikatory, przełączniki trybu i limity - wszystko, co nie jest tajne.

2.2. Sekret

Wybierz typ Sekret. Trzecie pole zamienia się w listę Sekret, z której wskazujesz jedną z pozycji zdefiniowanych w magazynie sekretów. Listę można przeszukiwać, wpisując fragment nazwy.

Dodawanie zmiennej wskazującej na sekret

Pod polem widnieje przypomnienie, które warto wziąć dosłownie:

Wartość sekretu nie jest zapisywana przy automatyzacji - agent pobiera ją dopiero przy uruchomieniu.

Zatwierdź przyciskiem Zapisz. Zmienna pojawi się na liście z podpisem mówiącym o jej typie.

2.3. Zasady nazewnictwa

Nazwa może zawierać wyłącznie litery, cyfry i podkreślenie, i nie może zaczynać się od cyfry. Nazwa musi być unikalna w obrębie automatyzacji.

Przyjęta konwencja to wielkie litery z podkreśleniami - ERP_URL, KLIENT_NIP, LICZBA_PROB. Nie jest wymuszana, ale zgadza się ze zwyczajem zmiennych środowiskowych i ułatwia odróżnienie ich w kodzie.


3. Odczyt w skrypcie

import os

erp_url = os.environ["ERP_URL"]                       # brak zmiennej → KeyError
tryb     = os.environ.get("TRYB", "produkcyjny")      # brak zmiennej → wartość domyślna
haslo    = os.environ["ERP_PASSWORD"]                 # sekret czyta się tak samo

Sekret odczytuje się identycznie jak wartość jawną - z punktu widzenia kodu nie ma między nimi różnicy.

Zawodź wcześnie i czytelnie

Dla parametrów obowiązkowych używaj os.environ["NAZWA"], a nie .get(). Brakująca zmienna wywali skrypt od razu, z czytelnym KeyError, zamiast doprowadzić do awarii kilka kroków dalej - na przykład przy próbie zalogowania z wartością None.


4. Sekrety

4.1. Skąd się biorą

Sekrety definiuje się w widoku Zarządzanie danymi wejściowymi, po przełączeniu na zakładkę Sekrety. Nowy dodajesz przyciskiem Utwórz.

Magazyn sekretów

Lista pokazuje Identyfikator, Nazwę oraz zasłoniętą wartość, którą można podejrzeć ikoną oka. Menu (⋮) przy wierszu pozwala sekret edytować i usunąć.

Magazyn sekretów jest wspólny dla wszystkich projektów

Sekrety nie są przypisane do projektu. Ta sama lista jest widoczna z każdego projektu w organizacji, więc sekret utworzony przy jednej automatyzacji można wskazać w dowolnej innej.

Ma to dwie praktyczne konsekwencje:

  • Nazwa musi mówić sama za siebie. W jednym worku wylądują hasła do wszystkich systemów i środowisk, więc haslo albo test1 bardzo szybko przestaje cokolwiek znaczyć. Sprawdzają się nazwy w rodzaju ERP-produkcja-serwisowe czy SharePoint-QA-odczyt.
  • Usunięcie sekretu odczuje każdy projekt. Zanim skasujesz pozycję, upewnij się, że nie wskazuje na nią automatyzacja z innego zespołu.

4.2. Jak wartość trafia do robota

Wartość sekretu nie jest zapisywana przy automatyzacji. W zadaniu przekazywanym operatorowi leży wyłącznie wskazanie na sekret wraz z jednorazowym uprawnieniem do jego pobrania. Agent sięga po samą wartość dopiero tuż przed uruchomieniem skryptu.

Ma to dwie praktyczne konsekwencje:

  • Hasło nie leży w kolejce zadań ani w konfiguracji automatyzacji.
  • Zmiana wartości sekretu obowiązuje od następnego uruchomienia - bez konieczności edycji automatyzacji.

4.3. Zasłanianie w dzienniku przebiegu

Wartości sekretów są zasłanianie w dzienniku przebiegu - jeśli skrypt wypisze hasło na standardowe wyjście, w zapisanym dzienniku pojawi się *** zamiast wartości.

Zasłanianie nie obejmuje artefaktów

Podmiana działa na wyjściu konsoli. Plik, który skrypt sam zapisze do katalogu wyjściowego, trafia do artefaktów bez zmian - a artefakty pobierze każdy z dostępem do projektu. Nie zapisuj wartości sekretów do plików wynikowych.

4.4. Usunięty sekret

Jeśli wskazany sekret zostanie usunięty z magazynu, automatyzacja zgłosi to komunikatem o nieistniejącym sekrecie. Wskazanie trzeba wtedy poprawić - sekret nie zostanie odtworzony automatycznie.


5. Dobre praktyki

Jedna automatyzacja, wiele środowisk

Trzymaj adres środowiska w zmiennej (ERP_URL), zamiast wpisywać go w kodzie. Przeniesienie automatyzacji z testowego na produkcyjne sprowadzi się wtedy do zmiany jednej wartości, bez ruszania pakietu i bez nowej wersji.

Nazwa powinna mówić, do czego wartość służy. ERP_URL jest lepsze niż URL, a ERP_PASSWORD niż HASLO - skrypt sięgający do dwóch systemów szybko dorabia się kilku adresów i haseł, a nazwy ogólne zaczynają wtedy kolidować.

Nazwa zmiennej to nie nazwa sekretu

Zmienna ERP_PASSWORD może wskazywać na sekret o nazwie ERP-produkcja-serwisowe. Skrypt widzi wyłącznie nazwę zmiennej, więc możesz podmienić wskazany sekret bez ruszania kodu - na przykład przełączyć automatyzację ze środowiska testowego na produkcyjne.

Zmienne należą do wersji automatyzacji

Zestaw zmiennych jest częścią konkretnej wersji. Po opublikowaniu wersji jej lista zmiennych staje się niezmienna - zmiana wymaga utworzenia nowej wersji roboczej. Sama wartość sekretu pozostaje wymienna, bo leży poza automatyzacją.