4. Continuous Integration
Định nghĩa
CI là quá trình tích hợp các phiên bản mã nguồn của các lập trình viên
trên một bản chính thường xuyên.
Các bước cơ bản
• Đẩy code lên source control.
• Kiểm tra convention tự động.
• Đóng gói, đẩy code lên môi trường tạm thời.
• Chạy test tự động, phát hiện lỗi nếu có.
Kết quả
Đảm bảo mã nguồn được tích hợp vào bản chính luôn thoả mãn yêu
cầu về convention và hạn chế phát sinh code degration.
Tích hợp liên tục
Source: https://developers.redhat.com/blog/2017/09/06/continuous-integration-a-typical-process/
5. Tại sao nên sử dụng CI với
Salesforce Development?
6. Tại sao nên sử dụng CI với Salesforce Development?
2
3
1 Version Control (+ SFDX)
Đảm bảo source deploy được
Tự động hoá unit test
Source: https://www.soliantconsulting.com/blog/salesforce-continuous-integration/
8. Jenkins CI
2
3
1
Platform Agnostic, Self-Contained, Free Open Source CI Server
Dễ cài đặt và cấu hình
Khả năng mở rộng
Source:
https://www.simplilearn.com/tutorials/jenkins-tutorial/what-is-jenkins
https://dzone.com/articles/how-to-setup-scalable-jenkins-on-top-of-a-kubernet
9. Jenkins CI
Hướng dẫn chính thức của Salesforce:
https://developer.salesforce.com/docs/atlas.en-
us.sfdx_dev.meta/sfdx_dev/sfdx_dev_ci_jenkins.htm
Source:
https://www.simplilearn.com/tutorials/jenkins-tutorial/what-is-jenkins
https://dzone.com/articles/how-to-setup-scalable-jenkins-on-top-of-a-kubernet
10. Jenkins CI
Hướng dẫn của Hiếu:
•Cài đặt Jenkins CI
•Chuẩn bị môi trường cho Jenkins
•Tạo Private Key và Certificate File cho JWT Authentication Flow
•Tạo Conntected App ở môi trường org DevHub
•Chuẩn bị Jenkinsfile
•Thiết lập Jenkins và project
•Tạo Github webhook để tự động kích hoạt Jenkins
Source:
https://www.simplilearn.com/tutorials/jenkins-tutorial/what-is-jenkins
https://dzone.com/articles/how-to-setup-scalable-jenkins-on-top-of-a-kubernet
11. Cài đặt Jenkins CI
Build Docker image từ dockerfile
https://gist.github.com/kagoromo/6ac88cab9351
8f6ad75e8c2cfb1c4d2c
Chạy dòng lệnh như comment.
12. Cài đặt Jenkins CI
Tìm password khởi tạo từ Container
Log trong Docker
Copy password từ Container Log.
13. Cài đặt Jenkins CI
Thiết lập ban đầu Jenkins từ giao diện
web
Giao diện web của Jenkins có ở:
http://localhost:8080/
Nhập password ở bước trước.
Continue.
Chọn Recommended Plugins.
Continue.
14. Cài đặt Jenkins CI
Thiết lập ban đầu Jenkins từ giao diện
web
Giao diện web của Jenkins có ở:
http://localhost:8080/
Nhập password ở bước trước.
Continue.
Chọn Recommended Plugins.
Continue.
15. Cài đặt Jenkins CI
Tạo tài khoản Admin
Nhập thông tin đăng nhập tuỳ ý.
Save and Continue.
16. Cài đặt Jenkins CI
Tạo tài khoản Admin
Nhập thông tin đăng nhập tuỳ ý.
Save and Continue.
17. Chuẩn bị môi trường cho Jenkins
Tạo Private Key và Certificate File cho
JWT Authentication Flow
https://developer.salesforce.com/docs/atlas.en-
us.sfdx_dev.meta/sfdx_dev/sfdx_dev_auth_key_
and_cert.htm
18. Chuẩn bị môi trường cho Jenkins
Tạo Connected App ở môi trường org
DevHub
https://developer.salesforce.com/docs/atlas.en-
us.sfdx_dev.meta/sfdx_dev/sfdx_dev_auth_conn
ected_app.htm
19. Chuẩn bị môi trường cho Jenkins
Chuẩn bị Jenkinsfile
• Jenkinsfile có thể được coi như là kịch bản của
CI workflow
• Jenkinsfile đặt ở directory gốc của repo (cùng
tầng với .git)
• Nội dung Jenkinsfile gồm nhiều bước, thực tế
khi thực hiện các tác vụ bằng tay như thế nào
thì trong Jenkinsfile cũng định nghĩa tương tự.
Jenkinsfile + Sample Github repo:
https://github.com/kagoromo/sfdx-jenkins-
package/blob/master/Jenkinsfile
20. Thiết lập Jenkins và project
Thiết lập Global properties
Là các biến được sử dụng trong Jenkinsfile
21. Thiết lập Jenkins và project
Định nghĩa toolbelt SFDX cho Jenkins
Workflow cần SFDX để chạy.
Định nghĩa custom tool để Jenkins có thể gọi
được SFDX.
*Thêm plugin Custom Tools từ Manage Jenkins >
Plugin Manager nếu chưa có.
22. Thiết lập Jenkins và project
Định nghĩa Credentials
Credentials ở đây hiểu là:
・ server.key file dùng trong JWT
Authentication Flow để Jenkins đăng nhập
vào SF DevHub org.
・ Github Personal Access Token để Jenkins
có thể đăng nhập vào Github.
https://docs.github.com/en/github/authentic
ating-to-github/creating-a-personal-access-
token
23. Thiết lập Jenkins và project
Tạo project
Sử dụng Multibranch Pipeline để Jenkins tự động
scan tất cả các branch có thay đổi và chạy test.
24. Thiết lập Jenkins và project
Tạo project
Tối thiểu cần chỉ định Github Credential, địa chỉ
Github repo.
Một cấu hình hay gặp là khi code được đẩy lên source control (ví dụ thông qua PR của Github) thì hệ thống CI sẽ được kích hoạt.
Bước đầu tiên của quá trình CI thường là việc check code convention, linting v.v... các loại phân tích code mà không cần deploy.
Sau đó, CI workflow đóng gói và đẩy code lên một môi trường test. Môi trường test này có thể được sinh mỗi lần chạy test để đảm bảo các yêu cầu để code chạy được thoả mãn, cũng như tránh các hoạt động khác ảnh hưởng đến kết quả test.
Tiếp theo, CI workflow thực hiện chạy test trên code vừa được deploy. Pass test nghĩa là code đã đặt yêu cầu và có thể được đóng gói và chuyển đến cho khách hàng.
Nếu fail ở bất kỳ bước nào, lập trình viên cũng sẽ cần phải xác nhận kết quả CI workflow và sửa lại code.
CI yêu cầu version control nên quá trình dev sẽ phải thích nghi với việc sử dụng version control.
Source of truth chuyển từ bản thân org sang version control.
Khuyến khích developer đưa chỉ những metadata cần thiết cho project hiện tại vào version control.
Khả năng backup/review code
Nhiều developer làm việc cùng lúc trên cùng một code base mà ko sợ gặp conflict.
Các ưu điểm trên nói chung đều nhờ có sự hỗ trợ của sfdx
Ai đã có động chạm đến salesforce metadata chắc đều biết là có nhiều lý do làm cho một version của source code không deploy được lên org
CI bắt được lỗi khi deploy và yêu cầu developer sửa ngay để đảm bảo code sau khi đã merge vào VC thì luôn có thể deploy được lên một org mới để dev
CI có thể chạy unit test tự động để bắt các loại lỗi syntax hoặc failed test, đảm bảo đạt yêu cầu code coverage cho packaging
Jenkins chạy trên Windows, MacOS, Unix Ubuntu vv...
Cấu hình thông qua giao diện web, có thể kết nối đến server thông qua internet, không nhất thiết phải cài đặt ở local
Nhiều plugin, mở rộng tính năng của Jenkins.
Dễ dàng phân phối thông qua Docker.
Scalability với Kubernetes (cái này mình chưa có cơ hội động vào nên nói lý thuyết thôi nhé)
Jenkins sử dụng cấu trúc Master - Slave, nghĩa là một Master server có thể đẩy công việc cho nhiều môi trường Slave khác.
Mục đích là để build, test sản phẩm cho nhiều version của code, nhiều môi trường hardware/OS khác nhau
Kubernetes là platform quản lý các môi trường đóng gói (container), có khả năng deploy, mở rộng nhiều container từ một
Có thể chạy Jenkins Slave trên Kubernetes Sandbox