ááá±á·áá±ááºááœáẠáá±á¬á·ááºáá²ááºáá¯ááºáá¯ááºá¡áá»á¬ážá á¯ááᯠá¡ááœá²á·áá»á¬ážááŒáá·áº áá®ááœááºááŒáááºá á¡á±á¬ááºááŒááºáá±á¬á¡ááœá²á· ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠá¡ááŒá±á¡áá±áá»á¬ážááᯠááá¯ážááŸááºážáá±á¬ áá¯á¶áá±áá¯á¶á á¶ááŒáá·áº ááá¯ááºá á¬ážááŒá¯ááá¯ááºáá«áááºá
ááá·áºáá¯ááºááᯠáá±ážááŒá®ážáááºááŸáá·áº áá±áá»á¬á¡á±á¬áẠááŒá¯áá¯ááºááẠááá¯á¡ááºáááº-
- РабПÑаеÑá
- áááºážáá¯ááºáá±á¬áºááá¯ááºáááºááœá± áá±ážáá²á·áá¯ááºááœá± á¡áá«á¡ááẠáá¬á០áá»ááºáááœá¬ážáá«áá°ážá
á¡ááŒá± á¡áá± ááŸá áºáᯠáá¯á¶áž ááŒáá·áº á á¯á¶ áá« á ááẠá¡á±á¬ááºááŒáẠááŸá¯ áááºážááŒá±á¬ááºáž áá±á«áº áá±á¬áẠáá±ááŒá® á á€á¡ááŒá±á¡áá±áá»á¬ážááᯠá¡ááœááºááá°á á áºáá±ážáááºááŸáá·áº á¡ááŒááºá¡á áœááºážááŸááá±á¬áááºážááŒá±á¬ááºážá០ááœá±áááºáááœá¬ážá á±áááºá áá»áœááºá¯ááºááá¯á·ááẠá ááºáááºáááŒáẠáá±á«ááºážá ááºážááŸá¯ááᯠáá®ááœááºáá²á·áá«áááºá
CI ááẠááá·áºáá¯ááºááᯠáá¯ááºáá¯ááºáá¯ááºá¡ááŒá
Ạáááºááá¯ááºááá»áŸ á¡áá¯á¶ážá
á¯á¶ áá±á«ááºážá
ááºááá·áºááœááºážááá·áº á¡áá¯ááºá¡ááœá¬ážá¡áá¬áá
áºáá¯ááŒá
áºáááºá áá±á«ááºážá
ááºážáá¯á¶áá»áŸáááá² á¡áá¬á¡á¬ážáá¯á¶ážá¡áá¯ááºáá¯ááºáá±ááŒá±á¬ááºážááá¯áááºáž á¡ááŒá²á
á
áºáá±ážáá«á á¡áá»á¬ážááŒá®ážáá²á· áááŒá¬áá á
á
áºáá±ážááá¯á· ááá¯á¡ááºáá¬ááŒá±á¬áá·áºá á¡ááá¯á¡áá»á±á¬ááºá
áá
áºáá²á· áááºáááºááŒá®áž á
ááºážá
á¬ážááá·áºáááºá á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºááá¯ááºááá¯ááºá
á
áºáá±ážááá¯ááºáá±á¬áºáááºáž áááºáááŒá
áºááá·áºáá«á á€áááºááŸá¬ á¡áááºááŒá±á¬áá·áºáááºážá
- áá»á áºááŸá áœá¬áá±á¬áá°. áááºááá·áºáááá¯ááááºáá¬áá áºáŠážáá¡áá¯ááºáá»áááºáá áºáá¬áá®áááºáááºááá·áºáá¬áá¬áá¡áá¯ááºáá áºáá¬áá®áááºááá¯ááá¯á á»á±ážááŒá®ážáááºá
- áá°ááœá±á á¡ááŸá¬ážáá¯ááºáááºá. ááá¯á·ááŒá±á¬áá·áºá á á¬áá±ážááœá²áá»á¬ážááᯠááŸá¬ážááœááºážáá±á¬áá¬áááœá²ááœáẠáá¯ááºáá±á¬ááºááá·áºá¡áá« ááá¯á·ááá¯áẠá ááºážáááºáá°áá»á¬ážá¡ááœáẠááŸá¬ážááœááºážáá±á¬ ááœááºááá·áºááᯠá á¯á ááºážáá¬ážááá·áºá¡áá« á¡ááŒá±á¡áá±áá»á¬áž ááŒá áºáá±á«áºáá¬ááá¯ááºáááºá
- áá°ááœá±á áá»ááºážáááºá. á¡áá¯ááºáá áºáá¯ááŒá®ážááŒá±á¬ááºáá²á·á¡áá« áá¶áááºáá¶áá«ááŸá¬ âá á áºáá±ážááá¯á· áá¬ááŸááá²? áá»áœááºáá±á¬áº á á¬ááŒá±á¬ááºážááŸá áºááŒá±á¬ááºážáá±ážáá²á·ááẠ- á¡áá¬á¡á¬ážáá¯á¶áž á¡áááºááŒá±áá«áááºá áá áºáá»áá¯á·áá»áá±á¬á·áááºáž áá áºáá«ááá± á¡á²áá®ááᯠá¡ááœá±ážááœá± ááŸááááºá áá«áá±ááá·áº á¡ááŒá²áááºáž á á áºáá±ážááá·áºáá«áááºá
Avito ááá¯ááá¯ááºážááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážá¡ááœá²á·ááœáẠá
ááºáááºáááŒáẠáá±á«ááºážá
ááºážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¯á¶á áááºážááá¯á·ááẠáá
áºáá±á·áá»áŸáẠ0 á០450 á¡ááœááºáž áááºáá±á¬ááºáá¯á¶á á
ááºáááºáá±á¬ááºáá¯á¶ááẠáá
áºáá±á·áá»áŸáẠáá¬áá® 200 áááºáááºááŒá±á¬ááºáž Nikolai Nesterov (
áá¬ááºáááºážááẠAndroid command áááá°áá¬ááᯠá¡ááŒá±áá¶áá¬ážáá±á¬áºáááºáž áá»ááºážáááºááŸá¯á¡áá»á¬ážá á¯ááᯠiOS ááœááºáááºáž á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
áá áºáá»áááºá áá°áá áºáŠážááẠAvito Android á¡ááœá²á·ááœáẠá¡áá¯ááºáá¯ááºáá²á·áááºá á¡áááá¹áá«ááºá¡á¬ážááŒáá·áºá áá°ááẠContinuous Integration á០áááºááá·áºá¡áá¬ááá¯áá»áŸ áááá¯á¡ááºáá«á áá±á«ááºážá ááºážááẠáááºáá°áá»áŸ áááŸááá«á
ááá¯á·áá±á¬áº áá»áŸá±á¬ááºááœáŸá¬ááẠááá¯ážáá¬áááºá á¡áá¯ááºáá áºáá»á¬áž ááá¯áá»á¬ážáá¬áááºááŸáá·áºá¡áá»áŸ á¡ááœá²á·ááẠááá¯ážáááºáá¬áááºá áá áºáá»áááºáá»áááºááœááºá áá¯ááºáá±á«ááºážá ááºážááŸá¯ áá¯ááºáááºážá ááºááᯠááá¯ááá¯ááá¬ážáááºáá¯ááºáá±á¬ááºááẠá¡áá»áááºáá»áá±á¬ááºáá¬ááŒá®ááŒá áºáááºá Git flow ááá¯á¡áá¯á¶ážááŒá¯áááºáá¯á¶ážááŒááºáá²á·áááºá
Git flow á ááá±á¬ááá¬ážááᯠáá°áááá»á¬ážáááº- ááá±á¬áá»ááºáá
áºáá¯ááœáẠáá¯á¶ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáá¬áááœá²áá
áºáá¯áá«ááŸáááŒá®áž á¡ááºá¹áá«áááºá¡áá
áºáá
áºáá¯á
á®á¡ááœáẠdeveloper áá»á¬ážááẠáá®ážááŒá¬ážá¡ááá¯ááºážá¡áááºáá
áºáá¯ááᯠááŒááºáá±á¬ááºáᬠáááºážááᯠáá¯ááºáá¯ááºáááºá ááœááºážá¡á¬ážáá±ážáᬠáááºážááá¯á·ááá¯ááºááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáá¬áááœá²ááá¯á· áá±á«ááºážá
ááºážááá¯áá±á¬á¡áá«ááœáẠááœáá·áºáá«á áá±á¬ááºážááá¯áá»ááºááœá²á á¡ááááá¬áá»áŸáá±ááŒááºážááŸáá·áº áá»ááºážáááºáááºážáá»á¬ážááᯠááœá±ážááœá±ážáááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááŒááºáááºáá¯á¶ážáááºááŒááºážááᯠááááºáááºáá±ážáá²á·áááºá ááá¯ááá¯áááºááŸá¬ áá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬ážááẠá¡áá»ááºážáá»ááºážááá¯ááºááᯠá
á
áºáá±ážááŒá®áž á¡áááºááŒá¯ááá«áááºá
á á áºáá±ážááŸá¯áá»á¬áž
áá¯ááºááᯠáá»ááºáá¯á¶ážááŒáá·áºááŒáá·áºááŒááºážááẠá¡á±ážáá»ááºážáá±á¬áºáááºáž ááá¯á¶áá±á¬ááºáá«á ááá¯á·ááŒá±á¬áá·áº á¡ááá¯á¡áá»á±á¬áẠá á áºáá±ážááŸá¯áá»á¬ážááᯠá áááºáá¯ááºáá±á¬ááºáá±áá«áááºá
- ááááá¯á¶ážá¡áá±áá²á· áá»áœááºáá±á¬áºááá¯á· á á áºáá±ážáá«áááºá ARK ááááááº.
- á¡áá»á¬ážááŒá®áž Junit á á¬áá±ážááœá²áá»á¬áž.
- áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááœáŸááºážááŒá¯á¶ááŸá¯ááᯠááá·áºááœááºážá ááºážá á¬ážáááºááá»áœááºá¯ááºááá¯á·ááẠá ááºážáááºááŸá¯áá»á¬áž áá¯ááºáá±á¬ááºáá±áá±á¬ááŒá±á¬áá·áºááŒá áºáááºá
á€á á áºáá±ážááŸá¯áá»á¬ážááᯠáááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠáá¬ážáááºáááºá Avito ááŸá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáááºážá ááºááᯠááŒáá·áºááŒáá«á áá¯á·á
á€áá²á·ááá¯á· ááá¬ážááœááºááŒáá·áº ááá¯ááºá á¬ážááŒá¯ááá¯ááºáááº-
- áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá áºáá±á¬ááºá áá°á·áááºáá±á¬á·ááºááŸá¬ áá¯ááºáá±ážáááºá áá±á«ááºážá ááºá á áºáá±ážááŸá¯áá»á¬ážááᯠá€áá±áá¬ááœáẠáá¯ááºáá±á¬ááºááá¯ááºááẠ- commit áá»áááºááŒáá·áºááŒá áºá á± ááá¯á·ááá¯áẠáá±á¬ááºáá¶ááœáẠá á áºáá±ážááŸá¯áá»á¬ážááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áá¯ááºáá±á¬ááºááá¯ááºáááºá
- áá±á¬á·ááºáá²áá±ážáá¬ážáá°á áá¯ááºááᯠááœááºážáá¯ááºááŒá®ážáá±á¬ááºá ááœá²áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºááᯠááœáá·áºáááºá áááºážááá¯ááºááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáá¬áááœá²ááœáẠááá·áºááœááºážáááºá¡ááœááºá áá¯ááºááŒááºáááºáá¯á¶ážáááºááŸá¯áá áºáá¯ááŒá¯áá¯ááºááŒá®áž ááá¯á¡ááºáá±á¬á¡áááºááŒá¯áá»ááºá¡áá±á¡ááœááºááᯠá á¯áá±á¬ááºážááẠááá¯á¡ááºáá«áááºá á á áºáá±ážááŸá¯áá»á¬ážááŸáá·áº áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá€áá±áá¬ááœáẠáááºááœáá·áºááá¯ááºáááº- áááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶áž á¡á±á¬ááºááŒááºáááºá¡áá ááœá²áá°áá±á¬ááºážááá¯ááŸá¯ááᯠáá±á«ááºážá ááºážááááá«á
- ááœá²áá°áá±á¬ááºážááá¯ááŸá¯ááᯠáá±á«ááºážá ááºážááŒá®áž develop ááœáẠáá¯ááºááá·áºááœááºážááŒá®ážáá±á¬ááºá á¡áááºááŒá±ááá·áºá¡áá»áááºááᯠáááºááœá±ážáá»ááºááá¯ááºáááº- á¥ááá¬á áá¡áá»áááºááœááºá áá¬áá¬áá»á¬ážá¡á¬ážáá¯á¶áž á¡ááá²á·ááŒá áºááŒá®áž áááºááŸá áºáááºááá±á¬áẠá á áºáá±ážááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá«á
áááºážááá¯á·ááááºááºáá±á¬á·áá±á«áºááœáẠá áááºááºáááºááŒááºážááᯠáááºáá°áá»áŸ áááŒáá¯ááºáá«á áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá áºáŠážááẠá¡ááºá¹áá«áááºáá áºáá¯ááᯠááŒá®ážááŒá±á¬ááºáá±á¬á¡áá«á áááºážá áááºážááᯠá¡ááŒááºááœááºážáááºááŒá®áž ááœá²áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºááᯠááœáá·áºááá¯áááºá á€á¡ááá¯ááºá¡ááá·áºááœáẠááŸááºáá»á¬ážáá±á¬á á áºáá±ážááŸá¯á¡áá»áá¯á·ááᯠá áááºáá¯ááºáá±á¬ááºáá«áá áááºážááẠá¡ááœááºáá¬áá¬áá¯á¶áá¬áá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááá¯áááºáž ááŸá±ážááœá±ážá á±áááº- áááºááºáá±á¬á·ááẠáá áºáá¯áá¯ááᯠá á áºáá±ážáá±áá»áááºááœáẠáááºážááᯠáá¯á¶ááŸááºá¡ááá¯ááºážáá¯ááºáá±á¬ááºááẠáááŒá áºááá¯ááºáá«á
á¡áá»áááºááŸáá·áºáá¬áá¬áá»á¬áž áá»á¬ážá áœá¬ááŸááá±á¬ááŒá±á¬áá·áº ááááºááœáẠá á áºáá±ážááŸá¯áá»á¬áž áá¯ááºáá±á¬ááºááŒááºážááᯠáá»áœááºá¯ááºááá¯á· á¡ááœááºááŸá áºáááºáá«áááºá ááá¯á·áá±á¬áº áá¶ááá±á¬ááºážá áœá¬áá²á á¡ááºá¹áá«áááºáá¯ááºááᯠááœá¶á·ááŒáá¯ážáá¬áá±á¬á¡áá«á developer ááẠCI ááœá±á·ááŸááá²á·áá±á¬ á¡ááŸá¬ážáá»á¬ážááᯠááŒááºáááºááẠááŸá¯á¶á·áá±á¬áºááŸá¯ áááºážáá«ážááœá¬ážáá«áááºá ááááºáááºážááŸá¬ ááœá±á·ááá²á· á¡ááŸá¬ážá¡ááœááºážááœá±á¡á¬ážáá¯á¶ážááᯠááŒáá·áºááŒá®áž áá áºáá±á·áá±á· áá áºáá»áááºáá»áááºááŸá¬ ááŒááºáá±ážáá«á·áááºááá¯á· ááœá±ážáá±áááááºá áá¯áá±á¬á· Jira ááŸá¬ á¡áááºážááá¯ááºáá²á· á¡áá¯ááºá¡áá áºáá áºáᯠááŸááá±ááŒá®ááá¯áá±á¬á· áá¯á០á áá¯ááºáá»ááºáá¬á
á á áºáá±ážááŸá¯áá áºáá¯á¡á¬áž ááœá²áá¯ááºááŒááºážá¡á¬áž ááááºááá¯á·áá«áá áááºáá±á¬ááºááŸá¯áá»á¬áž á áááºážáááºážáá¬áááºá¡áá áá¯ááºááẠááœá¶á·ááŒáá¯ážáá¬áááºááá¯ááºáá±á¬ááŒá±á¬áá·áºá ááá¯ááá¯áááºááŸá¬ á¡áá¯ááºááŒá®ážááŒá±á¬ááºáááºááá¯ááºáá«á
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«áá»á°áá¬ááᯠááœá±ážáá»ááºáá²á·áááº- áá»áœááºá¯ááºááá¯á·ááẠáá¡áá»áááºááœáẠááŒá áºááá¯ááºáá»á±ááŸááá±á¬ á á áºáá±ážááŸá¯áá»á¬ážááᯠá¡áá»á¬ážáá¯á¶ážáá¯ááºáá±á¬ááºááŒá®áž áááºážááá¯á·á¡áááºá០á¡áá±áááºá¡áá¶ááá¯á¶ážááŸáá·áº á¡áá±ážá¡ááŒá®ážáá¯á¶ážááŸá¬á ááœá²áááºáá±á¬ááºážááá¯ááŸá¯áá áºáá¯á¡ááœáẠá¡ááŒááºáá¯á¶ážáá¯ááºáá±á¬ááºáá±ážáá«áááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠááá¯áá±áá¬ááœáẠáááºááá±áá«âáááŒáá¯ááºáááºážááœááºá áá±á¬ááºážááá¯áá»ááºáá»á¬ážá¡á¬áž áá¯ááºáá°áááºá¡ááœáẠááá¯ááºá០áááºážááá¯á·ááᯠááœáŸá²ááŒá±á¬ááºážáááºá¡ááœáẠá á áºáá±ážááŸá¯áá»á¬ážá á¡ááŒááºááŸá¯ááºážááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáá¯ááºáá±á¬ááºáá«áááºá
ááá¯á¡áá»áááºááœááºá áá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááẠá¡ááœááºáá»ááºááŒááºá áœá¬ááŒá®ážá á®ážááœá¬ážáá±á¬ááŒá±á¬áá·áº ARK áááºáá±á¬ááºááŸá¯á Junit á ááºážáááºááŸá¯áá»á¬ážááŸáá·áº áá¯ááºá¡áá»á¯á¶ážáááºááŸá¯ááœááºáá»ááºááŸá¯áá»á¬ážááᯠááááºááá¯á·ááŒááºážá¡ááŒá Ạáá»áœááºá¯ááºááá¯á·ááœáẠááá·áºááœááºážáá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯ááœáá·áºáá¬ážááŒá®ážá áááºážááá¯á ááºážá á¬ážáᬠáááºážááá¯áááá¯á¡ááºáᯠáá»áœááºá¯ááºááá¯á·áááºáá±á¬ááŒá±á¬áá·áº áá¯ááºááœáŸááºážááŒá¯á¶ááŸá¯ááᯠá áœáá·áºááœáŸááºáá²á·áááºá
á¡ááŒá±áᶠCI ááᯠá¡ááŒá®ážá¡ááá¯áẠáááºááŸááºááẠáá»áœááºá¯ááºááá¯á· ááŸá áºááẠá¡áá»áááºáá°áá²á·áááẠ(ááá¯á¡áá»ááẠááá·áºááŸááºážáá»ááºááẠá¡áá®ážá ááºáá¯á¶ážááŒá áºááŒá®áž á¡ááá¯ááºážá¡áá¬á¡ááœáẠááá¯á¡ááºáááº)á
ááá¯á·áá±á¬ááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºážááœá±ážáá±á¬áááá±á¬á·áááºá áá»áœááºá¯ááºááá¯á·ááẠááŸááºááŸááºáááºááẠá á áºáá±ážáá±ááá±á¬á áá»áœááºá¯ááºááá¯á·ááẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááœáẠáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááŸááºáááºá áœá¬ áá¯ááºáá±á¬ááºáá±áá«ááá¬ážá
ááœá²áá¯ááºáá±á¬ááºážááá¯ááŸá¯ááᯠááœáá·áºááŸá áºáá²á·ááá·áº áá±á¬ááºáá¯á¶ážáá¬áááœá²á áá±á¬ááºáá¯á¶ážáááááááºááœáẠáá»áœááºá¯ááºááá¯á· á áááºáááºáá±á¬ááºáá²á·áááºá ááá¯á·áá±á¬áº á€ááœááºááá·áºáá ááºážáááºááŸá¯áá»á¬ážááẠdeveloper áá±ážáá±á¬áá¯ááºá¡áá¯ááºáá¯ááºáááºááá¯áá¬ááŒáááá¯ááºáááºá áá«áá±ááá·áº áá°áá¬á០áááœá²áá°ážááá¯áᬠáááºáá±áááŒáá«áá°ážá á¡ááŸááºááŸá¬á á¡ááºá¹áá«áááºáá áºáá¯ááá¯á· áá±á«ááºážá ááºážááŒá®ážáá±á¬áẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¬áááœá²á á¡ááŒá±á¡áá±ááᯠá á áºáá±ážááẠááá¯á¡ááºáááºá
áá«ááá¯áá¯ááºááá¯á·á ááá¯ážááŸááºážáá²á· bash script ááá¯áá±ážáá²á·áááºá premerge.sh:
#!/usr/bin/env bash
set -e
git fetch origin develop
git merge origin/develop
á€áá±áá¬ááœáẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á០áá±á¬ááºáá¯á¶ážááŒá±á¬ááºážáá²ááŸá¯á¡á¬ážáá¯á¶ážááᯠááá¯ážááŸááºážá áœá¬ ááœá²áá¯ááºááŒá®áž áááºááŸááá¬áááœá²ááá¯á· áá±á«ááºážá ááºážááá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážááœáẠáááá¡ááá·áºá¡áá±ááŒáá·áº premerge.sh script ááá¯ááá·áºááœááºážááŒá®áž áá»áœááºá¯ááºááá¯á·ááá¯áá»ááºááá·áºá¡áá¬ááᯠá¡ááá¡áá»á á áºáá±ážááŒááºážááŒá áºáááºá ááá¯ááá¯áááºááŸá¬á áá±á«ááºážá ááºážááŸá¯.
ááŒá¿áá¬ááᯠáá±áá á¶áááºááŸááºáááºá á¡ááŒá±ááŸá¬áááºááŸáá·áº á€áá¬ááºááœáŸááºážáá±ážááẠáá¯á¶ážáááºááŒá¬áááºá
á¡ááºááá®áá±ážááŸááºážááᯠáá®ááœááºááá¯ááºáááºá á¡áá¯ááºáá»á¬áž ááá¯áá»á¬ážáá¬áááºá á¡ááœá²á·ááẠááŒá®ážááœá¬ážáá¬ááŒá®áž premerge.sh ááẠáá áºáá«áá áºáá¶ááœáẠáá»áœááºá¯ááºááá¯á·á¡á¬áž á áœáá·áºááœááºá ááŒá¯áá¬áááºá Develop ááẠáááºáá±á¬ááºááŸá¯ááᯠáá»ááºááŒá¬ážá á±áá±á¬ ááœá²ááœá²áá±á¬ááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž ááŸááá²á·áááºá
á€á¡áá¬ááŒá áºáá»ááºáá¯á¶á¥ááá¬
áá±á¬á·ááºáá²áá±ážáá¬ážáá° ááŸá
áºáŠážááẠá¡ááºá¹áá«ááẠA ááŸáá·áº B ááœáẠáá
áºááŒáá¯ááºááẠá
áááºáá¯ááºáá±á¬ááºáá±áá«áááºá á¡ááºá¹áá«ááẠA á áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬ááẠááá±á¬áá»ááºááœáẠá¡áá¯á¶ážáááŒá¯áá±á¬ á¡ááºá¹áá«áááºáá
áºáá¯ááᯠááŸá¬ááœá±ááœá±á·ááŸáááẠanswer()
áááºážáá±á¬ááºáá±á¬ááºážáá
áºáá±á¬ááºáá²á·ááá¯á· áááºážááᯠáááºááŸá¬ážáááºá áá
áºáá»áááºáááºážááŸá¬áááºá feature B á developer ááẠáááºážááá¬áááœá²ááŸá á€áá¯ááºáá±á¬ááºáá»ááºá¡ááœáẠáá±á«áºááá¯ááŸá¯á¡áá
áºáá
áºáá¯ááᯠáá±á«ááºážááá·áºáááºá
áá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážááẠáááºážááá¯á·ááá¯ááºáááºážááᯠá¡ááŒá®ážáááºááŒá®áž áá áºáá»áááºáááºážááœáẠáá±á¬ááºážááá¯áá»ááºáá áºáá¯ááᯠááœáá·áºáá«á áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá áááºááá¯ááºáá«ááŒá®á premerge.sh ááẠáá±á¬ááºáá¯á¶ážáá±á«áº ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááŒá±á¡áá±ááŸáá·áº áááºáááºááá·áº ááœá²áá¯ááºáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠá á áºáá±ážáá±ážááẠ- á á áºáá±ážááŸá¯á¡á¬ážáá¯á¶ážááẠá¡á áááºážáá±á¬ááºááŒá áºáááºá ááá¯á·áá±á¬ááºááœááºá feature A áááœá²á¡á¬ážáá±á¬ááºážááá¯ááŸá¯ááá¯áá±á«ááºážá ááºážáááºá á¡ááºá¹áá«ááẠB áááœá²á¡á¬ážáá±á¬ááºážááá¯ááŸá¯ááá¯áá±á«ááºážá ááºážáááº... Boom! ááœá¶á·ááŒáá¯ážáá²áá¯ááºááœáẠáááºááŸáááŒááºážáááŸááá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááá¯á· áá±á«áºááá¯ááŸá¯áá áºáá¯áá«áááºáá±á¬ááŒá±á¬áá·áº áá®ááœááºááá¯ááºááŒááºážááŒá áºáá«áááºá
áááœá¶á·ááŒáá¯ážáá±ážáá²á·á¡áá«á áá±áááœááºážáá±ážá¡áá¹ááá¬ááº. á¡ááœá²á·áá
áºááœá²á·áá¯á¶ážááẠáááºááá·áºá¡áá¬ááá¯áá»áŸ á
á¯áá±á¬ááºážá á
ááºážáááºáááºá¡ááœáẠáááºááŒááŒááºážáááŒá¯ááá¯ááºáá«á
ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á ááœááºáááºá áá±áá¬áá±á·á áºáá»á¬ážá ááá¯ááá¯áááºááŸá¬á á¡ááŒá¬áž developer áá»á¬ážá¡áá¯á¶ážááŒá¯áá±á¬ ááᯠfunction ááŸáá·áº classes áá»á¬ážááᯠáá±ážáá¬ážáá²á·áá°ááŒá áºáááºá áá®á¡ááœááºááŒá±á¬áá·áºáááºáž á¡áá¬ážáá° á¡ááŒá±á¡áá±áá»áá¯ážááŸá¬ áááŒá¬áá ááœá±á·áá²á·ááááºá áá®áá¯á¶áá±ážáá±á¬áẠááááŒá¬á¡á±á¬áẠááœá²áá¬ážááá¯ááºáá±ážáááºá
áááºážááẠáá»áœááºá¯ááºááá¯á·ááŸáá·áº áááá¯ááºáá®áá±á¬ááŒá±á¬áá·áºá áááºážááᯠáá¬ááœááºááẠáááºážáááºážáá»á¬ážááᯠá
áááºááŸá¬ááœá±áá²á·áááºá
áááœá¶ááŒáá¯ážá¡á±á¬áẠáááºááá¯áá¯ááºááá²á
ááá option: develop ááá¯ááœááºážáá¶ááá·áºá¡áá«ááœá²áá°áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááá¯ááŒááºáááºáááºáá±á¬ááºáá«á áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœááºá feature A áá«áá±á¬ ááœá²áá¯ááºááŸá¯áá±á¬ááºážááá¯ááŸá¯ááẠdevelop ááœááºááááá¯á¶ážááá·áºááœááºážáááºááŒá áºáá«áá áá¯ááºáá±á¬ááºáá»áẠB áááœá²á¡á¬ážáá±á¬ááºážááá¯ááŸá¯ááᯠááŒááºáááºáááºáá±á¬ááºáááºááŒá áºááŒá®ážá ááá¯á·ááŒá±á¬áá·áºá á á¯á ááºážááŸá¯á¡ááŸá¬ážáá áºáá¯ááŒá±á¬áá·áº á á áºáá±ážááŸá¯áá»á¬ážáá»ááºááœááºáááºááŒá áºáááºá
áááºážáááºáááºáá»áŸááŒá¬áááºááá¯áá¬ážáááºááẠPR ááŸá áºáá¯áá«áá±á¬ á¥ááá¬áá áºáá¯ááᯠáá¯á¶ážáááºááŒáá·áºáá«á áá»áœááºá¯ááºááá¯á·ááẠPR ááŸá áºáá¯ááá¯ááœáá·áºáááº- áááºáá±á¬ááºááŸá¯ááŸá áºáá¯á á á áºáá±ážááŸá¯ááŸá áºáá¯áá¯ááºáá±á¬ááºáááºá ááá PR ááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºá¡á±á¬áẠáá±á«ááºážá ááºážááŒá®ážáá±á¬áẠáá¯ááááá áºáá¯ááᯠááŒááºáááºáááºáá±á¬ááºááẠááá¯á¡ááºáááºá á á¯á á¯áá±á«ááºážá PR ááŸá áºáá¯ááẠá á áºáá±ážááŸá¯áá¯á¶ážááŒááẠááá¯á¡ááºáááº- 2 + 1 = 3á
áá°á¡ááá±á¬á· áá±á¬ááºážáá«áááºá áá«áá±ááá·áº áá»áœááºáá±á¬áºááá¯á· á á¬áááºážááá¬ážááœá±ááᯠááŒáá·áºááá¯ááºáá±á¬á· áá»áœááºáá±á¬áºááá¯á·á¡ááœá²á·áá²á· áá¯á¶ááŸááºá¡ááŒá±á¡áá±á 10 ááœáá·áº PR ááœá±ááŒá áºááŒá®áž á á áºáá±ážááŸá¯á¡áá±á¡ááœááºá ááá¯ážáááºááŸá¯áá²á· áá±á«ááºážáááºááŒá áºáá«áááº- 10 + 9 + ... + 1 = 55 á ááá¯ááá¯áááºááŸá¬ 10 ááᯠáááºáá¶áááºá PRs áá»á¬ážááᯠ55 ááŒááẠááŒááºáááºáááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá á€áá«áááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±á ááºááœáẠá á áºáá±ážááŸá¯á¡á¬ážáá¯á¶ážááẠáááá¡ááŒááẠá¡á±á¬ááºááŒááºááœá¬ážáá±á¬á¡áá«á á€áá«áááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±áá»áááºááœáẠáá±á¬ááºáááºááœá²áááºáá±á¬ááºážááá¯ááŸá¯ááᯠáááºáá°áá»áŸ áááœáá·áºááá·áºá¡áá« áááºážááẠá á¶ááŒá¡ááŒá±á¡áá±áá áºáá¯ááŒá áºáááºá
âáá±á«ááºážá ááºááŒááºážâ ááá¯ááºááᯠááááá¯á¶ážááŸáááºááẠááá·áºááá¯ááºááẠáá±á¬á·ááºáá²áá±ážáá¬ážáá°á¡ááŒá ẠááŒááºáá±á¬ááºááŒáá·áºáá«á á¡ááŒá±á¬ááºážááŸá¬ á¡áááºáá®ážáá¬ážáá»ááºážá ááá¯ááá¯á·áá¯ááºáá±á¬ááºáá«áá áááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶áž áá±á¬ááºáá áºááŒááẠáááºáááŒá®ážááá»ááºáž á á±á¬áá·áºááááá·áºáááº... ááá¯ááºáá«á á¡áá¯ááºáááŒá áºáá«á ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠááá¯ážááœá¬ážá áœá¬ ááŸá±ážááœá±ážá á±áááºááŒá áºáááºá
áá¯áááááŒá áºááá¯ááºáá±á¬áááºážáááºáž áá¯ááºááŒááºáááºáá¯á¶ážáááºááŒá®ážáá±á¬áẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠá á¯áá±á¬ááºážáá«á ááá¯ááá¯áááºááŸá¬ áááºááẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯ááᯠááœáá·áºáá«á áá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬ážáá¶á០ááá¯á¡ááºáá±á¬ á¡áááºááŒá¯áá»ááºá¡áá±á¡ááœááºááᯠá á¯áá±á¬ááºážáá«á ááá¯á¡ááºáááºáá»á¬ážááᯠááŒá¯ááŒááºáá«á ááá¯á·áá±á¬áẠáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá áááºáá«á áááºážááá¯á·á¡á±á¬ááºááŒááºáá«áá ááœá²áááºáá±á¬ááºážááá¯ááŸá¯ááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºá á±ááẠáá±á«ááºážá ááºáá¬ážáááºá á€ááá á¹á ááœááºá áá±á¬ááºáááºááŒááºáááºá áááºááŒááºážáá»áá¯ážáááŸááá±á¬áºáááºáž áá¯á¶á·ááŒááºáá»ááºááẠá¡ááœááºááŸá±ážááœá±ážááœá¬ážáá«áááºá áá±á¬á·ááºáá²áá±ážáá¬ážáá°á¡áá±ááŒáá·áºá ááœá²áááºáá±á¬ááºážááá¯ááŸá¯áá áºáá¯ááᯠáá»áœááºá¯ááºááœáá·áºááá·áºá¡áá« áááºážááẠá¡áá¯ááºááŒá áºáááŒá áºááᯠáá»ááºáá»ááºážááŒáá·áºáá»ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá á ááºážáááºááŸá¯áá áºáá¯áá»ááºááœááºáá«áá áááºážááá¯á¡ááŒááºááŒááºáááºááá¯á¡ááºáááºá áááºáá±á¬ááºááŸá¯ááŸá±á¬áá·áºááŸá±ážáá±á¬á¡áá«ááœááºá áá¯á¶á·ááŒááºáá»áẠááŸá±ážááœá±ážááŒá®áž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá áºáá¯áá¯á¶ážááᯠáá¯ááºáá±á¬ááºáááºá áá«á áá«ááá¯á·áá²á·áááºáž áááá¯ááºáá®áá°ážá
ááááºá¡áá±áá²á· ááááááœá±ážáá»ááºááŸá¯áᬠáá»ááºááŸááá±á¬á·áááº- á ááºáá®áž. áá»áœááºá¯ááºááá¯á·ááá¯ááºá¡á¬ážáá¯á¶ážá áá»áœááºá¯ááºááá¯á·ááááºážááŒá áºá¡á¬ážáá¯á¶ážááᯠBitbucket áá¬áá¬ááŸá ááá¯ááŸá±á¬ááºáá¯á¶áá áºáá¯ááœáẠááááºážáááºážáá¬ážáááºá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠBitbucket á¡ááœáẠááááºá¡ááºáá áºáá¯ááᯠáá®ááœááºááẠááá¯á¡ááºáá«áááºá
á€ááááºá¡ááºááẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯ áá±á«ááºážá
ááºážááŒááºáž ááá¹ááá¬ážááᯠá¡á
á¬ážááá¯ážáááºá á¡á
ááŸá¬ á
á¶ááŒá
áºáááº- PR ááá¯ááœáá·áºáááºá á
ááºážáá±ážááœá²á¡á¬ážáá¯á¶ážááᯠá
áááºáááºá áá¯ááºááŒááºáááºáá¯á¶ážáááºááŒááºáž ááŒá®ážááŒá±á¬ááºáááºá ááá¯á·áá±á¬áº áá¯ááºááŒááºáááºáá¯á¶ážáááºááŒááºážááᯠááŒá®ážááŒá±á¬ááºááŒá®áž developer á០"merge" ááá¯ááŸáááºááẠáá¯á¶ážááŒááºááŒá®ážáá±á¬ááºá plugin ááẠchecks áá»á¬ážááᯠrun ááá·áº develop state ááá¯á
á
áºáá±ážáááºá áááºáá±á¬ááºááŸá¯áá»á¬ážááŒá®ážáá±á¬áẠdevelop ááᯠá¡ááºááááºáá¯ááºááŒá®ážáá«áá plugin ááẠááá¯áá²á·ááá¯á·áá±á¬ ááœá²áááºáá±á¬ááºážááá¯ááŸá¯ááᯠáááºááá¬áááœá²ááá¯á· áá±á«ááºážá
ááºážááẠááœáá·áºááŒá¯áááºááá¯ááºáá«á áááºážááẠáááŒá¬áá±ážáá®á áááºáá±á¬ááºááŸá¯áá»á¬ážá áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááá¯ážááŸááºážá
áœá¬ ááŒááºáááºá
áááºáááºááŒá
áºáááºá
ááœá²ááœá²áá±áá±á¬ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááŸáá·áº áá»áœááºá¯ááºááá¯á·áááá°áá¬ááœááºá á
á¯á
ááºážááŸá¯á¡ááŸá¬ážáá
áºáá¯ááŒá±á¬áá·áºá ááá¯ááá¯á·áá±á¬áááºáá±á¬ááºááŸá¯áá»á¬ážááẠáá»ááŸá¯á¶ážáááá·áºáááºá ááá¯á·ááŒá±á¬áá·áºá á¡ááºá¹áá«ááẠB á developer ááẠáá¯ááºááᯠááŒá¯ááŒááºáááºá á
á
áºáá±ážááŸá¯áá»á¬ážááᯠááŒááºáááºá
áááºááááºááŒá
áºááŒá®ážá ááá¯á·áá±á¬áẠááááºá¡ááºááẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯ááᯠá¡ááá¯á¡áá»á±á¬áẠá¡áá¯á¶ážááŒá¯áááºááŒá
áºáááºá
á€ááááºá¡ááºááᯠá¡áá±á¬ááºá¡áááºááá±á¬áºáá®á ááœá²áá°áá±á¬ááºážááá¯ááŸá¯áá áºáá¯áá»áŸáẠááŒááºáááºáá¯á¶ážáááºááŸá¯ 2,7 ááᯠáá»ááºážáá»áŸáá¯ááºáá±á¬ááºáá²á·áááºá ááááºá¡ááºááŸáá·áºá¡áá° 3,6 ááœáŸáá·áºáááºááŸá¯áá»á¬ážááŸááá²á·áááºá áá«á áá«ááá¯á·áá²á· ááá·áºáá±á¬áºáááºá
á€ááááºá¡ááºááœáẠá¡á¬ážáááºážáá»ááºáá áºáá¯ááŸááááºááᯠáááááŒá¯ááá·áºáááº- áááºážááẠáááºáá±á¬ááºááŸá¯ááᯠáá áºááŒáááºáᬠááŒááºáááºá áááºáááºá ááá¯ááá¯áááºááŸá¬á ááœá²ááœá²áá±áá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬áž ááŒá áºáá±á«áºáá¬ááá¯ááºááá·áº áá±ážáááºáá±á¬ ááŒáááºážáá±á«ááºáá áºáᯠááŸááá«áá±ážáááºá áá«áá±ááá·áº áá«á ááŒá áºááá¯ááºááŒá±áááºážáá«áááºá á áááºáá²á·á¡áá±á¡ááœááºáá²á· áá»ááŸá¯á¶ážááá¯ááºááŒá±ááŒá¬áž á¡áá±ážá¡áá°áá¯ááºáá¬ážáá«áááºá ááŸá áºááŸá áºá¡ááœááºážááŸá¬ áá áºááŒáááºáᬠáá áºáááºáá²á·á¡ááœáẠá¡áá»ááºážááŸá®ážááŒá áºááŸá¬ ááá¯ááºáá«áá°ážá
Bitbucket ááááºá¡ááºá ááááá¯á¶ážáá¬ážááŸááºážááᯠáá±ážáá¬ážááẠáá»áœááºá¯ááºááá¯á· ááŸá áºáááºááŒá¬áá²á·áááºá
á¡áá áºá á áºáá±ážááŸá¯áá»á¬áž
ááá¯á¡áá»áááºááœáẠáá»áœááºá¯ááºááá¯á·á¡ááœá²á·ááẠáááºáááºááá¯ážáááºáá±áá«áááºá á á áºáá±ážááŸá¯á¡áá áºáá»á¬áž ááá·áºááœááºážáá¬ážáááºá
áá¬ážáá®ážááá¯ááºáá»áŸáẠá¡áááºááŒá±á¬áá·áº á¡ááŸá¬ážáá¯ááºááááŒááááºážá á¡á²áá«ááŒá±á¬áá·áº áá°ááá¯á·á á¡áá±á¬ááºá¡áááºáá±á¬áºáááºá static code ááœá²ááŒááºážá áááºááŒá¬ááŒááºážá. áá»áœááºá¯ááºááá¯á·ááẠAndroid SDK ááœááºáá«áááºááá·áº lint ááŒáá·áºá áááºáá²á·áááºá ááá¯á·áá±á¬áº ááá¯á¡áá»áááºááœáẠáá°ááẠKotlin áá¯ááºááŒáá·áº áááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠáá¯á¶ážáááááá²á·áá²á áá»áœááºá¯ááºááá¯á·ááœáẠKotlin ááŒáá·áº áá±ážáá¬ážáá¬ážáá±á¬ áá»áŸá±á¬ááºááœáŸá¬á 75% ááŸááá±ááŒá®ááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº ááá¯ážááœáŸá¬ážáá»á¬ážááᯠááá¯ážááœáŸá¬ážáá»á¬ážááœáẠááá·áºááœááºážáá¬ážáááºá Android Studio á á áºáá±ážááŸá¯áá»á¬ážá
áá«ááá¯áá¯ááºááá¯á·á áá»áœááºá¯ááºááá¯á·ááẠááŸáá·áºá á¬ážááŒááºážáá»á¬ážá áœá¬ááᯠááŒá¯áá¯ááºááá«áááº- Android Studio ááá¯áá°á áááºážááᯠDocker ááœáẠáá¯ááºááá¯ážááŒá®áž CI áá±á«áºááœáẠvirtual áá±á¬áºáá®áá¬áá áºáá¯ááŒáá·áº ááœáá·áºáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááẠáááá·áºáááºááºáá±á¬á·áá áºáá¯á¶ážáá±á«áºááœáẠáááºáááºáá±áááºáᯠáááºá á±áááºá áá«áá±ááá·áº á¡áá¯ááºáá¯ááºáááºá
áá®á¡áá»áááºááŸá¬áááºáž á á¬ááœá± á¡áá»á¬ážááŒá®áž á áá±ážááŒá áºáá²á·áá«áááºá áááááá¬á ááºážáááºááŸá¯áá»á¬áž ááŸáá·áºá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá screenshot á ááºážáááºááŒááºážá. á€áááºááŸá¬ áá®ážááŒá¬ážá¡áá±ážá á¬ážááŒááºááœááºážáá áºáá¯á¡ááœáẠáááºááœáŸááºážáááºáá¬ážááŒááºáá¬ááºáá¯á¶ááᯠáááºáá®ážááá·áºá¡áá«ááŒá áºááŒá®ážá á ááºážáááºááŸá¯ááœáẠááŒááºááœááºážá០áááºáá¬ážááŒááºáá¬ááºáá¯á¶ááá¯áá°ááŒá®áž áááºážááᯠá ᶠpixel ááŒáá·áº ááá¯ááºááá¯áẠpixel ááŸáá·áº ááŸáá¯ááºážááŸááºááŒááºáž áá«áááºáá«áááºá ááœá²ááœá²ááŸá¯ááŸááá«áá á¡ááŒááºá¡áááºááẠáá áºáá±áá¬áá¬ááœáẠááŸá¬ážááœááºážááœá¬ážááŒááºáž ááá¯á·ááá¯áẠáá¯á¶á á¶áá»á¬ážááœáẠáá áºáá¯áá¯ááŸá¬ážáá±áááºáᯠááá¯ááá¯áááºá
ááá¯á·áá±á¬áº áááááá¬á ááºážáááºááŸá¯áá»á¬ážááŸáá·áº áááºáá¬ážááŒááºáá¬ááºáá¯á¶á ááºážáááºááŸá¯áá»á¬ážááᯠá ááºáá á¹á ááºážáá»á¬ážááœáẠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááº- emulators áá»á¬ážáá±á«áºááœáẠááá¯á·ááá¯áẠáááá·áºáááááá¬áá»á¬ážááœáẠááŒá áºáááºá á á áºáá±ážááŸá¯áá»á¬ážá áœá¬ááŸáááŒá®áž áááºážááá¯á·ááᯠáááŒá¬áááá¯ááºáá±á¬ááºáááºáᯠáá°ááá«á áááºáá¬áá áºáá¯áá¯á¶áž ááá¯á¡ááºáá«áááºá ááá·áºááá¯ááºááá¯ááºááŒá¶ááᯠá áááºááŒááºážááẠáá¯ááºáá¬ážá¡ááºá¡á¬áž á¡ááœááºá¡áá»áœá¶ááŒá áºáá±á¬ááŒá±á¬áá·áº á¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ ááœá±ážáá»ááºááŸá¯áá áºáᯠ- Firebase Test Lab ááᯠááœá±á·ááŸááá²á·áááºá
Firebase á ááºážáááºáááºáž
Firebase ááẠGoogle áá¯ááºáá¯ááºáá áºáá¯ááŒá áºáá±á¬ááŒá±á¬áá·áº áááºážááá¯ááœá±ážáá»ááºáá²á·ááŒááºážááŸá¬ áá¯á¶ááŒááºá áááºáá»áááŒá®áž áá±áá¯á¶ážáááºáááŒá áºááá¯ááºáᯠááá¯ááá¯ááŒááºážááŒá áºáááºá áá±ážááŸá¯ááºážáá»á¬ážááẠáá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºáááº- á á áºááŸááºáá±á¬áááááá¬ááááºáááºááŸá¯áá áºáá¬áá®áá»áŸáẠ$5á emulator áá áºáá¯ááááºáááºááŸá¯áá áºáá¬áá®áá»áŸáẠ$1á
Firebase Test Lab ááᯠáá»áœááºá¯ááºááá¯á·á CI ááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááá·áºááŸááºážááŒá±á¡á¬ážááŒáá·áº áá¯á¶ážáááºááá·áº á¡áá»áááºáá°ááá«áááºá
ááá¯á·áá±á¬áº á¡ááœá²á·ááẠáááºáááºááŒá®ážááœá¬ážáá¬ááŒá®áž Firebase ááẠáá¶ááá±á¬ááºážá áœá¬ááŒáá·áº áá»áœááºáá±á¬áºááá¯á·ááᯠááŸááá·áºáá»á ááŒá¯áá¬áááºá á¡á²áá®áá¯ááºážá áá°á·ááŸá¬ SLA áááŸááá°ážá áá áºáá«áá áºáá¶ááœáẠFirebase ááẠááá¯á¡ááºáá±á¬ á ááºáá á¹á ááºážá¡áá±á¡ááœááºááᯠá ááºážáááºááẠá¡ááá²á·ááŒá áºáááºá¡áá áá»áœááºá¯ááºááá¯á·á¡á¬áž á á±á¬áá·áºááá¯ááºážááŒá®áž áá»áœááºá¯ááºááá¯á·á¡ááá¯ááŸáááá²á·ááá¯á· áááºážááá¯á·ááᯠáá»ááºáá»ááºážááá¯ááºáá±á¬ááºááá¯ááºáá«á áááºážá á®á á±á¬áá·áºááá¯ááºážááááºááŸá¬ áá¬áá®áááºááá·áºááŒá¬ááŒáá·áºááŒá®áž á¡ááœááºááŒá¬ááŒáá·áºáá«áááºá PR áá áºáá¯á á®ááá¯ááºážááœáẠáááááá¬áááºáá¬ááá¬á á áºáá±ážááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá²á·ááŒá®ážá ááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠá¡ááŸááºáááẠááŸá±ážááœá±ážá á±áááºá ááá¯á·áá±á¬áẠáá ááºááœá±áá±á¬ááºážáá¶ááœáŸá¬ááẠá¡áá¯á¶ážá¡áááºážááŒáá·áº áá±á¬ááºááŸááá¬áá«áááºá áá±áá¯áá»á¡á¬ážááŒáá·áºá á¡ááœá²á·ááẠá¡áá¯á¶á¡áá±á¬ááºááŒá®ážááœá¬ážáá¬áá±á¬ááŒá±á¬áá·áº Firebase ááᯠá áœáá·áºááœáŸááºááŒá®áž á¡áááºááœááºážá¡áá¯ááºáá¯ááºááẠáá¯á¶ážááŒááºáá²á·áááºá
Docker + Python + bash
áá»áœááºá¯ááºááá¯á·ááẠDocker ááá¯áá°á áááºážááœááºááá·áºááœááºážáá¬ážáá±á¬ emulators áá»á¬ážááᯠPython ááœáẠááá¯ážááŸááºážáá±á¬áááá¯ááááºáá áºáá¯áá±ážáá²á·áááºá ááŸááºáááºááá·áºá¡áá»áááºááœáẠááá¯á¡ááºáá±á¬ emulator á¡áá±á¡ááœááºááᯠááŸááºáááºáá±á¬áá¬ážááŸááºážááœááºá áááºááŒá®áž ááá¯á¡ááºááá·áºá¡áá«ááœáẠáááºážááá¯á·ááá¯áááºááá·áºá á±áááºá ááŒá®ážáá±á¬á· bash scripts ááŸá áºáᯠ- á¡á²áá«ááœá±ááá«áá² áá«ááá¯á·áááºááŸá¬ááŸáááá²á
áá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯ááºá ááºážáááºááŸá¯áááºáááºážáá»ááºááá¯áááºáá®ážááẠáá«ážáááºááŒá¬áááºá
ááááºá¡áá±ááŒáá·áºá ááœá²áá°áá±á¬ááºážááá¯ááŸá¯ááá¯ááºážá¡ááœáẠáá»ááºááŒáá·áºáá±á¬ áá±á«ááºážá ááºážááŸá¯-ááááºááá¯á·ááŒááºážááá¯ááºáᬠá á áºáá±ážáá»ááºá á¬áááºážáá áºáᯠááŸááá«áááº-
- ARK á ááºážáá±ážááœá²;
- Junit á ááºážáááºááŸá¯áá»á¬áž;
- áá»á¬ážá
- Android Studio á á áºáá±ážááŸá¯áá»á¬ážá
- áá°áááá¬á ááºážáááºááŸá¯áá»á¬áž;
- Screenshot á ááºážáááºááŸá¯áá»á¬ážá
áááºážá ááŒá áºááá¯ááºáá»á±ááŸááá±á¬ ááŒáá¯ááœá²ááŸá¯áá»á¬ážá áœá¬ááᯠáá¬ážáá®ážáá²á·áááºá áááºážááá¬á¡á á¡áá¬áá¬ááá¯ááºážááẠá¡áá¯ááºááŒá áºáá²á·áá±á¬áºáááºáž ááááºáá»á¬ážááᯠá á±á¬áá·áºááááºááŸá¬ ááŒá¬ááœááºážáááºáᯠdeveloper áá»á¬ážá á á±á¬áááááºááŒáááºá
áááºáá±á¬ááºááŒá¬áá²? áá»áœááºá¯ááºááá¯á·ááẠBitbucket ááŸáá·áº TeamCity á០áá±áá¬áá»á¬ážááᯠááœá²ááŒááºážá áááºááŒá¬ááŸá¯á áá áºááá¯á· á¡ááºáá¯ááºáá¯ááºáᬠáááºážááᯠááá±á¬áá±á«ááºáá«áááºá áá»ááºážáá»áŸá á±á¬áá·áºááá¯ááºážáá»ááẠ45 áááá áº. ááá¯ááá¯áááºááŸá¬ developer ááẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯ááá¯ááœáá·áºáá±á¬á¡áá« áááºáá±á¬ááºááŸá¯ááááºáá»á¬ážá¡ááœáẠáá»ááºážáá»áŸ 45 áááá áºá á±á¬áá·áºáááºá áá»áœááºáá±á¬á·áºá¡ááŒááºá¡ááá±á¬á· áá«á á¡áá»á¬ážááŒá®ážáá²á áááºážá¡á²áá®ááá¯áá¯ááºááá¯á·áááá°ážá
áá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·áá²á· áááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážááᯠá¡ááŸáááºááŒáŸáá·áºááá¯á· áá¯á¶ážááŒááºáá²á·áá«áááºá
á¡ááŸáááºááŒáŸáá·áºááá¯ááºáá¡á±á¬ááº
á¡áá±á¬ááºá¡á¡á¯á¶ááœá± áááºážá á®áá±áá±á·ááŸááá¬ááᯠááœá±á·ááá±á¬á· áá»áœááºáá±á¬áºááá¯á· ááááá¯á¶ážáá¯ááºáá¬á Hardware ááœá± ááá¯áááºáá¬áááºá - áá»ááºááŒáá·áºáá±á¬ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááẠá¡ááá¯ážááŸááºážáá¯á¶ážááŒá áºáááºá á¡áá±á¬ááºá¡á¡á¯á¶áá»á¬ážááẠáááºážá á®á á±á¬áá·áºááá¯ááºážááŒááºážááᯠáááºááœá¬ážáá±á¬áºáááºáž á¡áá»áá¯á·áá±á¬á á áºáá±ážááŸá¯áá»á¬ážááẠá¡áá»áááºá¡ááœááºááŒá¬ááŒáá·áºáá±á¬ááŒá±á¬áá·áº á á±á¬áá·áºááá¯ááºážáá»áááºá¡áááºážáááºáᬠáá»á±á¬á·áááºážááœá¬ážáááºá
ááŒá¬ááŒáá·áºááœááºážáá±á¬ á á áºáá±ážááŸá¯áá»á¬ážááᯠáááºááŸá¬ážááŒááºážá
áá»áœááºá¯ááºááá¯á·á á ááºáááºáááŒáẠáá±á«ááºážá ááºážááŸá¯ááẠá€á¡ááŸá¬ážáá»á¬ážááŸáá·áº ááŒá¿áá¬á¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠáááºážá á¬ážááá¯ááºáááºááŒá áºáááºá
- áááœá¬ážáá°ážá. ááœá²ááœá²áá±áá±á¬ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááŒá±á¬áá·áº áá áºáá¯áá¯ááááºáá±á¬ááºááá·áºá¡áá« CI ááẠá á¯á ááºážááŸá¯á¡ááŸá¬ážááᯠáááºážááááá¯ááºáááºá áá«ááŒá±á¬áá²á·áááá¯áá²á áááºá¡áá¬á០á á¯á ááºážááá¯á· áááá±á¬á·áá°ážá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ áááºááá·áºááœá¬ážááŒá®áž áá°ááá¯ááºážá áá¯ááºááŸá¯ááºáá»á±á¬ááºáá»á¬ážááœá¬ážááŒáá«áááºá
- á¡áá»áá·áºá á¬áááá¹ááá»áá¯á·ááœááºážááŒááºážá. á¥ááá¬á¡á¬ážááŒáá·áºá á¡ááá®áá±ážááŸááºážááá¯áááºáá±á¬ááºáá±á¬á¡áá«ááœááºá áááºááá¯ááºáá áºáá¯ááá¯ááŸáááºáá±á¬á¡áá«áá»ááºááœá¬ážáááºá ááá¯á·ááá¯ááºááá¯ááºááá¯áá¯á¶ážááááŸáááºáá«á ááá¯ááá¯á·áá±á¬ áá»áœááºááœááºážáá»ááºááẠá¡áá¯á¶ážááŒá¯áá°áᶠáá±á¬ááºááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áº áááºážááẠááá±á¬ááºážáá«á
- á¡ááŒááºá¡áááºááœáẠáá»áœááºááœááºážáá»ááº. á¥ááá¬á¡á¬ážááŒáá·áºá ááá¯ááºáá áºáá¯ááᯠááŸáááºááá¯ááºáá±á¬áºáááºáž 10 pixels ááᯠáááºáááºááá¯á· ááœáŸá±á·áá¬ážáááºá
- áááºážááá¬ááá¯ááºáᬠá¡ááŒáœá±ážáá»á¬áž ááá¯ážáá¬áááºá.
á€á á¬áááºážááá¯ááŒáá·áºááŒá®ážáá±á¬áẠáááá¡áá»ááºááŸá áºáá»ááºáᬠá¡áá±ážááŒá®ážááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááá±á¬áá±á«ááºáá«áááºá áá®ááá¯ááŒá¿áá¬ááœá±ááᯠá¡áááºáááºážáá»ááºáááºá á¡ááŒááºá¡áááºááŸá áá»áá¯á·ááœááºážáá»ááºáá»á¬ážááᯠáá®ááá¯ááºážááŒááºáááºáá¯á¶ážáááºááá·áºá¡ááá·áºááœáẠááœá±á·ááŸáááŒá®áž á¡ááœááºááá° ááŒááºáááºááá¯ááºáááºá áááºážááá¬ááá¯ááºáá¬ááŒáœá±ážááŒá®áá»á¬ážááᯠááá¯ááºááœááºááŒá±ááŸááºážáá¬ááœáẠáá®ážááŒá¬ážáá¯ááºáááºážá ááºááŸáá·áº á¡á á®á¡á ááºááœá²ááẠááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº áááºážááᯠááœá²áá¯ááºááẠáá±á¬ááºážááá¯ááŸá¯ááŒáá·áº áááºážááᯠá ááºážáááºááẠáá¯á¶ážááŒááºáá²á·áááºá
á€á¡áá»áá¯ážá¡á á¬ážááœá²ááŒá¬ážááŸá¯á¡áá±á«áºá¡ááŒá±áá¶á áá»áœááºá¯ááºááá¯á·ááẠá á áºáá±ážááŸá¯á á¬áááºážáá áºáá¯áá¯á¶ážááᯠáá¯ááºááŸá¯ááºá á±áá«áááºá áááºážááá¯ááŒááºááá¯ááºáááºá ááá±á¬áá»ááºááœáẠááŒá¿áá¬áááºáá»áŸááŸááááºááᯠá¡á á®áááºáá¶á á¬áá¯ááºááá¯ááºááẠáá áºááá¯á¶áž ááœáŸá±á·ááá¯ááºážáá²á·áááºá áááºážááá¬ááá¯ááºáá¬ááŒáœá±ážááŒá®áá»á¬ážááŸáá·áº áá®ážááŒá¬ážá á®áá¯ááºáá±á¬ááºááẠááá±á¬áá°áá®áá²á·ááŒáááºá Android Studio á á áºáá±ážááŸá¯áá»á¬ážááᯠáá¯á¶ážá á áœáá·áºááœáŸááºááá¯ááºáá«ááŒá®á. á á áºáá±ážááŸá¯áá»á¬áž áá¯ááºáá±á¬ááºáááºá¡ááœáẠDocker ááŸá Android Studio ááẠá áááºáááºá á¬ážááœááºáá±á¬ááºážáá±á¬áºáááºáž áá¶á·ááá¯ážááŸá¯ááœáẠá¡áááºá¡áá²áá»á¬ážá áœá¬ ááŒá áºá á±áááºá Android Studio áá¬ážááŸááºážáá»á¬ážá¡ááœáẠá¡ááºááááºááŸááºááá»áŸááẠáá¬ážááááºááá¯ááºáá±á¬ áá»áá¯á·ááœááºážáá»ááºáá»á¬ážááŸáá·áº áá¯ááºážáááºáá±áááŒááºážááᯠááá¯ááá¯áááºá áá áºáá»á áºááá¯ááºááẠá¡ááœááºáááºááŒáááºááŸá¯áááŸáá ááŸá¬ážááœááºážáá±á¬á¡ááŒá¯ááá±á¬áá»á¬ážááŸááá±áá±á¬ááŒá±á¬áá·áº áááºáá¬ážááŒááºáá¬ááºáá¯á¶á á áºáá±ážááŸá¯áá»á¬ážááᯠáá¶á·ááá¯ážáááºáááºáž áááºáá²áá«áááºá áááºáá¬ážááŒááºáá¬ááºáá¯á¶á á áºáá±ážááŸá¯áá»á¬ážááᯠá á áºáá±ážá á¬áááºážá០áááºááŸá¬ážááá¯ááºáá«ááŒá®á.
ááááºá¡áá±ááŒáá·áºá
- ARK á ááºážáá±ážááœá²;
- Junit á ááºážáááºááŸá¯áá»á¬áž;
- áá°áááá¬á ááºážáááºááŸá¯áá»á¬ážá
Gradle á¡áá±ážáááºááŸáº
á¡ááŒááºážá¡áááºá á áºáá±ážááŸá¯ááœá±ááá¯ááºáá² á¡áá¬á¡á¬ážáá¯á¶ážá ááá¯áá±á¬ááºážáá¬áááºá áá«áá±ááá·áº ááŒá®ážááŒáá·áºá á¯á¶ááá¯á· ááá·áºáááºáá»ááºáááŸááá«áá°ážá
áá»áœááºá¯ááºááá¯á·ááá»áŸá±á¬ááºááœáŸá¬ááᯠgradle modules 150 ááá·áºááœá²ááŒá®ážááŒá áºáááºá Gradle á¡áá±ážááááºáž áááºááŸáºááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº á€ááá á¹á ááœáẠáá±á¬ááºážááœááºá áœá¬ á¡áá¯ááºáá¯ááºáá±á¬ááŒá±á¬áá·áº áááºážááᯠá ááºážááŒáá·áºááẠáá¯á¶ážááŒááºáá²á·áááºá
Gradle remote cache ááẠáá áºáá¯áá»ááºážá á® modules áá áºáá¯á á®ááœáẠá¡áá¯ááºáá áºáá¯á á®á¡ááœáẠartifact áá»á¬ážááᯠáááºáá±á¬ááºááá¯ááºáá±á¬ áááºáá±á¬ááºááŸá¯áá áºáá¯ááŒá áºáááºá Gradle ááẠáá¯ááºááᯠá¡ááŸááºáááẠá á¯á ááºážááá·áºá¡á á¬áž á¡áá±ážááááºáž áááºááŸáºááᯠáá±á«ááºáááºááŸáá·áº áá áºá á¯á¶áá áºáá±á¬ááºááẠá€áá¯ááºáááºážááᯠáá¯ááºáá±á¬ááºááŒá®ážááŒá®áá¬ážáᯠáá±ážááẠHTTP ááᯠââá¡áá¯á¶ážááŒá¯áááºá áá¯ááºááẠááááºááᯠáá±á«ááºážáá¯ááºáá¯ááºáá¯á¶áá«áá²á
Gradle ááẠDocker áá¯á¶ááᯠáá¶á·ááá¯ážáá±ážáá±á¬ááŒá±á¬áá·áº Gradle á¡áá±ážááááºážáááºááŸáºááᯠáá¯ááºáá±á¬ááºááŒááºážááẠááœááºáá°áááºá áá«ááᯠáá¯á¶ážáá¬áá®á¡ááœááºáž áá»áœááºáá±á¬áºááá¯á· áá¯ááºááá¯ááºáá²á·áááºá
áááºáá¯ááºáááŸá¬á Docker ááá¯ááœáá·áºááŒá®áž ááá±á¬áá»ááºááŸá¬ á á¬ááŒá±á¬ááºážáá áºááŒá±á¬ááºážáá±ážáá«á áá«áá±ááá·áº ááŒááºááŒááºáááºááẠá áááºááá¯ááºáá±ááá·áº á¡áá¬á¡á¬ážáá¯á¶áž á¡áááºááŒá±ááá¯á· á¡áá»áááºáá±á¬áºáá±á¬áºáá°ááá«áááá·áºáááºá
á¡á±á¬ááºááœáẠcache misses ááááºáá áºáááºá
á¡á
ááá¯ááºážááœááºá áááºááŸáºááœá²áá»á±á¬áºááŸá¯áá¬ááá¯ááºááŸá¯ááºážááẠáá
ááá·áºááŸááááºá áá¯á¶ážáááºááŒá¬ááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá€áááºááá¯ážááᯠ65% á¡áá ááá¯ážááŒáŸáá·áºááá¯ááºáá²á·áááºá Gradle ááẠáááºááŸáºááá¯ááœááºááœá¬ážáá±á¬ááŒá±á¬áá·áº Android á¡ááá®áá±ážááŸááºážááŸá
á¯áá±á¬ááºážááá·áºá¡áá¯ááºáá»á¬ážááẠáá°ážáááºážáá±á¬á¡áá°ážá¡ááŒá±á¬ááºážááŸá®ááá¯ááŸá¯áá»á¬ážááŸááááºááá¯ááœá±á·ááŸááá²á·ááááºá
áááºááŸáºááᯠáá»áááºáááºááŒááºážááŒáá·áº áááºáá±á¬ááºááŸá¯ááᯠáá»áœááºá¯ááºááá¯á· á¡ááœááºá¡ááŸáááºááŒáŸáá·áºáá²á·áááºá áá«áá±ááá·áº áááºáááºááŸá¯á¡ááŒááºá áááááá¬áááºáá¬ááᬠá ááºážáááºááŸá¯ááœá±áááºáž ááŸáááŒá®áž á¡áá»áááºááŒá¬áá«áááºá ááœá²áááºáá±á¬ááºážááá¯ááŸá¯ááá¯ááºážá¡ááœáẠá ááºážáááºááŸá¯á¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáááºáááá¯á¡ááºáá«á ááááŸáááẠáá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
áááºáá±á¬ááºááŸá¯ááœá²ááŒááºážá áááºááŒá¬
áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááœááºá áá»áœááºá¯ááºááá¯á·ááẠgit diff ááá¯á á¯áá±á¬ááºážááŒá®áž ááŒá¯ááŒááºáá¬ážáá±á¬ Gradle modules ááá¯ááŸá¬áá«á
ááŒá±á¬ááºážáá²áá¬ážáá±á¬ module áá»á¬ážááŸáá·áº áááºážááá¯á·á¡áá±á«áº áá°áááºáá±á¬ module á¡á¬ážáá¯á¶ážááᯠá
á
áºáá±ážáá±á¬ instrumentation tests áá»á¬ážááá¯áᬠrun ááŒááºážááẠá¡áááá¹áá«ááºááŸááá±áááºá á¡áááºáá®ážáá¬ážáá»ááºáž module áá»á¬ážá¡ááœáẠá
ááºážáááºááŸá¯áá»á¬áž áá¯ááºáá±á¬ááºáá¬ááœáẠá¡ááŸááºáááŸááá«- ááá¯áá±áá¬ááœáẠáá¯ááºááẠááŒá±á¬ááºážáá²á áá¬ááŸáááœá²ááá¯ááºáá«á
áááááá¬áááºáá¬ááá¬á á áºáá±ážááŸá¯áá»á¬ážááẠááá¯ážááŸááºážááŒááºážáááŸááá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áááºážááá¯á·ááẠááááºáááºážá¡ááá·áº á¡ááá®áá±ážááŸááºáž module ááœáẠáááºááŸááá±ááá«áááºá á ááºážáááºááŸá¯áá áºáá¯á á®ááœáẠáááºááá·áº module áá áºáá¯á á®áá«ááŸááááºááᯠáá¬ážáááºááẠbytecode ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááŒáá·áº heuristics ááᯠá¡áá¯á¶ážááŒá¯áá²á·áááºá
áá«áááºááá·áº modules áá»á¬ážááá¯áᬠá ááºážáááºáááºá¡ááœáẠáááááá¬áááºáá¬ááá¬á á áºáá±ážááŸá¯áá»á¬ážá áá¯ááºáá±á¬ááºáá»ááºááᯠá¡ááá·áºááŒáŸáá·áºáááºááŒááºážááŸá¬ ááŸá áºáááºááá·áºááŒá¬áá«áááºá
á á áºáá±ážááŸá¯ á¡ááŸáááºááŒáŸáá·áº áá±á¬ááºááœááºáá»ááºáá»á¬áž á¡á±á¬ááºááŒááºá áœá¬ áá±á¬ááºááœááºáá²á·áá«áááºá áá áááá áºá០áá áá¬áá®ááá·áºá¡áá áááºááœá¬ážáááºá áááºáá±á¬ááºááŸá¯áá áºáá¯á¡ááœáẠáá áºáá¬áá®ááá±ážáá¯á¶áá áºáá¯á¶ááᯠá á±á¬áá·áºááááºááŸá¬ áá¯á¶ááŸááºááŒá áºáá±áá«ááŒá®á
ááá¯áá° developer áá»á¬ážááẠáááºááá·áº build áá»á¬ážááᯠá áááºáá¯ááºáá±á¬ááºáá±áááºá ááŸááºáááºážááᯠáááºááá·áºáá±áá¬ááœáẠááŒááºááááºá á¡áááºááŒá±á¬áá·áº á¡áá®áá±á¬ááºááŒá áºáááºá á ááºážáááºááŸá¯ áá¡á±á¬ááºááŒááºááá·áº á áááºááŒáá·áº áá¬ážááááºááŒá±á¬ááºáž developer áá»á¬ážá á áááºááá¯ááºááŒá¬ážáá¬ááŒáááºá
áá¯á¶á·ááŒááºáá»ááºááŸáá·áºá¡áá° ááŒá¿áá¬áá»á¬ážááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠááŸá±ážááœá±ážá
á±áá±á¬ááŒá±á¬áá·áº PR áá
áºáá¯á
á®á á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááŸááºážáááºážááŒá®áž áááºááá¯ááºááá»áŸ áááºáá±á¬ááºááẠáá»áœááºá¯ááºááá¯á· ááŒáá¯ážá
á¬ážáá²á·áááºá áá»áœááºá¯ááºááá¯á·ááẠáááºááá·áºáááºáá±á¬ááºááŸá¯á០áá¡á±á¬ááºááŒááºáá²á·ááŒá±á¬ááºážá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº PR ááá¯á· Bitbucket ááœáẠááŸááºáá»ááºáá»á¬ážááŒáá·áº á
áááºáá²á·ááŒá®áž Slack ááœáẠáá
áºááŸááºáá¬ážáá±á¬ á
á¬ááá¯áá»á¬ážááᯠáá±ážáá¬ážáá²á·áááºá á¡áá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºááŸááá¯ááºáá±á¬ááºáá±ááá·áº áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áááºážááá¯á·áá¡ááŒá±á¡áá±- áááºážá
á®áá±ááŒááºážá áááºáááºáá±ááŒááºážá áá»ááºááœá¬ážááŒááºáž ááá¯á·ááá¯áẠááŒá®ážá
á®ážááŸá¯á
á¬áááºážááŸáá·áºá¡áá° á
á¬áá»ááºááŸá¬á¡ááœáẠPR áááºááŸáºáá¯ááºáá
áºáᯠáááºáá®ážáá²á·áááºá áááºáá±á¬ááºááŸá¯ááᯠááŸáááºááŒá®áž áááºážáááŸááºáááºážááá¯á· áááºáá±á¬ááºááŸáááá¯ááºáááºá
á¡áá±ážá
áááºáá¯á¶á·ááŒááºáá»ááºá¡ááœáẠááŒá±á¬ááºáááºááŒá¬ á¡áá¯á¶ážááŒá¯áá²á·áááºá
á¡á á®á¡á ááºáá»á¬áž
áááŒá¬áá±ážáá®á áááá¯ááºážááᯠáááºááœá¬ážááŒáá«á áá¯á·á áá¯á¶á·ááŒááºáá»ááºááŒá¿áá¬ááᯠááŒá±ááŸááºážááŒá®ážáá±á¬áẠá¡ááá·áºá¡áá áºáá áºáá¯ááá¯á· áá±á¬ááºááŸááá²á·ááẠ- áá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯áẠemulator ááŒá¶ááᯠáááºáá±á¬ááºááẠáá¯á¶ážááŒááºáá²á·áááºá á ááºážáááºááŸá¯áá»á¬ážááŸáá·áº emulator áá»á¬ážá áœá¬ááŸááá±á¬á¡áá«á áááºážááá¯á·ááẠá á®áá¶ááá·áºááœá²ááẠáááºáá²áááºá ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·á emulator áá»á¬ážá¡á¬ážáá¯á¶ážááẠááŒá±á¬ááºážááœááºááŒááºááœááºááŸááá±á¬ á¡áááºážá¡ááŒá áºá á®áá¶ááá·áºááœá²ááŸá¯ááŒáá·áº k8s á¡á á¯á¡áá±ážááá¯á· ááŒá±á¬ááºážááœáŸá±á·áá²á·áááºá
ááá¯á·á¡ááŒáẠá¡ááŒá¬ážáá±á¬ á¡á á®á¡á ááºáá»á¬ážáááºáž ááŸááá±ážáááºá
- Lint ááŒááºááœá¬ážáá«á (á¡ááŒá¬áž static analysis)á áá»áœááºáá±á¬áºááá¯á·á áá®áŠážáááºáá»ááºááᯠáá¯ááºáá±á¬ááºáá±ááŒá®á
- PR blocker ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáá«á á¡áá¯á¶ážá០á¡áá¯á¶áž á ááºážáááºááŸá¯áá»á¬áž SDK áá¬ážááŸááºážá¡á¬ážáá¯á¶ážááœááºá
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠAvito ááœáẠá ááºáááºáááŒáẠáá±á«ááºážá ááºážááŸá¯ ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á áááá¯ááºážááŒá±á¬ááºážááᯠááŒá±áá¬áá¶ááá¯ááºáá«ááŒá®á á¡áá¯áá»áœááºáá±á¬áºá á¡ááœá±á·á¡ááŒá¯á¶ááŸááá²á· á¡ááŒááºááá± á¡ááŒá¶á¥á¬ááºáá±áž áá±ážáá»ááºáá«áááºá
áááá±á¬ááºážá áá¬áá»á¬áž
á¡ááŒá¶áá¬ááºáá áºáá¯áá±á¬ááºáᬠáá±ážááá¯ááºááẠáá«á áá®ááá¯ááŒá áºáááá·áºáááºá
áá»á±ážáá°ážááŒá¯á shell scripts áá»á¬ážááᯠááááá¬ážáá«á
Bash ááẠá¡ááœááºááŒá±á¬ááºážááœááºááŒááºááœááºááŸáá·áº á¡á áœááºážáááºááá·áºáááááá¬áá áºáá¯ááŒá áºááŒá®áž scripts áá»á¬ážáá±ážáá¬ážáá¬ááœáẠá¡ááœááºá¡áááºááŒá±ááŒá®áž ááŒááºáááºáááºá áá«áá±ááá·áº áááºáž á¡á²áá«áá²á· áá±á¬ááºáá»á±á¬ááºáá² áá»ááœá¬ážááá¯ááºáááºá áá¶ááá±á¬ááºážá áœá¬áá²á áá«ááá¯á· á¡á²áá®áá²ááᯠáá»ááœá¬ážááá¯ááºáááºá
áááºážááẠáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºá ááºáá»á¬ážááœáẠááá¯ážááŸááºážáá±á¬ áá¬ááºááœáŸááºážáá»á¬ážááŒáá·áº á áááºáá²á·áááº-
#!/usr/bin/env bash
./gradlew assembleDebug
áá«áá±ááá·áº áááºážáááá²á·á¡ááá¯ááºážáá²á á¡áá¬á¡á¬ážáá¯á¶ážáᬠá¡áá»áááºááŒá¬áá¬áá¬áá²á·á¡áá»áŸ ááá¯ááŸá¯ááºááœá±ážáá¬ááŒá®áž - áá¬ááºááœáŸááºážáá áºáá¯ááá± áá±á¬ááºáá áºáá¯áá®ááŒá±ážááá¯ááºáá¡á±á¬ááºá á¡á²áá®ááŸá¬ ááá·áºáááºáá»ááºááá»áá¯á·ááᯠáá»á±á¬áºááœá¬ážáá¡á±á¬áẠ- á¡áá¯á¶ážááŸá¬ áá«ááá¯á·á¡áᯠbash nesting á¡ááá·áºááŸá¬ áááºá¡ááá·áºáá±á¬ááºáá±ááŒá®áá²ááá¯áá¬ááᯠáá¯á¶ážááŒááºáá²á· function áá áºáá¯ááᯠáá±ážáááŸá¬áá±á«á·á ááá¯á¡ááºáá±á¬ááá¯ážáá¬ážáá»ááºáá»á¬ážááá·áºááœááºážáááºá á¡á¬ážáá¯á¶ážá áááºáááºá
ááá¯ááá¯á·áá±á¬ áá¬ááºááœáŸááºážáá»á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠáá¯ááºá¡á¬ážáá¯ááºáá»á
ááááºááᯠáááºá
áááºáá°ážááŒáá·áºááá¯ááºáá«áááºá áá®áá±á¬ááºáá»á±á¬ááºáá²ááᯠááá»áá±á¬ááºááá¯á· á¡ááŒá¶áá±ážáá«áá
á±á
á¡áááºá¡áá¬ááᯠá¡á á¬ážááá¯ážááá¯ááºááááºážá
- áááºááá·áº scripting language ááá¯áááá¯á ááá¯á· á á¬áá±ážáá«á Python ááá¯á·ááá¯áẠKotlin Script scripts ááá¯ááºáá² programming ááŒá±á¬áá·áº ááá¯á¡áááºááŒá±áá«áááºá
- ááá¯á·ááá¯áẠáá¯á¶á á¶ááœáẠáááºáá±á¬ááºáá¬ážáá±á¬ áá±á¬á·áá»á áºá¡á¬ážáá¯á¶ážááᯠáá±á¬áºááŒáá«á á áááºááŒáá¯áẠá¡ááá·áºáá¯ááºá áá¬áá»á¬áž ááá·áºááá±á¬áá»ááºá¡ááœááºá
áá»áœááºá¯ááºááá¯á·ááẠáá¯áááááœá±ážáá»ááºááŸá¯ááᯠááœá±ážáá»ááºááẠáá¯á¶ážááŒááºáá²á·ááŒá®áž ááá¯á¡áá«ááœáẠáá»áœááºá¯ááºááá¯á·ááẠbash script áá»á¬ážá¡á¬ážáá¯á¶ážááᯠá áá áºááá» áá»ááºáᬠá áááºááŒáá¯áẠgradle áá¯ááºáá±á¬ááºá áá¬áá»á¬ážá áœá¬ááᯠáá±ážáá¬ážáá±áá«áááºá
á¡ááŒá¶ááŒá¯áá»áẠ# 2- á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá»á¬ážááᯠáá¯ááºááœáẠááááºážáááºážáá«á
Jenkins ááá¯á·ááá¯áẠTeamCity á áááºááá¯á·á UI á¡ááºáá¬áá±á·á áºááœáẠáááºááá¯ááºáá±á«ááºážá ááºážááŒááºážáááºáááºááᯠáááááºážáááºážáá¬ážáá±á¬áºáááºáž ááá±á¬áá»ááºááá¯ááŸá±á¬ááºááŸá¯ááœáẠááá¯ááºááá¯ááºá á¬áá¬ážááá¯ááºáá»á¬ážáá¯á¶á á¶ááŒáá·áº ááááºážáááºážááá·áºá¡áá« á¡áááºááŒá±áááºá áááºážááẠversionability ááá¯áá±ážáááºá á¡ááŒá¬ážáá¬áááœá²ááœáẠáá¯ááºááᯠááŒááºááááºážááẠááá¯á·ááá¯áẠáá¯ááºááᯠáááºáá±á¬ááºááẠáááºáá²áááºááá¯ááºáá«á
Script áá»á¬ážááᯠááá±á¬áá»ááºáá áºáá¯ááœáẠááááºážáááºážááá¯ááºáááºá áááºáááºážáá»ááºáá²á· áá¬áá¯ááºáááá²á
á¡ááŒá¶ááŒá¯áá»áẠ# 3- Docker ááẠáááºáááºážáá»ááºááᯠáá°áá®ááá¯ááºáááºá
áááºážááẠAndroid developer áá»á¬ážá¡á¬áž áá±áá»á¬áá±á«áẠáá°áá®áá±ážáááá·áºáááºá iOS ááœáẠáá áºáá¯áá»áŸ áááŸááá±ážáá«á áá¶ááá±á¬ááºážáá«á
á€áááºááŸá¬ jdk ááŸáá·áº android-sdk áá«ááŸááá±á¬ ááá¯ážááŸááºážáá±á¬ docker ááá¯ááºáá áºáá¯á á¥ááá¬áá áºáá¯ááŒá áºáááºá
FROM openjdk:8
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip"
ANDROID_HOME="/usr/local/android-sdk"
ANDROID_VERSION=26
ANDROID_BUILD_TOOLS_VERSION=26.0.2
# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android
&& cd "$ANDROID_HOME"
&& curl -o sdk.zip $SDK_URL
&& unzip sdk.zip
&& rm sdk.zip
&& yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses
# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
"platforms;android-${ANDROID_VERSION}"
"platform-tools"
RUN mkdir /application
WORKDIR /application
áá® Docker ááá¯ááºááá¯áá±ážááŒá®áž (áá»áŸáá¯á·ááŸááºáá»ááºáá áºáá¯ááŒá±á¬ááŒáááºá áá±ážá áá¬áááá¯áá±ááá·áº GitHub á á¡áááºááá·áºáá¯ááºáá¬ážáá²á· ááœá²áá¯ááºááá¯ááºáá¯á¶áá«áá²) áá²á· áá¯á¶ááᯠá á¯á ááºážááá¯ááºáá¬áá²á· ááẠapplication ááá¯áááºáá±á¬ááºááá¯ááºáá²á· virtual machine áá áºáá¯ááᯠáááºáááŸáááŸá¬ááŒá áºáá«áááºá Junit á ááºážáááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá«á
áááºážááᯠáá¬ážáááºááá±á¬áá±á«ááºáááá·áº á¡áááá¡ááŒá±á¬ááºážáááºážááŸá áºáááºááŸá¬ á¡ááá¯ááºážá¡áá¬ááŸáá·áº áááºááá²áá²ááá¯ááºááŸá¯ááŒá áºáááºá docker ááá¯áá¯á¶ážááŒá®ážá áááºááẠááááºáá áºáá¯ááŸáá·áº á¡ááá¡áá»áá°áá®áá±á¬áááºáááºážáá»ááºááŸáááá·áº áááºáá±á¬ááºá¡á±ážáá»áá·áºáá áºáá«áááºááᯠáá»ááºááŒááºá áœá¬ááŒá¯á á¯áá»áá¯ážáá±á¬ááºááá¯ááºáá«áááºá áááºážááẠCI á¡ááºáá»ááºáá®áá¬áá»á¬ážáááááá¯ááá¯ááœááºáá°á á±áááºá android-sdk ááᯠdocker ááá¯á·ááœááºážáááºá¡áá±á¬áºáá±ážááœááºáá°áááºá ááá¯á·áá±á¬áº emulator áá»á¬ážááŒáá·áºáááºážáááºá¡áááºážáááºááá¯áááºáá²áááº- áááºá¡áááºážáááºááá¯ááŒáá¯ážá á¬ážááá«ááẠ(ááá¯á·ááá¯ááºááŒá®ážááœá¬ážáá±á¬ GitHub ááŸáá±á¬ááºááááºáá±á«ááºážáá¯ááºáá¯ááºáááº) á
á¡ááŒá¶ááŒá¯áá»áẠáá¶áá«áẠ4- á á áºáá±ážááŒááºážáá»á¬ážááẠá á áºáá±ážááŒááºážá¡ááœááºááá¯ááºáá² áá°áá»á¬ážá¡ááœáẠáá¯ááºáá±á¬ááºááŒááºážááŒá áºááŒá±á¬ááºáž ááá±á·áá«ááŸáá·áºá
ááŒááºááŒááºáááºáááºáá²á· á¡áá±ážá¡ááŒá®ážáá¯á¶ážááá±á¬á·á ááŸááºážáááºážááŒááºáá¬ážáá²á· áá¯á¶á·ááŒááºáá»ááºáᬠdeveloper ááœá±á¡ááœáẠá¡ááœááºá¡áá±ážááŒá®ážáá«áááº- áááºá¡áá¬á áá»ááºááœá¬ážááá²á áááºá ááºážáááºááŸá¯á០áá¡á±á¬ááºááŒááºáá°ážá buildlog ááᯠáááºááŸá¬ááŒáá·áºááá¯á·áááá²á
á¡ááŒá¶ááŒá¯áá»áẠ#5- á ááºáááºáááŒáẠáá±á«ááºážá ááºážááŸá¯ááᯠáá±á¬áºáá±á¬ááºááá·áºá¡áá« áááºááœá±á·áá»áá±á¬ ááá±á¬áá¬ážááŸááá«á
áááºááá·áºáá¬ážááá¯áá±á¬ á¡ááŸá¬ážá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá á¡áááºážá¡ááŒá áºáá»á¬ážá á¡áá»áááºáá»á¬ážááŸáá·áº áááºáá¯á¶ážá áœá²ááá¯áá±á¬ ááœááºáá»á°áá¬á¡áá»áááºáá»á¬ážááᯠááŸááºážááŸááºážáááºážáááºáž áá¬ážáááºáá«á á¥ááá¬á¡á¬ážááŒáá·áº á¡áá»áááºá¡ááœááºááŒá¬áá±á¬ á á áºáá±ážááŸá¯áá»á¬ážááᯠáááœááºážáá»ááºáž ááœáŸá±á·ááá¯ááºážááá¯ááºáááºá á¡ááœááºá¡áá±ážááŒá®ážáá±á¬á¡ááŸá¬ážáá»á¬ážááᯠááááºážáááá±á¬ áá°áá»á¬ážááᯠáá¯á¶ážáá áœáá·áºáá áºááá·áºáááºá
á¡ááŒá¶ááŒá¯áá»áẠ#6- á¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«á
ááᯠCloud CI ááᯠáá¶á·ááá¯ážáá±ážáá±á¬ áá¯áá¹ááá®áá»á¬ážá áœá¬ááŸááááºá
áá«á á¡áááºážáááºááœá±á¡ááœáẠáá±á¬ááºážááœááºáá²á· á¡ááŒá±áá
áºáá¯áá«á áááºáá¬áá»áŸáá¶á·ááá¯ážáááºáááá¯á¡ááºáá«á ááœá±á¡áááºážáááºáá±ážáá¯á¶á áááºááá»áŸá±á¬ááºááœáŸá¬ááá¯áááºáá±á¬ááºááŒá®ážáááááá¬áááºáá¬ááá¬á
á
áºáá±ážááŸá¯áá»á¬ážááá¯áááºáá¯ááºáá±á¬ááºáá«á
á¡ááŒá¶ááŒá¯áá»áẠ# 7- á¡ááœá²á·ááŒá®ážáá áºáá¯ááœááºá á¡áááºááœááºážááŒá±ááŸááºážáá»ááºáá»á¬ážááẠááá¯ááá¯á¡áá»áá¯ážá¡ááŒááºáá»á¬ážáááºá
ááá¯á·áá±á¬áº áááŒá¬áá® ááá¯á·ááá¯áẠáá±á¬ááºááá¯ááºážááœááºá á¡ááœá²á·ááŒá®ážááœá¬ážáá¬áááºááŸáá·áºá¡áá»áŸá á¡áááºááœááºážááŒá±ááŸááºážáá»ááºáá»á¬ážááẠááá¯ááá¯á¡áá»áá¯ážá¡ááŒááºáá»á¬ážáá¬áááºá áá®áá¯á¶ážááŒááºáá»ááºááœá±áá²á· áááºáááºááŒá®áž ááŒá¿áá¬áá áºáá¯ááŸááááºá á á®ážááœá¬ážáá±ážááœáẠá¡ááŒááºá¡á áœááºážááᯠáá»áŸá±á¬á·áááºážá á±ááá·áº á¥ááá±áá áºáᯠááŸááááº- áááºááá·áºááá±á¬áá»ááºááœááºáááá¯á áá±á¬ááºáááºááœá²ááá¯ážáááºááŸá¯áá áºáá¯á á®ááẠááá¯áááá¯ááááºáá²áá¬ááŒá®áž áááºážááŸá®ážááŒáŸá¯ááºááŸá¶ááŸá¯ ááá¯áá»á¬ážáá¬ááẠááá¯á¡ááºáá«áááºá
Continuous Integration á¡áá«á¡ááẠáá»áœááºá¯ááºááá¯á·á áááá áºáá¯áá¯á¶ážááᯠEconomics á áá±á¬áºááŒáááºá áá»áœááºá¯ááºááá¯á·á á ááºáááºáááŒáẠáá±á«ááºážá ááºážááŸá¯ ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž á¡ááá·áºáá áºáá¯á á®á¡ááœáẠáá¯ááºáá¬ážá ááááºáá»á¬áž á¡áá»áááºááá¬ážááᯠáá»áœááºá¯ááºáááºáá±á¬ááºáá²á·áá«áááºá
ááá¯ážáááºááŸá¯ááá¯ááºážááẠááá¯áááá¯ááááºáá²áá¬áááºááŸá¬ áááºááŸá¬ážáá«áááºá á€ááááºááá¯ááŒáá·áºáá»áŸáẠá¡áááºážá¡ááœááºá¡á
á¬ážááŒá®ážááœá¬ážááŸá¯ááŸáá·áºá¡áá® á
ááºáááºáááŒááºáá±á«ááºážá
ááºážááŸá¯ááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºááẠááá¯á¡ááºááŒá±á¬ááºáž áááºáá¬ážáááºááá¯ááºáá«áááºá áá°ááŸá
áºáŠážáá«áá±á¬ á¡ááœá²á·áá
áºááœá²á·á¡ááœááºá á¡ááœááºážááá¯ááºáž emulator ááŒá¶ááᯠáááºáá±á«ááºáž 50 áá¯á¶ážá
áœá²ááŒááºážááẠáá±á¬áºáá¯á¶áááºáá¯á¶ á
áááºáá°ážáá
áºáá¯ááŒá
áºáááºá ááá¯á·áá±á¬áº áá
áºáá»áááºáááºážááœáẠá¡áááºážááŒá®ážáá
áºáá¯á¡ááœááºá áááºááá¯ááºáá±á«ááºážá
ááºážááŒááºážááᯠáá¯á¶ážáááá¯ááºááŒááºážááẠáá±á«ááºážá
ááºážááŒááºážááŒá¿áá¬áá»á¬ážá áááºááœááºáá±ážááᯠááŒá¯ááŒááºááŒááºážá
áááŒáá·áº ááŒá
áºáá±á¬ááŒá±á¬áá·áº á¡ááŒá¶á¥á¬ááºáá±á¬ááºážáá
áºáá¯áááºážááŒá
áºáááºá á¡áá»áááºááá¯ááŒá¬áááá·áºáááºá
áá°ááœá±á áá±ážááŒá®ážáááºá á¡ááŸá¬ážáá¯ááºáááºáááºá áá»ááºážáá²á·á¡ááœááºááŒá±á¬áá·áº á¡ááá¯á¡áá»á±á¬ááºá áá áºááá¯ááẠááá¯áá²á· á¡áá°á¡ááá²á· á áááºáá²á·áááºá áá«áá±ááá·áº áá°ááœá±áááºáž á¡ááá¯á¡áá»á±á¬áẠááœááºáá¬áááºá ááá¯á·ááŒá±á¬áá·áºá áá°áá®áá±á¬ááŒá¿áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááẠautomation ááŸáá·áºáááºááá¯ááºáááºá
- Automation á áá±ážááŒá®ážáááºá á¡áá¯ááºáá»áááºááá¬ážááᯠááŸááºáá¬ážáá«á
- automation áá²á·áááºáááºáá¬ááẠáá°ááœá±á á¡ááŸá¬ážááœá±áá¯ááºááŒáááºá
- áá áºáá«ááá¶ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááẠááá¯áááºážá¡ááá¯ááºáž áá¯ááºáá±á¬ááºáá±á¬ááŒá±á¬áá·áº á¡ááá¯á¡áá»á±á¬ááºááŒááºáá¯ááºááẠá¡ááœááºáá»ááºážáááºá á¡áááºááŒá±á¬áá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážááᯠááá¯ážáááºá á±ááááºážá á¡áááºááŒá±á¬áá·áº á€á¡áááºáááŒáẠáá±á«ááºážá ááºážááŒááºáž
áá«áá±ááá·áº áá»áœááºáá±á¬á·áºááŸá¬ á á¬áááºážááá¬ážááœá±ááŸááááº- á ááºážáá±ážááœá²ááœá±áá²á· 20% ááŸá¬ á¡ááŸá¬ážá¡ááœááºážááœá± ááœá±á·áááºá áá»áœááºá¯ááºááá¯á·á developer áá»á¬ážááẠáá¯ááºááᯠáá¶á·áá»ááºážá áœá¬ áá±ážáá¬ážááŒááºážááŒá±á¬áá·áº ááá¯ááºáá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº developer áá»á¬ážááẠá¡ááŸá¬ážá¡ááœááºážáá áºáá¯áá¯áá¯ááºáááá«áá áááºážááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠááŒá®ážáá¯á¶ážáááºááá¯ááºááŒá±á¬ááºážá áááºážááᯠá¡ááá¯á¡áá»á±á¬ááºá á áºáá±ážááŸá¯áá»á¬ážááŒáá·áº áááºážáááááá·áºáááºáᯠáá¯á¶ááŒááºáá±á¬ááŒá±á¬áá·áºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá developer áá»á¬ážááẠáá±áá¡ááá¯áẠáá áºáá¯áá¯ááᯠáá¯ááºáá±á¬ááºááŒááºážááŸáá·áº á ááºážáááºááŒááºážááẠáá¯ááºááŸáá·áº á áááºáááºá á¬ážááœááºá¡áá¬áá»á¬ážááᯠáá±ážáá¬ážááŒááºážááẠá¡áá»áááºááá¯áá±ážááá¯ááºáááºá
á ááºáááºáááŒáẠáá±á«ááºážá ááºážááŒááºážááᯠáá±á·áá»áá·áºáá«á áá«áá±ááá·áº ááááºážááŸááá±ážáááºá
á áá¬ážáá ááºá Nikolai Nesterov ááẠáá°á·ááá¯ááºáá° áá±á¬ááºážááœááºáá±á¬ á¡á á®áááºáá¶á á¬áá»á¬ážááᯠáá±ážáá¯á¶áá¬áá áááá¯áááẠáá±á¬áºááá®á á¡ááœá²á·áááºáááºáž ááŒá áºáááºá
AppsConf ááá·áºá¡ááœáẠá¡áááá¹áá«ááºááŸááá±á¬ áááá·áºááœááºážáá»á¬ážááᯠá¡ááŒá¬ážáá°áá»á¬ážá¡á¬áž áá°áá®ááŒááºáááºáá±ážáá«áááºá áá¬ááá·áºááœááºáááá·áºá¡á á®á¡á ááºá ááŒá®ážááŒáá·áºá á¯á¶ááŸá¯ááŸáá·áº á¡áá¯á¶ážáááºááŸá¯ááᯠáá±á«ááºážá ááºáá»á¬ážááŒáá·áº á¡áá²ááŒááºááá¯ááºáá«áááºáá¡áá»áááºááá¬áž . á¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážá¡ááœáẠá§ááŒá®á 22-23 áááºáá±á·áá¯áẠInfospace ááá¯á· áá¬áá«á
source: www.habr.com