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$ • DeNA2-+,&$ !"*.(' 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 • "( !)148 • 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.962%" 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

D1H • 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%/E10 • 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 • #'"):C95G- • #'#H@") • Unity Cloud Build Bitrise % )!,182 • !& 4I) 0 • αβH@") • % )!<=>/*3;?82 • F?") • % )!<=>/*3;?82 • $([email protected] 56 4

Slide 57

Slide 57 text

57

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

59 End.