أتمتة سير عمل مشروع Java باستخدام نموذج فرع Gitflow معدل

أتمتة سير عمل مشروع Java باستخدام نموذج فرع Gitflow معدل



النتائج الرئيسية



  • Gitflow هو نموذج متفرع تعاوني يحاول الاستفادة من قوة وسرعة وسهولة تفرع Git. نجحت هذه الطريقة في الموقف الذي نصفه هنا ، لكن لاحظ آخرون أن استخدام Gitflow له مشاكله الخاصة.
  • وثائق استخدام Gitflow في النشر غامضة في أحسن الأحوال.
  • يتم عزل الوظائف داخل الفروع. يمكنك إدارة تغييرات الميزات الخاصة بك بشكل منفصل. يختلف هذا النهج عن التطوير المستند إلى trunk ، حيث يلتزم كل مطور بالخط الرئيسي مرة واحدة على الأقل كل 24 ساعة.
  • يتيح لك فصل الميزات باستخدام الفروع المعزولة تحديد الميزات التي يجب تضمينها في كل إصدار. يمكن أن تكون المقايضة هنا عمليات دمج معقدة.





تحديث 13 فبراير 2019: تلقى التصميم الأولي لهذه المقالة الكثير من التعليقات ، معظمها إيجابية وأحيانًا ليست كثيرًا. كانت نقطة الخلاف الرئيسية هي استخدامنا لمصطلح "التسليم المستمر" في بيئة التحرير اليدوي. إذا كنت جزءًا من فريق ينشر مئات الإصدارات يوميًا ، فقد لا يعمل هيكلنا من أجلك. ومع ذلك ، إذا كنت ، مثلنا ، تعمل في صناعة شديدة التنظيم مثل التمويل ، حيث تكون الإصدارات أكثر قابلية للتحكم ، وترغب في تحقيق أقصى استفادة من إمكانيات التفرع والتكامل التلقائي والاستضافة التلقائية والإصدار ، فقد يعمل هذا الحل من أجلك أيضًا. بالنسبة لنا



منذ سنوات ، كنت في مؤتمر تقني حيث عثرت على قطعة غريبة جديدة في معرض تجاري يسمى "جيت". اكتشفت أن هذه أداة تحكم في الإصدار من الجيل الجديد ، وكان رد فعلي الأول: لماذا نحتاج إلى هذا ، لدينا بالفعل SVN؟ التي كانت آنذاك. اليوم ، تنتقل فرق التطوير إلى Git بشكل جماعي ، وقد ظهر نظام بيئي ضخم حول البرامج الوسيطة والمكونات الإضافية.



Gitflow — , , Git. InfoQ, , , , . Gitflow 2010 « Git». Gitflow , , , . , , , , , .



Gitflow , , . , . — master, development, feature .., , , Snapshot, Dev, UAT, Prod ..?



, , , .



Java Maven, , . GitLab CI , Jenkins GitHub CI; Jira , IntelliJ IDEA IDE, Nexus , Ansible , .





, «» «» — , , ., . , , , « ». « », « »; , . - Thoughtworks , CI.



Gitflow



Gitflow feature . , , Git.





Git, «master»; «trunk», Git Git. Gitflow, , , .



Gitflow



Gitflow, , master «develop». develop , , , «».





, develop, master. Master — «» , , , , . - , .



develop "". , — , , ; . , , , , , "".



, ? :



Jira, . , , , master:





, «feat-», Jira. ( Jira, Epic Parent , .) , «feat-SDLC-123-add-name-field». «feat-» , CI- , . , . SDLC-123 — Jira, , .



: , , , . , , « (merge hell)».



, Snapshots



. , Sonatype Nexus. . «SNAPSHOT» semver ( ), «-SNAPSHOT» (, 1.2.0-SNAPSHOT). , «-SNAPSHOT» (, 1.2.0). Snapshot , , Snapshot, . ; , , , , Nexus.



, X, Y. , POM (, 1.2.0-SNAPSHOT). , Nexus, Nexus. , Nexus, 1.2.0-SNAPSHOT , ( , !) .



GitLab CI



, ! , ? GitLab CI, , Nexus, feat- Maven ( ), Maven ( Snapshot Nexus).



GitLab CI ( .gitlab-ci.yml) , CI / CD. , , .



GitLab CI , :



feature-build:
  stage: 
    build
  script:
    - mvn clean verify sonar:sonar
  only:
    - /^feat-\w+$/


, , , , .



,



. IntelliJ «», ( , ) , , . ( ) Maven (, Jacoco), . IDE, , , .





[ — , , , , . , ; , -, , . , .]



Maven. Maven ( , Test-something.java Test.java, Tests.java TestCase.java). Maven verifyphase ( Maven Failsafe) . mvn verify , , . SonarQube Maven SonarQube . .





Gitflow. , , «», . , , .



, GitLab, :







SDLC - , . , . , , , , . , , Nexus , POM, , . 0.0.0-SNAPSHOT POM, .



, , , , . , , SNAPSHOT Nexus.



develop. Gitflow ; . , , ( ), () , () , , . , 1.2.0, 1.2.1, Snapshot pom 1.2.1-SNAPSHOT. , 1.2.1.





GitLab CI , ( semver , ; : \d+\.\d+\.\d+). CI/CD POM, SNAPSHOT, (1.2.1-SNAPSHOT ).



release-build:
  stage:
    build
  script: 
    - mvn versions:set -DnewVersion=${CI_COMMIT_REF_NAME}-SNAPSHOT
    # now commit the version to the release branch
    - git add .
    - git commit -m "create snapshot [ci skip]"
    - git push
    # Deploy the binary to Nexus:
    - mvn deploy
  only:
    - /^\d+\.\d+\.\d+$/
  except:
    - tags


[ci skip] . , !



, CI POM, pom.xml ( , ). POM SNAPSHOT .



GitLab CI, (/^\d+\.\d+\.\d+$/, 1.2.1) , , push. GitLab mvn deploy SNAPSHOT Nexus. Ansible , . . , , -, SNAPSHOT, SNAPSHOT Nexus SNAPSHOT .



Ansible, . , , , cron . Ansible .



, , master, Git semver , Nexus .



, GitLab CI , , . jar Ansible, GitLab CI.



master-branch-build:
  stage:
    build
  script:
    # Remove the -SNAPSHOT from the POM version
    - mvn versions:set -DremoveSnapshot
    # use the Maven help plugin to determine the version. Note the grep -v at the end, to prune out unwanted log lines.
    - export FINAL_VERSION=$(mvn --non-recursive help:evaluate -Dexpression=project.version | grep -v '\[.*')
    # Stage and commit the binaries (again using [ci skip] in the comment to avoid cycles)
    - git add .
    - git commit -m "Create release version [ci skip]"
    # Tag the release
    - git tag -a ${FINAL_VERSION} -m "Create release version"
    - git push 
    - mvn sonar:sonar deploy
  artifacts:
    paths:
    # list our binaries here for Ansible deployment in the master-branch-deploy stage
    - target/my-binaries-*.jar
  only:
    - master

master-branch-deploy:
  stage:
    deploy
  dependencies:
    - master-branch-build
  script:
   # "We would deploy artifacts (target/my-binaries-*.jar) here, using ansible
  only:
    - master




. , . (Develop , .)





, , . Master GitLab, , . GitLab master, SNAPSHOT . GitLab Maven : removeSnapshot. «-SNAPSHOT» POM, runner GitLab master, , POM SNAPSHOT Nexus. UAT QA UAT. , . ( Ansible, .)





hotfix



, . , , , . Hotfix . , . , , master.





. , hotfix Nexus SNAPSHOT UAT. , , master . Master Nexus.





:





, Gitflow. . , :



  • Feature . Feature , Feature, Feature,
  • Feature, , Feature . — , Feature, Feature.
  • , , .
  • , , .


, , . , . , , , .



Gitflow , , , .





Gitflow Atlassian Bamboo BitBucket . .



Gitflow Maven, , , Maven Gitflow. Gitflow.





Nomura Securities . Oracle Java, Java InfoQ Java.



Brian Gardner هو حديث تخرج من معهد Stevens للتكنولوجيا ، حيث حصل على درجتي البكالوريوس والماجستير في علوم الكمبيوتر. يعمل برايان حاليًا في نومورا كمهندس برمجيات في مجموعة تطوير البنية التحتية. يقضي معظم يومه في العمل على خدمات Spring Boot الخلفية أو خطوط أنابيب البيانات الضخمة باستخدام Apache Spark.




All Articles