在這篇文章中,我們將向您展示如何建立交付流水線並實現以下目標:
出於本文演示目的,我們將使用託管在GitHub上的Java範例專案: github.com/buddy-red/node-maven-selenium-tests進行演示。
每次更改儲存倉時,流水線將執行以下任務:
首先,我們需要在GitHub原始碼儲存倉庫中對Buddy系統進行帳戶身份驗證:
接下來,我們新添一條流水線,並將其設定為在每次推播到主分支時自動執行:
我們指定了流水線的目標分支和觸發條件,是時候新增將執行任務的操作了。
在操作列表中Docker部分找到如下圖的構建映象
定義Dockerfile和相關聯環境(如果它與包含Dockerfile的目錄不同)。在本例中是front
:
隨著Docker映象的構建和等待,我們需要一個操作來執行測試。在構建工具 & 任務執行部分找到Maven操作或者在搜尋方塊中直接搜尋Maven:
輸入將執行測試的命令,例如:mvn clean install
:
現在,我們需要在服務分頁中新增兩個微服務,這些本質上是附加並連結到主構建容器的Docker容器。
確保設定應用程式將在其上執行的埠(本例為
80
)。這樣在應用程式成功啟動之前,Maven不會啟動測試。
設定後,該操作將執行3個相互連結的容器:Maven、Selenium和一個自定義容器。為使其工作,我們需要設定測試將連線到的Selenium伺服器以及將要執行的應用程式的地址。
在我們的應用程式中,分別在第23、30和第38行進行定義。主機名應映現在Maven操作服務中輸入的主機名:
package works.buddy.test;
import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import org.junit.Ignore;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import static org.junit.Assert.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.concurrent.TimeUnit;
public class SeleniumTest {
private WebDriver driver;
@Before
public void setUp() throws MalformedURLException {
DesiredCapabilities capability = DesiredCapabilities.chrome();
driver = new RemoteWebDriver(new URL("http://selenium-ch:4444/wd/hub"), capability);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
}
@Test
public void test1() throws Exception {
driver.get("http://myapp.com");
assertEquals("大家好!", driver.getTitle());
}
//Error
@Ignore
@Test
public void test2() throws Exception {
driver.get("http://myapp.com");
assertEquals("Hello 木日夏復!", driver.getTitle());
}
@After
public void tearDown() {
driver.quit();
}
}
主機名
hostname
主機名等變數可以在流水線中定義為環境變數。如果變數在執行時未解析,則可以使用查詢 & 替換操作來交換其值。
如果所有測試都已成功通過,則可以將映象推播到Docker註冊中心:
Buddy與Docker Hub、Amazon ECR和Google GCR進行了原生整合。您還可以將映象推播到您自己的私有註冊中心:
您可以在我們的檔案中找到有關構建和推播Docker映象的更多資訊!
映象儲存在登入檔中並準備在伺服器上釋出。使用Buddy,您可以將其部署到Kubernetes、Amazon EKS 或Azure AKS叢集,或者您可以在自己的伺服器上執行docker-compose。
相關K8s的更多資訊,請檢視關於Kubernetes叢集上的容器編排指南。
讓您的團隊知道測試失敗,或者您的客戶知道新版本正在等待審批,這些是任何軟體開發業務的關鍵,基礎上是一個持續構建 - 測試-釋出運維。Buddy原生地與最流行的通知服務整合,包括Slack,Discord和Telegram:
可以新增兩個包含不同訊息的通知:一個在主要部分中表示已成功完成的操作,另一個在測試或部署失敗時傳送於失敗部分。這樣,您就可以隨時通知QA團隊,保持資訊與狀態暢通。