أتمتة النسخ الدلالية باستخدام Maven (SemVer GitFlow Maven)

هل تستخدم نهجًا دلاليًا للتحكم في الإصدار؟ هل تستخدم gitflow؟ أنت على الأرجح على دراية بعملية تعديل الإصدارات ، وإنشاء الفروع ، والدمج من الرئيسي / المطور ، وإعادة ضبط الإصدارات ، والتعامل مع تعارضات الدمج ، ...



في هذه المقالة ، سأشرح بإيجاز عملية الإصدار التي نستخدمها أساسًا لمكتباتنا وكيف قمنا بأتمتة ذلك. عادة ما نستخدم نهج CI / CD باستخدام أرقام البناء ، ولكن بالنسبة لمكتباتنا اخترنا استخدام الإصدارات الدلالية. واجهت عملية الإصدار المملة التي ترافق هذا في العديد من الشركات والآن وجدت حلاً أخيرًا.



هذه المقالة تدور حول Maven ، ولكن هناك العديد من البدائل لـ Gradle أيضًا .



يمكن العثور على نموذج مشروع على صفحة GitHub الخاصة بنا .



الإصدار الدلالي و Git



الإصدار الدلالي هو نظام التصنيف لإصداراتك. أنا متأكد من أنك رأيت أرقام إصدارات مثل 1.6.4 و 1.7.10 و 1.12.2 وغيرها. تمثل هذه الأرقام MAJOR.MINOR.PATCH (MAJOR.MINOR.PATCH)



بالإضافة إلى ذلك ، هناك إصدارات من برنامج SNAPSHOT تبدو متشابهة ، ولكن مع إضافة "-SNAPSHOT" في النهاية ، على سبيل المثال 1.14.4-SNAPSHOT.



تتكون عملية الإصدار النموذجية من الخطوات التالية:



  1. إنشاء فرع تحرير من فرع التطوير (من الآن فصاعدًا فرع التطوير).
  2. قم بتغيير الإصدار في جميع ملفات pom.xml من SNAPSHOT (1.2.3-SNAPSHOT) إلى غير SNAPSHOT (1.2.3) في فرع الإصدار.
  3. قم بترقية إصدار SNAPSHOT في فرع التطوير (1.2.4-SNAPSHOT).
  4. عندما ينتهي كل شيء من أجل التحرير ، ادمج فرع التحرير في الفرع الرئيسي. هذا هو الإصدار الحالي.
  5. دمج الفرع الرئيسي أو فرع التحرير مرة أخرى إلى فرع التطوير.


/ , : , , .



, , . , merge .



?



  • , .
  • master SNAPSHOT.
  • CI, .
  • merge .
  • hotfixes ( master ).


gitflow-maven



, maven, pom.xml. . , .



, , . , . , : gitflow-maven-plugin.



, :



  • .
  • release .
  • hotfix.
  • (Merging) .


, . , CI/CD, , .



, (goals) maven. , .



:



, .



$ mvn gitflow:release-start -B


release (-B Batch Mode)



$ mvn gitflow:release


. master .



, , .



$ mvn gitflow:hotfix-start -B


$ mvn gitflow:hotfix-finish -B -DhotfixVersion=1.8.9b 


hotfix master , 1.8.9b . . - , .





, poms:



<build>
    <plugins>
        <plugin>
            <groupId>com.amashchenko.maven.plugin</groupId>
            <artifactId>gitflow-maven-plugin</artifactId>
            <version>1.13.0</version>
            <configuration>
                <!-- optional configuration -->
            </configuration>
        </plugin>
    </plugins>
</build>


GitHub maven central.



GitHub. :



<configuration>
    <!-- We use maven wrapper in all our projects instead of a local maven installation -->
    <mvnExecutable>./mvnw</mvnExecutable>

    <!-- Don’t push to the git remote. Very useful for testing locally -->
    <pushRemote>true</pushRemote>

    <!-- Set to true to immediately bump the development version when creating a release branch -->
    <commitDevelopmentVersionAtStart>false</commitDevelopmentVersionAtStart>

    <!-- Which digit to increas in major.minor.patch versioning, the values being 0.1.2 respectively.
         By default the rightmost number is increased.
         Pass in the number via parameter or profile to allow configuration,
         since everything set in the file can't be overwritten via command line -->
    <versionDigitToIncrement>${gitflowDigitToIncrement}</versionDigitToIncrement>

    <!-- Execute mvn verify before release -->
    <preReleaseGoals>verify</preReleaseGoals>
    <preHotfixGoals>verify</preHotfixGoals>

    <!-- Configure branches -->
    <gitFlowConfig>
        <productionBranch>master</productionBranch>
        <!-- default is develop, but we use development -->
        <developmentBranch>development</developmentBranch>
    </gitFlowConfig>
</configuration>


, , . , Gitlab CI.



Gitlab CI



CI/CD Gitlab CI , commit snapshot, merge master — release.



, — , master merge , hotfixes.



Gitlab CI, . :





release. , release, release, snapshot, (merge) master snapshot. - .



git Gitlab CI



git Gitlab CI, : , CI git.



write_repository. , , .



GITLAB_TOKEN, protected, development, release/* hotfix/* (protected). , .



git remote runner, CI . , Gitlab, :



$ git remote set-url --push origin "https://oauth2:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git"


git . Git «», git. , git , . :



$ git config user.name "Gitlab CI"
$ git config user.email gitlab-ci@viesure.io


git, CI. .





, git CI, gitflow. .



, , :



· MINOR



· PATCH hotfixes



.



(goals) -B, , .



Release



$ ./mvnw gitflow: release -B -DgitflowDigitToIncrement = $RELEASE_DIGIT


. master SNAPSHOT , . (goal ) maven , .





$ ./mvnw gitflow: release-start -B -DgitflowDigitToIncrement = $RELEASE_DIGIT


$ git push origin HEAD


. , , , (, , ). , , .



$ git symbolic-ref refs/heads/$CI_COMMIT_REF_NAME refs/remotes/origin/$CI_COMMIT_REF_NAME
$ ./mvnw gitflow:release-finish -B -DgitflowDigitToIncrement=$RELEASE_DIGIT


release . Git ( ref) HEAD . Gitlab CI . HEAD . , , HEAD.



master , .



(Hotfix)



, , , , .



$ ./mvnw gitflow:hotfix-start -B -DgitflowDigitToIncrement=$HOTFIX_DIGIT
$ git push origin HEAD


Hotfix-start hotfix, .



$ export CURRENT_VERSION=${CI_COMMIT_REF_NAME/hotfix\/}
$ git symbolic-ref refs/heads/$CI_COMMIT_REF_NAME refs/remotes/origin/$CI_COMMIT_REF_NAME
$ ./mvnw gitflow:hotfix-finish -B -DgitflowDigitToIncrement=$HOTFIX_DIGIT -DhotfixVersion=$CURRENT_VERSION


Hotfix-finish master . : . , , . .



, hotfix-start , . , .



. , .





. , - !



, git CI runners . , , .



, . CI .



Gitlab CI GitHub.








All Articles