JavaRush /Blog Java /Random-VI /Chúng tôi đang viết một dự án. Thêm SpringBoot và thiết l...
Roman Beekeeper
Mức độ

Chúng tôi đang viết một dự án. Thêm SpringBoot và thiết lập quy trình CI - "Dự án Java từ A đến Z"

Xuất bản trong nhóm
Một bài viết trong loạt bài viết về cách tạo một dự án Java (có liên kết đến các tài liệu khác ở cuối). Mục tiêu của nó là phân tích các công nghệ chủ chốt, kết quả là viết một bot điện tín. Xin chào các độc giả thân mến. Như đã mô tả ở phần trước , chúng ta sẽ đi theo đúng kế hoạch. Chúng ta đã tạo một dự án và đã đến lúc điền mã vào dự án đó. Bây giờ tất cả các vấn đề sẽ được thêm vào dưới dạng các cam kết riêng biệt. Tôi sẽ mô tả mọi thứ cần thiết ở đây. Nếu tôi bỏ sót điều gì đó hoặc không mô tả đủ rõ ràng, hãy hỏi trong phần bình luận, tôi sẽ cố gắng trả lời."Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 1

Chúng tôi viết JRTB-0M

Trong nhiệm vụ này, chúng ta cần thêm một khung SpringBoot trống cho công việc sau này. Chúng ta sẽ thực hiện việc này giống như cách chúng ta đã làm trong bài viết về SpringBoot + Flyway . Tải xuống dự án , mở nó trong IDEA và tạo một nhánh mới có tên JRTB-0 . Tôi đã mô tả cách thực hiện điều này thông qua một ý tưởng ở đây . Điều này sẽ giúp chúng ta dễ dàng theo dõi công việc sau này hơn. "Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 2Bạn có biết rằng không còn nhánh chính nữa không? Bây giờ nó được gọi là trung lập - main . Vì vậy, chúng tôi đã quen với nó. Mặc dù thành thật mà nói, chúng ta luôn có thể đổi tên nó thành master. Chúng tôi truy cập Spring Khởi tạo và tạo khung SpringBoot cho bot của mình. "Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 3Hiện tại, phiên bản boot sprint trẻ nhất được cung cấp là 2.3.7, hãy sử dụng nó. Tôi sẽ mô tả riêng các cài đặt sau:
  • Dự án: Dự án Maven - chúng tôi đã thảo luận về Maven tại đâytại đây . Vì vậy, tôi sẽ chỉ mô tả thêm những gì tôi chưa tiết lộ trong các bài viết trước. Tất nhiên là nếu có những “đốm trắng” như vậy)
  • Ngôn ngữ: Java - mọi thứ đều rõ ràng ở đây. Nếu muốn, chúng ta có thể viết lại vấn đề này trong Kotlin. Tôi vừa mua cho mình một cuốn sách Kotlin in Action, chúng ta sẽ cùng nhau học Kotlin))
  • Spring Boot: 2.3.7 - chúng tôi sử dụng phiên bản nhỏ nhất được cung cấp để loại bỏ mọi sự cố. Đây đã là một phiên bản khởi động hoàn toàn hiện đại.
Siêu dữ liệu dự án:
  • Nhóm: com.github.javarushcommunity - ở đây chúng tôi chọn miền mà nhóm kho lưu trữ của chúng tôi được lưu trữ.
  • Hiện vật: javarush-telegrambot - mô tả tối đa về dự án.
  • Tên: Javarush TelegramBot - chúng tôi sẽ viết đầy đủ tại đây.
  • Mô tả: Telegram bot cho Javarush từ cộng đồng này sang cộng đồng khác - đây là mô tả chi tiết hơn về dự án.
  • Tên gói: com.github.javarushcommunity.jrtb - ở đây bạn đã có thể sử dụng tên viết tắt cho tên dự án. Bây giờ dự án sẽ bắt đầu với gói này. Tại sao nhiều như vậy? Vì vậy, khi chúng tôi thêm các dự án khác vào đường dẫn lớp, chúng sẽ ở trong các gói khác nhau. Mỗi người theo cách riêng của họ. Điều này rất quan trọng để duy trì các nguyên tắc OOP.
  • Bao bì: Jar là tiêu chuẩn của chúng tôi)
  • Java: 11 - chúng tôi sẽ đi trước một bước. Tôi không nghĩ rằng mình sẽ sử dụng những đổi mới sau Java thứ tám, nhưng hãy để nó như vậy. Anh ấy không đòi ăn)... quyết định này sẽ mang lại cho chúng ta một quả trứng Phục sinh nhỏ trong tương lai)
Hiện tại chúng tôi sẽ không thêm bất kỳ phần phụ thuộc nào. Chúng tôi không cần điều này cho nhiệm vụ này. Sau khi điền tất cả những điều này, chúng tôi nhận được (đây là liên kết đến dự án đã tạo): "Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 4Sau khi điền xong, hãy nhấp vào TẠO và thêm tất cả nội dung bên trong kho lưu trữ vào dự án của chúng tôi. "Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 5Thêm tập tin vào dự án. Kết quả là chúng ta có một ứng dụng. Để kiểm tra xem nó đã được lắp ráp chưa, hãy đến thiết bị đầu cuối và viết: $ mvn clean package"Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 6 Nếu bạn có cái giống như ở đây, mọi thứ đều ổn: dự án đã được lắp ráp và jarnik đã sẵn sàng trong thư mục đích. Tại thời điểm này, nhiệm vụ trong mô tả đã sẵn sàng. Thật đơn giản phải không? Do đó, chúng tôi cam kết và đẩy đến chi nhánh của mình: "Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 7Chúng tôi thêm tên nhiệm vụ của mình vào đầu mô tả cam kết, để sau này sẽ rõ ràng trong khuôn khổ nhiệm vụ mà công việc đã thực hiện. Nhấp vào Cam kết và đẩy ... "Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 8Một lần nữa, chúng tôi xem xét và kiểm tra chính xác những gì chúng tôi muốn đẩy từ kho lưu trữ cục bộ sang kho lưu trữ từ xa và đảm bảo rằng mọi thứ đều ổn, hãy nhấp vào Đẩy . Bước tiếp theo của chúng ta là gì? Theo tất cả các quy tắc (có thể đọc trong bài viết này , trong phần về luồng GitHub), bạn cần tạo một yêu cầu kéo cho nhánh chính và đợi ai đó trong nhóm xem lại mã. Vì tôi chỉ có một mình nên tôi sẽ chính thức tạo một yêu cầu kéo và xem xét lại mọi thứ. Tôi truy cập trang kho lưu trữ và Github đã biết rằng chúng tôi có một bổ sung và đề nghị tạo yêu cầu kéo: "Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 9Không có trở ngại nào cho những người yêu nước (c) - chúng tôi tạo ra nó, như đã đề xuất. Chúng ta đặt nhãn, dự án giống như trên nhiệm vụ mình đang thực hiện và điền vào phần mô tả: "Dự án Java từ A đến Z": Chúng tôi đang viết một dự án.  Thêm SpringBoot và cấu hình tiến trình CI - 10Nhấp vào Tạo yêu cầu kéo .

Thiết lập quy trình CI

Chúng tôi đi đến yêu cầu kéo đã tạo: bên dưới, chúng tôi thấy rằng chúng tôi chưa được định cấu hình Tích hợp liên tục (sau đây gọi là - CI). "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 11Chà, nó chưa được cấu hình, vậy thì sao? Tại sao chúng ta lại cần CI? CI rốt cuộc là gì? Đây gần như là danh sách các câu hỏi mà chúng tôi quan tâm vào lúc này. Nói chung, CI là một quá trình liên tục hợp nhất mã vào một cơ sở mã chung và chạy bản dựng dự án trước đó. Cái gọi là build (từ tiếng Anh build). Mỗi khi chúng tôi xây dựng một dự án, chúng tôi đảm bảo rằng dự án đã được biên dịch, tất cả các thử nghiệm của nó đã vượt qua thành công, ngoài ra, sau khi xây dựng dự án, bạn có thể thêm các thử nghiệm tự động từ người thử nghiệm vào CI chạy trên bản dựng cụ thể này. Bằng cách này, chúng tôi trở nên tự tin hơn rằng những thay đổi mới hoạt động như chúng tôi mong đợi và không phá vỡ chức năng trước đó. CI cũng tốt vì nó tự động khởi động sau khi cập nhật cơ sở mã. Nghĩa là, chúng tôi đã đẩy các thay đổi của mình vào nhánh và quá trình bắt đầu - lắp ráp, kiểm tra, tự động kiểm tra và các bước khác. Nếu bất kỳ bước nào trong số này không thành công, bản dựng được coi là bị hỏng và không thể hợp nhất vào nhánh chính. Đây chính xác là những gì chúng ta sẽ làm bây giờ: chúng ta sẽ thêm các Tác vụ GitHub, tác vụ này sẽ chạy mã của chúng ta sau khi đẩy. GitHub Actions hoàn toàn phù hợp với GitHub Flow của chúng tôi, vì vậy chúng tôi sẽ sử dụng nó để tự động hóa công việc của mình. Công cụ này rất mạnh và lớn, nhưng hiện tại chúng tôi sẽ chỉ sử dụng nó để chạy bản dựng và kiểm tra xem nó đã được lắp ráp khi cần hay chưa. Để kích hoạt nó, hãy tìm nút Hành động trên trang kho lưu trữ và làm theo nó: "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 12Tìm quy trình Tích hợp liên tục mà chúng tôi cần: "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 13Nhấp vào Thiết lập quy trình công việc này. Tiếp theo, chúng tôi được đề nghị sử dụng mẫu của họ: chúng tôi hoàn toàn đồng ý, hãy làm rõ mọi thứ một chút:
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: Java CI with Maven

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Build with Maven
      run: mvn -B package --file pom.xml
Điều này chỉ ra rằng GitHub Action được gọi trong hai trường hợp:
  1. Khi một cú đẩy được thực hiện đến nhánh chính.
  2. Khi một yêu cầu kéo được tạo trong nhánh chính.
Phần công việc mô tả các bước sẽ được thực hiện. Chúng tôi chỉ có một bước - xây dựng. Nó cho thấy rằng dự án của chúng tôi sẽ được khởi chạy trong Ubuntu bằng lệnh mvn -B package --file pom.xml . Đây chính xác là những gì chúng tôi đã làm tại địa phương. Nếu bạn muốn thay đổi một cái gì đó ở đây, xin vui lòng. Tôi sẽ sử dụng mẫu này, nó sẽ đủ cho tôi. Tôi bấm vào Bắt đầu cam kết , chọn tạo một nhánh mới để cấu hình quy trình và sau đó chọn Đề xuất tệp mới . Nhưng quá trình xây dựng đã thất bại... "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 14Như bạn có thể thấy, Thất bại sau 14 giây - xây dựng. Có vẻ như đã xảy ra chuyện gì đó: chúng ta hãy chuyển sang phần lắp ráp và xem chi tiết: "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 15Nó nói rằng tôi không thể tìm thấy ký ức như vậy. Tại sao? Ahhh, chính xác, chính xác! Bởi vì chúng ta đã tạo ra những thay đổi ở nhánh master nhưng nhiệm vụ của chúng ta vẫn chưa có. Và đó là lý do tại sao anh ấy không tìm thấy bộ nhớ... Vì vậy, bây giờ chúng tôi làm như sau: chúng tôi hợp nhất dữ liệu này vào dữ liệu chính, sau đó chúng tôi hợp nhất nhánh chính vào JRTB-0, và sau đó mọi thứ sẽ ổn. Trong yêu cầu kéo với các thay đổi hành động của github, hãy nhấp vào Hợp nhất yêu cầu kéo : "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 16Và lặp lại Xác nhận hợp nhất . Tiếp theo, Github nhắc chúng tôi xóa nhánh mà chúng tôi đã làm việc. Chúng tôi không từ chối và xóa: "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 17Tiếp theo, tôi không tìm thấy trong yêu cầu kéo từ SpringBoot cách lấy các thay đổi từ nhánh chính từ trang web, vì vậy chúng tôi sẽ thực hiện thủ công thông qua IDEA.

Bước 1: Cập nhật nhánh chính vào kho lưu trữ cục bộ.

Ý tưởng là đi đến nhánh chính, nhấn ctrl + t và cập nhật nhánh chính:"Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 18

Bước 2: Hợp nhất các thay đổi từ nhánh chính sang nhánh JRTB-0.

Hãy đến JRTB-0 và hợp nhất cái chính vào đó."Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 19

Bước 3: Đẩy các thay đổi.

Nhấn ctrl + shift + k và xác nhận việc đẩy. Bây giờ chúng tôi đang đợi quá trình xây dựng hoàn tất và nó sẽ có màu xanh!)) Nhưng nó lại có màu đỏ. Nó là gì? Chúng tôi đi vào nhật ký hành động và thấy rằng chúng tôi không đồng bộ hóa trong các phiên bản Java. Trong GitHubActions, nó là 8, nhưng chúng tôi sử dụng 11: "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 20Bây giờ có hai tùy chọn: sửa các hành động hoặc hạ phiên bản xuống thứ tám. Đối với tôi, lựa chọn đầu tiên có vẻ tốt hơn và đúng hơn. Chúng tôi đang thực hiện các thay đổi trong một cam kết riêng: chúng tôi sẽ làm việc không phải với Java 8 mà với Java 11. "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 21Và sau đó, cuối cùng, mọi thứ đã ổn thỏa với chúng tôi và chúng tôi đã có thể thiết lập quy trình CI cho dự án. Những thứ như vậy cần phải được thiết lập ở giai đoạn đầu, để sau này bạn không phải lo lắng. Bây giờ bạn có thể thấy rằng quá trình xây dựng đã trôi qua và bạn có thể hợp nhất mà không cần lo lắng:"Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 22

Thiết lập công việc với các nhánh trong kho lưu trữ

Bạn cũng có thể định cấu hình những thứ như vậy trong kho lưu trữ làm quy tắc khi làm việc với các nhánh. Tôi muốn làm cho nhánh chính không thể được đẩy trực tiếp mà chỉ thông qua các yêu cầu kéo và tôi muốn làm cho nó không thể hợp nhất một yêu cầu kéo nếu quá trình xây dựng không thành công (nghĩa là, nếu GitHub Actions không thành công tại bước nào đó). Để thực hiện việc này, hãy tìm nút Cài đặt và chọn Nhánh : "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 23Hiện tại không có quy tắc nào cho các nhánh, vì vậy hãy thêm một quy tắc mới thông qua nút Thêm quy tắc : "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 24Ở đây có rất nhiều cài đặt và mọi người có thể làm điều gì đó cho phù hợp với mình. nhu cầu. Để bản dựng vượt qua thành công yêu cầu kéo trước khi hợp nhất, hãy thêm hộp kiểm vào Yêu cầu kiểm tra trạng thái để vượt qua trước khi hợp nhất và chọn trạng thái chúng ta cần - build. Bây giờ thế là đủ: sau đó bạn có thể cập nhật vô lăng này và xem bạn muốn gì nữa. Nhấn Create để tạo vô lăng này. "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 25Tiếp theo, nếu chúng ta quay lại yêu cầu kéo của mình một lần nữa, chúng ta có thể thấy rằng kiểm tra của chúng ta hiện được đánh dấu là bắt buộc: "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 26Hãy kiểm tra trang dự án của chúng ta, trang này hiển thị tất cả các trạng thái nhiệm vụ: "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 27Bạn có thể xem ngay nhiệm vụ nào đang được thực hiện. Hơn nữa, công việc đã được hoàn thành và nhiệm vụ đang ở trạng thái xem xét mã.

Đóng JRTB-0

Bây giờ chúng ta đã chuẩn bị một yêu cầu kéo và tạo CI cho nó, chúng ta cần hoàn thành giai đoạn cuối cùng: đóng tác vụ, chuyển nó về trạng thái chính xác, xem xét các thay đổi trong dự án của chúng ta trên bảng. Yêu cầu kéo của chúng tôi đã sẵn sàng để được hợp nhất vào bản gốc. Trong yêu cầu kéo, nhấp vào nút Yêu cầu kéo Hợp nhất : "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 28Sau khi hợp nhất thành công, bạn có thể xóa nó và thường làm như vậy. Tôi sẽ không làm điều này để giúp bạn dễ dàng nhìn thấy những thay đổi giữa các nhánh/cam kết hơn. Ngay sau khi một yêu cầu kéo được hợp nhất, nó sẽ tự động được thực hiện trong bảng dự án của chúng tôi: "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 29Bước cuối cùng là đóng vấn đề (vấn đề) bằng một liên kết đến yêu cầu kéo trong đó: "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 30Vấn đề này tự động được thực hiện trên Cái bảng. "Java-проект от А до Я": Пишем проект. Добавляем SpringBoot и настраиваем CI процесс - 31Sự khởi đầu đã được thực hiện, nhiệm vụ đầu tiên đã hoàn thành!

kết luận

Có vẻ như chúng tôi đã bắt đầu làm việc và viết mã, nhưng vẫn cần cài đặt. Đúng, việc này cần thời gian, nhưng nó sẽ mang lại lợi ích gấp trăm lần khi dự án trở nên lớn hơn và phức tạp hơn và bạn cần đảm bảo rằng bạn sẽ không phá vỡ mọi thứ chỉ bằng một lần cam kết. Yêu cầu kéo nơi tất cả điều này xảy ra có sẵn ở đây . Có lẽ khi bạn đọc thì nó đã bị đóng lại rồi. Điều đó không đáng sợ: tất cả thông tin cần thiết sẽ được lưu trữ thông qua liên kết. Cảm ơn tất cả các bạn đã đọc, hẹn gặp lại. Hơn nữa!

Danh sách tất cả các tài liệu trong loạt bài này nằm ở đầu bài viết này.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION