Artykuły
Samouczki
Interaktywne przewodniki
Porady dotyczące wykonywania skryptów zadań za pomocą Bitbucket Pipelines
Sten Pittet
Autor współpracujący
Dzięki Bitbucket Pipelines możesz szybko wdrożyć przepływ pracy ciągłej integracji lub ciągłego dostarczania dla swoich repozytoriów. Istotną częścią tego procesu jest przekształcenie procesów ręcznych w skrypty, które mogą być uruchamiane automatycznie przez maszynę bez interwencji człowieka. Czasami jednak automatyzacja zadań bywa trudna, ponieważ mogą wystąpić problemy z uwierzytelnianiem, instalacją zależności lub raportowaniem zgłoszeń. W tym przewodniku znajdziesz kilka porad, które pomogą Ci w pisaniu skryptów.
Czas
30 minut
Publiczność
Osoby, które dopiero zaczynają stosować ciągłe wdrażanie, i/ lub początkujący użytkownicy Bitbucket Pipelines
Krok 1: Nie rejestruj poufnych informacji!
Zanim zagłębisz się w świat automatyzacji, musisz przejrzeć swoje dzienniki i upewnić się, że nie ujawniasz wrażliwych danych, takich jak klucze API, poświadczenia lub inne informacje, które mogą spowodować naruszenie zabezpieczeń Twojego systemu. Gdy zaczniesz używać Bitbucket Pipelines do uruchamiania skryptów, dzienniki będą przechowywane i możliwe do odczytu dla każdego, kto ma dostęp do repozytorium.
Krok 2: Użyj kluczy SSH, aby połączyć się ze zdalnymi serwerami
Uwierzytelnianie często bywa jednym z najtrudniejszych elementów automatyzacji. Klucze SSH mają dwie zalety — ułatwiają zarządzanie połączeniem ze zdalnymi serwerami i są bardzo bezpieczne. Dzięki Bitbucket Pipelines możesz łatwo wygenerować nową parę kluczy, która może być używana przy każdym uruchomieniu pipeline'u do łączenia się ze zdalnymi serwerami.
Wystarczy skopiować klucz publiczny na zdalnym serwerze, aby móc połączyć się z nim z uruchomionego pipeline'u. Przykładowo po skonfigurowaniu kluczy SSH na serwerze (można użyć adresu URL lub IP) poniższy skrypt spowoduje wyświetlenie listy plików w katalogu /var/www bez konieczności podawania hasła.
bitbucket-pipelines.yml
image: node:4.6.0
pipelines:
default:
- step:
script:
- ssh <user>@<server> ls -l /var/www
Nie zapomnij zarejestrować wszystkich serwerów, z którymi musisz się połączyć, w sekcji Known hosts (Znane hosty). W przeciwnym razie pipeline zablokuje się, czekając na zatwierdzenie podczas próby połączenia się ze zdalnym serwerem.
Krok 3: Użyj bezpiecznych zmiennych środowiskowych dla kluczy API i poświadczeń
Jeśli potrzebujesz użyć zdalnego interfejsu API jako elementu skryptów, istnieje szansa, że dostawca interfejsu API umożliwia korzystanie z jego chronionych zasobów za pomocą klucza API. Możesz bezpiecznie dodawać poświadczenia do Bitbucket Pipelines, używając bezpiecznych zmiennych środowiskowych. Po zapisaniu możesz wywołać je w skryptach i pozostaną one zamaskowane w danych wyjściowych dziennika.
Krok 4: Uruchamiaj polecenia w trybie nieinteraktywnym
Jeśli w ramach wykonywania skryptu musisz zainstalować zależności, upewnij się, że nie spowoduje to wyświetlania monitu o weryfikację lub podanie danych przez użytkownika. W dokumentacji poleceń, których używasz, sprawdź, czy jest dostępna flaga pozwalająca na uruchamianie ich w sposób nieinteraktywny.
Przykładowo flaga -y w poniższym poleceniu spowoduje zainstalowanie PostgreSQL na serwerze Debian.
apt-get install -y postgresql
Z kolei flaga -q umożliwia uruchamianie poleceń zestawu Google Cloud SDK w sposób nieinteraktywny.
gcloud -q app deploy app.yaml
Krok 5: Twórz własne, gotowe do użycia obrazy Docker
Instalowanie zależności niezbędnych do uruchomienia pipeline'u bywa czasochłonne. Możesz zaoszczędzić dużo czasu, tworząc własny obraz Docker z podstawowymi narzędziami i pakietami wymaganymi do skompilowania i przetestowania aplikacji.
Przykładowo w poniższej konfiguracji Pipelines instalujemy na początku interfejs CLI AWS, aby użyć go później do wdrożenia aplikacji do AWS Elastic Beanstalk.
bitbucket-pipelines.yml
image: node:7.5.0
pipelines:
default:
- step:
script: # Modify the commands below to build your repository.
- apt-get update && apt-get install -y python-dev
- curl -O https://bootstrap.pypa.io/get-pip.py
- python get-pip.py
- pip install awsebcli --upgrade
- npm install
- npm test
- eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
- eb deploy hw-eb-tutorial
Problem polega na tym, że interfejs CLI AWS nie zmienia się z każdym commitem, co oznacza, że tracimy czas na instalowanie zależności, która mogłaby być domyślnie uwzględniona w pakiecie.
Poniższego pliku Dockerfile można użyć do utworzenia niestandardowego obrazu Docker przygotowanego pod kątem wdrożeń Elastic Beanstalk.
Dockerfile
FROM node:7.5.0
RUN apt-get update \ && apt-get install -y python-dev \ && cd /tmp \ && curl -O https://bootstrap.pypa.io/get-pip.py \ && python get-pip.py \ && pip install awsebcli --upgrade \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
Jeśli wypchnę go do obrazu odniesienia spittet/my-custom-image, mogę uprościć konfigurację Bitbucket Pipelines, tak aby zawierała tylko polecenia niezbędne do skompilowania, przetestowania i wdrożenia mojej aplikacji.
bitbucket-pipelines.yml
image: spittet/my-custom-image
pipelines:
default:
- step:
script: # Modify the commands below to build your repository.
- npm install
- npm test
- eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
- eb deploy hw-eb-tutorial
Na koniec: skrypty to też kod
Te porady powinny pomóc Ci zmienić ręczne zadania w zautomatyzowane procesy, które mogą być wielokrotnie i niezawodnie uruchamiane przez usługę, taką jak Bitbucket Pipelines. Ostatecznie staną się one opiekunami Twoich wydań i zaawansowanymi narzędziami umożliwiającymi inicjowanie wdrażania całych środowisk produkcyjnych na wielu serwerach i platformach.
Dlatego właśnie skrypty automatyzacji należy traktować jak kod i poddawać je takim samym procesom weryfikacji i zapewniania jakości, jakie obowiązują w przypadku kodu. Na szczęście można to łatwo zrobić w Bitbucket dzięki temu, że konfiguracja pipeline'u zostanie zaewidencjonowana razem z kodem, co pozwoli na tworzenie pull requestów we właściwym kontekście.
Nie zapominaj też o uruchamianiu skryptów w środowisku testowym przed zastosowaniem ich w środowisku produkcyjnym. Poświęcenie na to dodatkowego czasu może uchronić Cię przed przypadkowym usunięciem danych produkcyjnych.
Udostępnij ten artykuł
Następny temat
Zalecane lektury
Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.