Slide 1

Slide 1 text

Jenkins 2'06:3< SWET # 7 GDM vol.40  %")! Jenkins 0,:3@DeNA Fri. Jan. 31, 2020 $ +* .; &98-; &951; SWET /(!4

Slide 2

Slide 2 text

*) • $ •  1Hisashi Iguchi2@hisa9chi •  • #(    SWET Gr. •  • * /'   • CI/CD %&.0-!+," • % • CircleCI Japan User Group Community Leaders 2

Slide 3

Slide 3 text

 3 SWET Jenkins   SWET  1 4   2 3

Slide 4

Slide 4 text

 4 SWET Jenkins   SWET  1 4   2 3

Slide 5

Slide 5 text

SoftWare Engineer in Test c.f.> Google SET    5 4 3 2 1

Slide 6

Slide 6 text

6 MISSION 1)  • DeNA#/ %0$ • DeNA 2-+,&$ !"*.('    VISION MAKE TESTING FUN, SMART, AND DELIGHTING END-USERS 4 3 2 1

Slide 7

Slide 7 text

Make Testing Fun, Smart, and Delighting End-Users • Fun • '2&#    • Smart • .-9 * 15/7  •  "( !)1 48 • Delighting End-Users • ' $(%  3 ,:60' +)  7 4 3 2 1

Slide 8

Slide 8 text

8 !   ! https://swet.dena.com/about 4 3 2 1

Slide 9

Slide 9 text

 9 SWET Jenkins   SWET  1 4   2 3

Slide 10

Slide 10 text

  •  • iOS • Android • OS • Linux (Ubuntu) • macOS •    • Unity 10 1 4 3 2

Slide 11

Slide 11 text

 Jenkins *4  • :! "%51+/6 • &#-8(3 • $7.'3 • *4&$ • Xcode 4 $ • iOS,0)3 macOS "%/6 • &#%%  Unity *4 • Unity Cloud Build 7.9 62%" 11 1 4 3 2

Slide 12

Slide 12 text

Jenkins ', • &', •  +& • '$ • & master  '$! • macOS ()  12 1 4 3 2 Jenkins master -*"% .#

Slide 13

Slide 13 text

Jenkins 37 • .> • & 1 .)37 •  45!&.= • ,:'% &'% • Jenkins / Xcode / Unity / Android NDK  • %# (-)(6; • /+9 % • Jenkins 378?9 or 18?9 13 1 4 3 2 "3-8?9  $& or <2*0

Slide 14

Slide 14 text

Jenkins E< • $!,2 #'' • 1A "' F0,2 • &*>/8 • C ,2 • . plugin ')&  • slave #'' • 6 1A )&3-')& • $! %)=;7 SSH4? D9(B: • slave @+5G 14 1 4 3 2

Slide 15

Slide 15 text

Jenkins ! • slave   • "  • " • # • !  • " 15 1 4 3 2 Jenkins master macOS agent Jenkins master  macOS agent Jenkins master macOS agent macOS agent !

Slide 16

Slide 16 text

16       1 4 3 2

Slide 17

Slide 17 text

U :Z • +"/Q2WK!$'D • master / slave  /*.  • MT9KAN5KB @S • Jenkins plugin OJ • #,)OJ;Y • Jenkinsfile G$&- WebUI#,)3C • Plugin =6 >HOJ9P ?7 • 4#,)I 8K1F • XL(0%VR #,)E< OJ;Y 17 1 4 3 2

Slide 18

Slide 18 text

D ,G • slave 9=.3> • " 5F#&C: slave 7B&$%&$ • " 7BE*8<1 slave +(   18 1 4 3 2 Jenkins master macOS agent macOS agent !%% !%%; ?'4/ <1 slave +(" A60- 2@)

Slide 19

Slide 19 text

D 1H • slave E.9" • $#'0 ,47/"2G • 8F= slave <3?)65@(&;- 5@ • *A  19 1 4 3 2 Jenkins master macOS agent macOS agent ① C: macOS agent ② " ③ %!/+>B

Slide 20

Slide 20 text

B 'G •  04'G • Jenkins ,/7 !( 78   E; • Jenkins master / slave "2.D <9 • =$ -3)61  "F • =$:      %B& • A?'G •  'G • F5*C'G • *C >8# +@ 20 1 4 3 2

Slide 21

Slide 21 text

21 SWET  !     1 4 3 2

Slide 22

Slide 22 text

 22 SWET Jenkins   SWET  1 4   2 3

Slide 23

Slide 23 text

!. 1. Jenkins )% • master / slave )%$/ • master / slave(Linux)  cloud *+ 2.  1 • Jenkins master 1  • slave 1)-4Linux / macOS5 • ,3#(  3.   & • Unity + iOS / Android   & 23 1 2 4 3 2'  *+"0

Slide 24

Slide 24 text

24 1. Jenkins  1 2 4 3

Slide 25

Slide 25 text

Jenkins  •  • master - slave slave  25 1 2 4 3 macOS agent Linux agent Jenkins master macOS agent Persistent Disk GCP  JNLP 

Slide 26

Slide 26 text

Jenkins " •  • master - slave 'slave#( 26 1 2 4 3 ! JNLP macOS agent macOS agent !     %&$ Jenkins master Persistent Disk  Linux agent GCP

Slide 27

Slide 27 text

Jenkins  •  • master - slave slave 27 1 2 4 3 Linux agent Jenkins master Persistent Disk GCP  JNLP  macOS agent macOS agent   OS update 

Slide 28

Slide 28 text

Jenkins  •  • master - slave slave  28 1 2 4 3 macOS agent Linux agent Jenkins master macOS agent Persistent Disk GCP  JNLP 

Slide 29

Slide 29 text

Jenkins   •  • master - slave #slave $ 29 1 2 4 3 macOS agent Linux agent Jenkins master macOS agent Persistent Disk GCP  JNL P  "    !

Slide 30

Slide 30 text

30 " #   !   1 2 4 3

Slide 31

Slide 31 text

31 2.   1 2 4 3

Slide 32

Slide 32 text

master ' % •   • ubuntu: GCP Terraform # • Jenkins    • Ansible    • #  • https://github.com/Kuniwak/jenkins-plugin-fixator "# • $(# influxDB / Telegraf / Chronograf / Kapacitor •    /   • GCP     !&"# 32 1 2 4 3

Slide 33

Slide 33 text

slave /!%- •  # • macOS: &'  mac mini *3. • ubuntu: GCP Terraform (# •   • Ansible   • +"1 • Unity / Xcode / Android NDK 0$  •  slave ,' • )2( Telegraf   33 1 2 4 3

Slide 34

Slide 34 text

slave /!%- •  # • macOS: &'  mac mini *3. • ubuntu: GCP Terraform (# •   • Ansible   • +"1 • Unity / Xcode / Android NDK 0$  •  slave ,' • )2( Telegraf   34 1 2 4 3 # for rbenv role install_ruby_versions: - 2.4.5 - 2.5.1 - 2.6.1 global_ruby_version: 2.5.1 # for xcode role xcode_clean: true xcode_versions: - '10.1' default_xcode_version: '10.1' # for android role android_versions: - 25 - 26 - 27 - 28 build_tools_versions: - 25.0.3 - 26.0.2 - 27.0.3 - 28.0.3 # for unity role unity_versions: - 2018.3.3f1 # for jenkins_slave jenkins_slave_name: 'o-12778-mac' jenkins_slave_secret: !vault | $ANSIBLE_VAULT;1.1;AES256 3932356633663834333631663634353731656

Slide 35

Slide 35 text

slave #' • ) • +!    , ) • *"%  *( • https://plugins.jenkins.io/app-detector $& 35 1 2 4 3

Slide 36

Slide 36 text

slave IA • $" 9G#$"$ • ?C; *A Ansible 2F • slave  B@#$"!<9(2F • #$"!<946%/E 10 • 8,#$" -> &>'3 #- • 5 Ansible .: • D746 =) Ansible H+ 36 1 2 4 3

Slide 37

Slide 37 text

37 3.    1 2 4 3

Slide 38

Slide 38 text

Jenkins pipeline % #!/' •  "#% #! • % #*9 3-2)56 • +8 0 .172)56  • (;4: Jenkins Shared Library  /' •  "<,& $& 38 1 2 4 3

Slide 39

Slide 39 text

39 Jenkins      1 2 4 3

Slide 40

Slide 40 text

40     1 2 4 3

Slide 41

Slide 41 text

41  1 2 4 3

Slide 42

Slide 42 text

42 TASK [xcode : Install Xcode (NOTE: This task take a long time. And, it doesn‘t work when Two-Factor Authentication is enable. If you want to check progress, do `sudo tail -f /private/var/root/Library/Caches/XcodeInstall/progress.*`)] *** failed: [unity-macos-1014] (item=11.1) => changed=true cmd: - /var/root/.gem/ruby/2.5.0/bin/xcversion - install - ’11.1’ delta: ‘0:14:18.084891’ end: ‘2019-12-15 20:05:30.908344’ item: ‘11.1’ msg: non-zero return code  1 2 4 3   

Slide 43

Slide 43 text

Ansible Playbook !/' • Xcode Unity ! ! • Xcode • !$, xcode-install 0' •  !.#)* • Unity •  !(+ • !1 Unity Hub (+ • !!  • brew  java8 % ruby  !"&- 43 1 2 4 3

Slide 44

Slide 44 text

44  CI    1 2 4 3

Slide 45

Slide 45 text

Ansible Playbook &" • OS Vagrant Box(  )  •      '$ • Test Kitchen ! •   -> Ansible Playbook $ -> % #  $ 45 1 2 4 3

Slide 46

Slide 46 text

 46 SWET Jenkins   SWET  1 4   2 3

Slide 47

Slide 47 text

 ) 1.  ( 1.  %& 2. Jenkins  CI*" 2. +' $ !# 47 1 2 3 4

Slide 48

Slide 48 text

48 1.   1 2 3 4

Slide 49

Slide 49 text

1 2 3 #47 • # ,< 30 • macOS ?56" # 47 • MacStadium • CI# 47 • Jenkins  % # 47 • Bitirse • !# Unity #=8 +;@ https://blog.bitrise.io/bitrise-in-2019-a-roadmap-preview .: /-1& *($ • CircleCI • #' >92)47,< 49 4

Slide 50

Slide 50 text

Jenkins   50 macOS agent Linux agent Jenkins master macOS agent GCS GCP   MacStadium macOS agent 1 2 3 4 macOS agent macOS agent Linux agent Cloud CI Bitrise CircleCI

Slide 51

Slide 51 text

Jenkins   51 Linux agent Jenkins master GCS GCP  MacStadium macOS agent 1 2 3 4 macOS agent macOS agent Linux agent Cloud CI Bitrise CircleCI macOS agent macOS agent    PR 

Slide 52

Slide 52 text

Jenkins  52 macOS agent Linux agent Jenkins master macOS agent GCS GCP   1 2 3 4 Linux agent Cloud CI Bitrise CircleCI MacStadium macOS agent macOS agent macOS agent  cron   

Slide 53

Slide 53 text

Jenkins  53 macOS agent Linux agent Jenkins master macOS agent GCS GCP   MacStadium macOS agent 1 2 3 4 macOS agent macOS agent Linux agent Cloud CI Bitrise CircleCI  

Slide 54

Slide 54 text

Jenkins   54 macOS agent Linux agent Jenkins master macOS agent GCS GCP   MacStadium macOS agent 1 2 3 4 macOS agent macOS agent Linux agent Cloud CI Bitrise CircleCI

Slide 55

Slide 55 text

55 2.    1 2 3 4

Slide 56

Slide 56 text

1 2 3 CI>/ C9JE67D,K • #' "): C9 5G- • #'#H@") • Unity Cloud Build  Bitrise % )!,1 82 • !& 4I) 0  • αβH@") • % )!<=>/*3;?82 • F?") • % )!<=>/*3;?82 • $( +BH@.A82 56 4

Slide 57

Slide 57 text

57 

Slide 58

Slide 58 text

  • .(OH P0 Jenkins B<K7BJ • Terraform / Ansible DG • macOS 28 GCP/ BJ • Jenkins B< ?6DG4 -&,)% =5 • BJG +&"*.>@AI • CI 73AM • 1:*#.$ DG .*$+!Q • N9;L -> EF'- • N9 C   -> *#.$ 58

Slide 59

Slide 59 text

59 End.