CI/CD ΡΠ±ΠΎΡΠΊΠ° Maven
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ CI/CD Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Java-ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Maven.
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ Π²Π΅ΡΠΊΠ° maven-build Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ CICD_building_projects (ΡΠΌ. ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ gitverse_tutorials/CICD_building_projects, Π²Π΅ΡΠΊΠ° maven-build).
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, CICD_building_projects.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Java Development Kit (JDK). ΠΠ° Ubuntu:
sudo apt update
sudo apt install default-jdkΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Java ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½:
javac -version- Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ°Π½Π½Π΅Ρ GitVerse ΠΈ ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌ:
chmod +x act_runner- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Docker (Π΅ΡΠ»ΠΈ Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½).
- Π Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ CI/CD, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΠ°ΠΏΡΠΎΡΡ Π½Π° ΡΠ»ΠΈΡΠ½ΠΈΠ΅.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Apache Maven. ΠΠ° Ubuntu:
sudo apt update
sudo apt install mavenΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ:
mvn -versionΠΠΎΠ»ΠΆΠ½Π° ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π΅ΡΡΠΈΠΈ Maven ΠΈ ΡΡΠ΅Π΄Π΅ Java.
HelloWorld.java
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ src/main/java/ru/gitverse/tutorials/helloworld ΡΠ°ΠΉΠ» HelloWorld.java ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:
package ru.gitverse.tutorials.helloworld;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π·Π°ΠΏΡΡΠΊ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
java src/main/java/ru/gitverse/tutorials/helloworld/HelloWorld.javaΠ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Hello, World!.
pom.xml
pom.xml β ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Maven, Π³Π΄Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°: groupId, artifactId, version, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ Ρ.Π΄.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ru.gitverse.tutorials</groupId>
<artifactId>hello-world-module</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<repositories>
<repository>
<id>gitverse</id>
<url>https://gitverse.ru/api/packages/author/maven/</url>
</repository>
</repositories>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<distributionManagement>
<repository>
<id>gitverse</id>
<url>https://gitverse.ru/api/packages/author/maven/</url>
</repository>
<snapshotRepository>
<id>gitverse</id>
<url>https://gitverse.ru/api/packages/author/maven/</url>
</snapshotRepository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>ru.gitverse.tutorials.helloworld.HelloWorld</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>ΠΠ»Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ° pom.xml ΡΠΌ. ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Maven-ΠΏΠ°ΠΊΠ΅ΡΠ° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ GitVerse.
Π€Π°ΠΉΠ» pipeline: javaMavenBuildDemo.yaml
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» javaMavenBuildDemo.yaml Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ .gitverse/workflows/ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° β ΡΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ CI/CD, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΡΠ±ΠΎΡΠΊΡ Maven.
ΠΠΎΠ΄ ΡΠ°ΠΉΠ»Π°:
name: Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° Maven
on:
push:
jobs:
build-test:
name: Maven Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3 # ΠΠ»ΠΎΠ½ΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
- name: Set Git user email and name
run: |
git config --local user.email "author@gitverse.ru"
git config --local user.name "author"
- name: Install Maven
run: |
apt-get update
apt-get -y install maven
- name: Build Maven package
run: |
mvn clean package
- name: Push to remote branch
run: |
git checkout -b new-maven-build-branch
git add .
git commit -m "Added"
git push origin new-maven-build-branch --forceΠ‘ΡΡΡΠΊΡΡΡΠ° ΡΠ°ΠΉΠ»Π°:
name: Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° Mavenβ ΠΈΠΌΡ workflow, ΠΎΡΡΠ°ΠΆΠ°ΡΡΠ΅Π΅ ΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°.on: pushβ ΡΡΠΈΠ³Π³Π΅Ρ: workflow Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΈ push Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.jobs:β Π½Π°ΡΠ°Π»ΠΎ ΡΠΏΠΈΡΠΊΠ° Π·Π°Π΄Π°Ρ (jobs).build-test:β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π°Π΄Π°ΡΠΈ.name: Maven Buildβ ΠΈΠΌΡ (ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠ΅) Π·Π°Π΄Π°ΡΠΈ.runs-on: ubuntu-latestβ Π·Π°Π΄Π°ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° ΠΎΠ±Π»Π°ΡΠ½ΠΎΠΌ ΡΠ°Π½Π½Π΅ΡΠ΅ Ρ ΠΠ‘ Ubuntu.steps:β Π½Π°ΡΠ°Π»ΠΎ ΡΠΏΠΈΡΠΊΠ° ΡΠ°Π³ΠΎΠ² Π²Π½ΡΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ:uses: actions/checkout@v3β ΡΠ°Π³, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ checkout (ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ).name: Set Git user email and nameβ ΡΠ°Π³, Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Git:run: ...β ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΠΉ ΡΠΊΡΠΈΠΏΡ:git config --local user.email "author@gitverse.ru"β Π·Π°Π΄Π°Π΅Ρ email ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Git.git config --local user.name "author"β Π·Π°Π΄Π°Π΅Ρ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Git.name: Install Mavenβ ΡΠ°Π³ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Maven:run: ...β ΡΠΊΡΠΈΠΏΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ:apt-get updateβ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².apt-get -y install mavenβ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Maven Π±Π΅Π· ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ.name: Build Maven packageβ ΡΠ°Π³ ΡΠ±ΠΎΡΠΊΠΈ Maven-ΠΏΠ°ΠΊΠ΅ΡΠ°:run: ...β ΡΠΊΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ:mvn clean packageβ ΠΎΡΠΈΡΡΠΊΠ° ΠΈ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Maven.name: Push to remote branchβ ΡΠ°Π³ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Π²Π΅ΡΠΊΡ:run: ...β ΡΠΊΡΠΈΠΏΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ:git checkout -b new-maven-build-branchβ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΠΊΡ.git add .β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.git commit -m "Added"β ΠΊΠΎΠΌΠΌΠΈΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.git push origin new-maven-build-branch --forceβ ΠΏΡΡΠΈΡ Π²Π΅ΡΠΊΡ (Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΡ ΠΈΡΡΠΎΡΠΈΠΈ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ).