create account

O Continuous Integration - Bitbucket Pipelines by piotr-galas

View this thread on: hive.blogpeakd.comecency.com
· @piotr-galas · (edited)
$1.06
O Continuous Integration - Bitbucket Pipelines
![](https://steemitimages.com/DQmXccr4SJfSzRAUwfuUHDwUDwFR2ykt4r7rKZvuPsjH9wS/image.png)
### 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:

![](https://steemitimages.com/DQmWXpG3g14wcqSCGRuQ45GHbRRwVx8bpu3FboX8SvgPUR1/image.png)

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:

![Peek 2018-02-15 23-18.gif](https://steemitimages.com/DQmaiCVdXsCme7fBiRHYaKVeBkVBNANijMGb3WWkatm8jdB/Peek%202018-02-15%2023-18.gif)

### 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. 

![Peek 2018-02-15 23-37.gif](https://steemitimages.com/DQmQJPMdMzjBVT5rFRH2PAFZFu8mSDEskb76hAvtbsw76p2/Peek%202018-02-15%2023-37.gif)
 

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.
![](https://steemitimages.com/DQmPWi6WYVFUvA76gjVR1xTQgVCtWYb2v5CBkM9favQTKYy/image.png)
👍  , , , , , , , , , , , , , ,
properties (23)
authorpiotr-galas
permlinko-continuous-integration-bitbucket-pipeline
categorypolish
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"}
created2018-02-20 06:24:57
last_update2018-02-20 06:25:48
depth0
children4
last_payout2018-02-27 06:24:57
cashout_time1969-12-31 23:59:59
total_payout_value0.853 HBD
curator_payout_value0.206 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length4,901
author_reputation367,232,102,431
root_title"O Continuous Integration - Bitbucket Pipelines"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id38,988,001
net_rshares190,126,065,153
author_curate_reward""
vote details (15)
@marjusz ·
Nie rozumie nic z tego, a to świadczy o tym jak jestem w tym ubogi.
Szacuneczek.
👍  
properties (23)
authormarjusz
permlinkre-piotr-galas-o-continuous-integration-bitbucket-pipeline-20180224t134821223z
categorypolish
json_metadata{"tags":["polish"],"app":"steemit/0.1"}
created2018-02-24 13:48:21
last_update2018-02-24 13:48:21
depth1
children1
last_payout2018-03-03 13:48:21
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length80
author_reputation65,346,304,276
root_title"O Continuous Integration - Bitbucket Pipelines"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id40,097,427
net_rshares3,774,467,915
author_curate_reward""
vote details (1)
@piotr-galas ·
Dzięki za komentarz. Pokazuje to tylko i wyłącznie ubogość mojego artykułu. Mogłem to rzeczywiście lepiej wyjaśnić.
properties (22)
authorpiotr-galas
permlinkre-marjusz-re-piotr-galas-o-continuous-integration-bitbucket-pipeline-20180224t140011058z
categorypolish
json_metadata{"tags":["polish"],"app":"steemit/0.1"}
created2018-02-24 14:00:09
last_update2018-02-24 14:00:09
depth2
children0
last_payout2018-03-03 14:00:09
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length115
author_reputation367,232,102,431
root_title"O Continuous Integration - Bitbucket Pipelines"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id40,099,867
net_rshares0
@shogunma ·
$0.02
Materiał dla ogarniających.
👍  ,
properties (23)
authorshogunma
permlinkre-piotr-galas-o-continuous-integration-bitbucket-pipeline-20180220t103151559z
categorypolish
json_metadata{"tags":["polish"],"app":"steemit/0.1"}
created2018-02-20 10:31:39
last_update2018-02-20 10:31:39
depth1
children1
last_payout2018-02-27 10:31:39
cashout_time1969-12-31 23:59:59
total_payout_value0.022 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length27
author_reputation2,010,899,473,905
root_title"O Continuous Integration - Bitbucket Pipelines"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id39,034,908
net_rshares4,491,167,950
author_curate_reward""
vote details (2)
@piotr-galas ·
Sarałem się napisać to jak najbardziej przystępnie.
properties (22)
authorpiotr-galas
permlinkre-shogunma-re-piotr-galas-o-continuous-integration-bitbucket-pipeline-20180221t082643645z
categorypolish
json_metadata{"tags":["polish"],"app":"steemit/0.1"}
created2018-02-21 08:26:42
last_update2018-02-21 08:26:42
depth2
children0
last_payout2018-02-28 08:26:42
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length51
author_reputation367,232,102,431
root_title"O Continuous Integration - Bitbucket Pipelines"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id39,289,519
net_rshares0