Jenkins環境運用に関するSWETとしての取り組み
by
Hisashi.Iguchi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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.