 ### Wstęp W poprzednim artykule [o continuous integration](https://steemit.com/polish/@piotr-galas/o-continuous-integration) opisałem, co to jest i do czego używa się CI. Do wyboru mamy dużo różnych rozwiązań, ale Bitbucket Pipelines wydaje mi się wyjątkowo ciekawe. Jego podstawową zaletą w porównaniu do innych jest to, że umożliwia CI dla prywatnych (nie open-source) projektów za darmo. Jest też bardzo łatwy w konfiguracji. Dzięki temu każdy, nawet mało doświadczony programista jest w stanie skonfigurować własny CI. ### Przykładowy projekt Projektem będzie prosta strona napisana w html. Continous intergation będzie sprawdzał czy html ma poprawną składnie. Do sprawdzania użyje [htmlhint](https://www.npmjs.com/package/htmlhint). Na początek trzeba zainstalować to lokalnie. I wykonać sprawdzenie czy nie ma errorów. Aby przetestować to lokalnie: - `git clone git@bitbucket.org:piotr_galas/simple-html.git` - `git checkout e2d8c4d` (przejście do początkowego commita) - `npm intall` - `./node_modules/htmlhint/bin/htmlhint .` (odpalenie sprawdzania składni html) Powinno pokazać się coś w stylu:  Niech ten błąd zostanie. Naszym celem będzie teraz aby CI bitbucketa też go zobaczyło. ### bitbucket-pipelines.yml Aby włączyć CI, wystarczy do głównego katalogu projektu dodać plik `bitbucket-pipelines.yml`. Plik powinien składać się z obrazu dockera, na którym chcemy działać, oraz listy poleceń do wykonania. Jeśli ktoś nie zna Dockera, to najprościej sobie wyobrazić, że to taki wirtualny komputer. Ma on swój system operacyjny, oraz zestaw wstępnie wykonanych poleceń. Np - `image ubuntu:16` będzie to obraz odzwierciedlający surową instalacje ubuntu 16 - `image node` będzie to obraz na którym dodatkowo wykonano min. polecenie `apt-get install nodejs` Można użyć gotowego szablonu, który dostarcza bitbucket, ale na początku pokaże jak samemu dodać taki plik od zera. ### Przygotowanie obrazu który ma `npm` ```yml image: ubuntu:16.04 pipelines: default: - step: script: - apt-get update - apt-get --assume-yes install nodejs npm - nodejs -v ``` Co robi tak skonfigurowany CI? Nic specjalnego. Jest tylko po to, aby pokazać najprostszą z możliwych opcji. Na ubuntu 16 instaluje `nodejs` oraz `nmp`, a następnie wyświetla wersje. Jeśli wszystko wykona się bez błędu, wtedy mówimy że build przeszedł. [Link do commita](https://bitbucket.org/piotr_galas/simple-html/src/f898f4cc19ad0f99a5a12ab0d0116a87797544ff) Efekt na gifie poniżej:  ### Tworzenie pliku z szablonu Zamiast dodawać plik ręcznie, możemy skorzystać z kreatora jaki udostępnia bitbucket. Klikając w `pipelines ` w menu po lewej stronie, będziemy mogli wybrać jeden z kilku dostępnych szablonów pliku.  Jeśli już raz dodamy plik `bitbucket-pipelines.yml` nie mamy dostępu do kreatora, dlatego pokazałem dodawanie z poziomu innego projektu. Bazowy plik konfiguracyjny wygląda następująco: ```yml # This is a sample build configuration for JavaScript. # Check our guides at https://confluence.atlassian.com/x/14UWN for more examples. # Only use spaces to indent your .yml configuration. # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: node:6.9.4 pipelines: default: - step: caches: - node script: # Modify the commands below to build your repository. - npm install - npm test ``` Polecenie `caches` służy do tego aby przyspieszyć kolejne buildy poprzez cachowanie bibliotek. Oczywiście taki build nie przejdzie ponieważ nie mamy skonfigurowanego polecenia `npm test`. ------------------------------------- Ostateczna wersja pliku ```yml image: node:6.9.4 pipelines: default: - step: caches: - node script: - npm install - ./node_modules/htmlhint/bin/htmlhint . ``` ### Podsumowanie To właściwie tyle. Kilka prostych linijek załatwia sprawę. Można rozbudować sprawdzanie o testy, oraz różnego typu statyczne analizatory kodu. Możliwości jest bardzo dużo. Trzeba tylko uważać, aby nie przesadzić, bo zamiast pisać kod, może się okazać, że walczymy z wzajemnie wykluczającymi się linterami. ------ Warto również wspomnieć o ograniczeniach. Bitbucket ogranicza korzystanie z CI poprzez czas wykonywania buildów. Jest to 50 minut na miesiąc. 
author | piotr-galas |
---|---|
permlink | o-continuous-integration-bitbucket-pipeline |
category | polish |
json_metadata | {"tags":["polish","pl-artykuly","pl-ruby","programowanie","pl-ci"],"image":["https://steemitimages.com/DQmXccr4SJfSzRAUwfuUHDwUDwFR2ykt4r7rKZvuPsjH9wS/image.png","https://steemitimages.com/DQmWXpG3g14wcqSCGRuQ45GHbRRwVx8bpu3FboX8SvgPUR1/image.png","https://steemitimages.com/DQmaiCVdXsCme7fBiRHYaKVeBkVBNANijMGb3WWkatm8jdB/Peek%202018-02-15%2023-18.gif","https://steemitimages.com/DQmQJPMdMzjBVT5rFRH2PAFZFu8mSDEskb76hAvtbsw76p2/Peek%202018-02-15%2023-37.gif","https://steemitimages.com/DQmPWi6WYVFUvA76gjVR1xTQgVCtWYb2v5CBkM9favQTKYy/image.png"],"links":["https://steemit.com/polish/@piotr-galas/o-continuous-integration","https://www.npmjs.com/package/htmlhint","https://bitbucket.org/piotr_galas/simple-html/src/f898f4cc19ad0f99a5a12ab0d0116a87797544ff"],"app":"steemit/0.1","format":"markdown"} |
created | 2018-02-20 06:24:57 |
last_update | 2018-02-20 06:25:48 |
depth | 0 |
children | 4 |
last_payout | 2018-02-27 06:24:57 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.853 HBD |
curator_payout_value | 0.206 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 4,901 |
author_reputation | 367,232,102,431 |
root_title | "O Continuous Integration - Bitbucket Pipelines" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 38,988,001 |
net_rshares | 190,126,065,153 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
jamzed | 0 | 16,253,926,204 | 100% | ||
whitas | 0 | 2,434,085,789 | 100% | ||
fervi | 0 | 19,772,536,206 | 25% | ||
jakipatryk | 0 | 45,300,486,495 | 100% | ||
jacekw | 0 | 11,273,944,303 | 100% | ||
astromaniak | 0 | 4,721,249,029 | 20% | ||
piotr-galas | 0 | 4,047,585,651 | 100% | ||
grzesiekb | 0 | 79,755,426,077 | 100% | ||
marysia | 0 | 1,222,195,939 | 100% | ||
mciszczon | 0 | 2,331,452,992 | 100% | ||
heniekzap | 0 | 615,195,493 | 100% | ||
simon-paluch | 0 | 613,765,249 | 100% | ||
monia | 0 | 582,848,337 | 100% | ||
shogunma | 0 | 599,155,702 | 100% | ||
marjusz | 0 | 602,211,687 | 100% |
Nie rozumie nic z tego, a to świadczy o tym jak jestem w tym ubogi. Szacuneczek.
author | marjusz |
---|---|
permlink | re-piotr-galas-o-continuous-integration-bitbucket-pipeline-20180224t134821223z |
category | polish |
json_metadata | {"tags":["polish"],"app":"steemit/0.1"} |
created | 2018-02-24 13:48:21 |
last_update | 2018-02-24 13:48:21 |
depth | 1 |
children | 1 |
last_payout | 2018-03-03 13:48:21 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 80 |
author_reputation | 65,346,304,276 |
root_title | "O Continuous Integration - Bitbucket Pipelines" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 40,097,427 |
net_rshares | 3,774,467,915 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
piotr-galas | 0 | 3,774,467,915 | 100% |
Dzięki za komentarz. Pokazuje to tylko i wyłącznie ubogość mojego artykułu. Mogłem to rzeczywiście lepiej wyjaśnić.
author | piotr-galas |
---|---|
permlink | re-marjusz-re-piotr-galas-o-continuous-integration-bitbucket-pipeline-20180224t140011058z |
category | polish |
json_metadata | {"tags":["polish"],"app":"steemit/0.1"} |
created | 2018-02-24 14:00:09 |
last_update | 2018-02-24 14:00:09 |
depth | 2 |
children | 0 |
last_payout | 2018-03-03 14:00:09 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 115 |
author_reputation | 367,232,102,431 |
root_title | "O Continuous Integration - Bitbucket Pipelines" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 40,099,867 |
net_rshares | 0 |
Materiał dla ogarniających.
author | shogunma |
---|---|
permlink | re-piotr-galas-o-continuous-integration-bitbucket-pipeline-20180220t103151559z |
category | polish |
json_metadata | {"tags":["polish"],"app":"steemit/0.1"} |
created | 2018-02-20 10:31:39 |
last_update | 2018-02-20 10:31:39 |
depth | 1 |
children | 1 |
last_payout | 2018-02-27 10:31:39 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.022 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 27 |
author_reputation | 2,010,899,473,905 |
root_title | "O Continuous Integration - Bitbucket Pipelines" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 39,034,908 |
net_rshares | 4,491,167,950 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
piotr-galas | 0 | 3,876,666,229 | 100% | ||
marjusz | 0 | 614,501,721 | 100% |
Sarałem się napisać to jak najbardziej przystępnie.
author | piotr-galas |
---|---|
permlink | re-shogunma-re-piotr-galas-o-continuous-integration-bitbucket-pipeline-20180221t082643645z |
category | polish |
json_metadata | {"tags":["polish"],"app":"steemit/0.1"} |
created | 2018-02-21 08:26:42 |
last_update | 2018-02-21 08:26:42 |
depth | 2 |
children | 0 |
last_payout | 2018-02-28 08:26:42 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 51 |
author_reputation | 367,232,102,431 |
root_title | "O Continuous Integration - Bitbucket Pipelines" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 39,289,519 |
net_rshares | 0 |