Travis CI

Jak wszyscy wiedzą, gdy tworzy się dokument, program czy bibliotekę, po zakończeniu pracy trzeba go wrzucić w odpowiednie miejsce. Jak wiadomo trwa sesja i studenci zrobią wszystko byle się nie uczyć do egzaminów czy kolokwiów. Tak więc czemu by nie zautomatyzować wrzucania najnowszej wersji regulaminu na serwer zaraz po tym, gdy zostanie zaktualizowany ? Pokażę jak można to łatwo zrobić z użyciem Travis-CI Pierwszą rzeczą jaką robimy to stworzenie pliku .travis.yml mniej więcej takiego:

before_script:
  - sudo apt-get install -y texlive texlive-lang-polish texlive-fonts-extra texlive-latex-extra
script:
  - pdflatex -halt-on-error regulamin.tex

Taki krótki pliczek powoduje doinstalowanie potrzebnych paczek oraz skompilowanie pliku. Tak więc dokładamy ten pliczek do repozytorium. Zaraz przed pushem do głównego repozytorium włączamy na travis-ci.org obsługę naszego repo. By to zrobić logujemy się na travis-ci.org, wybieramy z naszego profilu konta. travis-0 Wybieramy po lewej stronie odpowiedni profil, następnie włączamy obsługę travis dla odpowiedniego repozytorium. travis-1 Potem szybki push i możemy obserwować build naszego cudownego dokumentu. travis-2   Teraz byłoby bardzo miło, gdyby travis sam wrzucał nasz dokument gdzieś (FTP, wiki czy jeszcze coś innego). Możemy to zrobić dokładając w naszym pliku konfiguracyjnym sekcję after_success (więcej można dowiedzieć się z dokumentacji http://docs.travis-ci.com/user/deployment/custom/). Użytkownicy i hasła lubią się zmieniać, więc od razu przesuwamy te dane do zmiennych.

env:
  global:
    - "FTP_USER=user"
    - "FTP_PASSWORD=password"
after_success:
 "curl --ftp-create-dirs -T regulamin.pdf -u $FTP_USER:$FTP_PASSWORD ftp://static.hskrk.pl/stowarzyszenie/regulamin.pdf" 

Po tych wszystkich zabiegach nasz plik wygląda mniej więcej tak:

env:
  global:
    - "FTP_USER=user"
    - "FTP_PASSWORD=password"
before_script:   
  - sudo apt-get install -y texlive texlive-lang-polish texlive-fonts-extra texlive-latex-extra
script:   
  - pdflatex -halt-on-error regulamin.tex
after_success: 
  "curl --ftp-create-dirs -T regulamin.pdf -u $FTP_USER:$FTP_PASSWORD ftp://static.hskrk.pl/stowarzyszenie/regulamin.pdf" 

Jednak trzymać hasło do naszego serwera czystym tekstem w otwartoźródłowym projekcie to proszenie się o kłopoty. Travis pozwala na szyfrowanie naszych danych (dokumentacja) . Wystarczy by wpis który ma być ukryty zrobić polem o nazwie „secure” i travis odszyfruje jego zawartość kluczem wygenerowanym dla repozytorium. Tak więc sekcja env konfiguracji będzie wyglądać tak:

env:
  global:
    - secure: "FKohlBkvPVrrz6E7Vuik4GUhDyeSpVW8Fa0JN9L4yX2Zxa8SvYH/HIgPRCVGfyEuXwEqaVzLiMPVKnzRcUnDXE9WVWQ5LaPpzT5dkDk9qpz2DRS1S45HJyrm53ps8ohc3qE1bXacIh3/VwtEqfTotv6i0foFDOPlhsbDOxLjUls="
    - secure: "D2mNJOq3+o0/NHJFVD2W8SjErgJvdvXLkjiL3JkxTIvyISf7zzFhKHhQ68w+mhPpFhCO2rLRB6XkoKBYGTS1J36ZvtKjeHbnDO9qpplUsrMyznkyuEJZiI6ApbW/YT/RieoPl4HE1p7Ure6gLQBJA0BA+RLCQRiITG6gcvWNjEM="

Przydatnym może być jeszcze dodanie komentarzy na końcu linii, do której zmiennej się odnoszą.

env:
  global:
    - secure: "FKohlBkvPVrrz6E7Vuik4GUhDyeSpVW8Fa0JN9L4yX2Zxa8SvYH/HIgPRCVGfyEuXwEqaVzLiMPVKnzRcUnDXE9WVWQ5LaPpzT5dkDk9qpz2DRS1S45HJyrm53ps8ohc3qE1bXacIh3/VwtEqfTotv6i0foFDOPlhsbDOxLjUls=" # FTP_USER
    - secure: "D2mNJOq3+o0/NHJFVD2W8SjErgJvdvXLkjiL3JkxTIvyISf7zzFhKHhQ68w+mhPpFhCO2rLRB6XkoKBYGTS1J36ZvtKjeHbnDO9qpplUsrMyznkyuEJZiI6ApbW/YT/RieoPl4HE1p7Ure6gLQBJA0BA+RLCQRiITG6gcvWNjEM=" # FTP_PASSWORD

Więc ostatecznie nasze hasła są dobrze zabezpieczone. Nasz końcowy pliczek wygląda tak:

env:
  global:
    - secure: "FKohlBkvPVrrz6E7Vuik4GUhDyeSpVW8Fa0JN9L4yX2Zxa8SvYH/HIgPRCVGfyEuXwEqaVzLiMPVKnzRcUnDXE9WVWQ5LaPpzT5dkDk9qpz2DRS1S45HJyrm53ps8ohc3qE1bXacIh3/VwtEqfTotv6i0foFDOPlhsbDOxLjUls=" # FTP_USER
    - secure: "D2mNJOq3+o0/NHJFVD2W8SjErgJvdvXLkjiL3JkxTIvyISf7zzFhKHhQ68w+mhPpFhCO2rLRB6XkoKBYGTS1J36ZvtKjeHbnDO9qpplUsrMyznkyuEJZiI6ApbW/YT/RieoPl4HE1p7Ure6gLQBJA0BA+RLCQRiITG6gcvWNjEM=" # FTP_PASSWORD
before_script:   
  - sudo apt-get install -y texlive texlive-lang-polish texlive-fonts-extra texlive-latex-extra
script:   
  - pdflatex -halt-on-error regulamin.tex
after_success: 
  "curl --ftp-create-dirs -T regulamin.pdf -u $FTP_USER:$FTP_PASSWORD ftp://static.hskrk.pl/stowarzyszenie/regulamin.pdf" 

Stworzenie takiego pliku jest dość szybkie. Teraz już zawsze (o ile będzie dostęp do FTP) plik do pobrania będzie zgodny z tym na repozytorium.