Close

Porady dotyczące wykonywania skryptów zadań za pomocą Bitbucket Pipelines

Portret Stena Pitteta
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.

Godzina

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.

Generowanie kluczy SSH bezpośrednio z Bitbucket Pipelines

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.

Bitbucket Pipelines utrzymuje bezpieczne zmienne zamaskowane w dziennikach

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.

Sten Pittet
Sten Pittet

I've been in the software business for 10 years now in various roles from development to product management. After spending the last 5 years in Atlassian working on Developer Tools I now write about building software. Outside of work I'm sharpening my fathering skills with a wonderful toddler.


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.

Ilustracja DevOps

Społeczność DevOps

Ilustracja DevOps

Warsztaty symulacyjne

Ilustracja przedstawiająca mapę

Zacznij korzystać za darmo

Zapisz się do newslettera DevOps

Thank you for signing up