ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

هي آرٽيڪل جاوا ڊولپرز لاءِ آهي جن کي ضرورت آهي ته جلدي پنهنجي پروڊڪٽس کي سون ٽائپ ۽/يا ميون سينٽرل ريپوزٽريز ۾ GitLab استعمال ڪندي شايع ڪن. هن آرٽيڪل ۾ آئون هن مسئلي کي حل ڪرڻ لاءِ gitlab-runner، gitlab-ci ۽ maven-plugin قائم ڪرڻ بابت ڳالهائيندس.

شرطون:

  • mvn ۽ GPG چابين جي محفوظ اسٽوريج.
  • عوامي CI ڪمن جي محفوظ عملدرآمد.
  • آرٽيڪلز کي اپلوڊ ڪرڻ (رليز/سنيپ شاٽ) عوامي ذخيرو ڏانهن.
  • ماون سينٽرل ۾ اشاعت لاءِ رليز ورزن جي خودڪار چڪاس.
  • ڪيترن ئي منصوبن لاءِ مخزن تي آرٽيڪل اپ لوڊ ڪرڻ لاءِ عام حل.
  • سادگي ۽ استعمال جي آسانيء.

Contents

عام ڄاڻ

  • سوناتائپ OSS Repository Hosting Service ذريعي Maven سينٽرل ۾ آرٽيڪل شايع ڪرڻ جي ميڪانيزم جو تفصيلي بيان اڳ ۾ ئي بيان ڪيو ويو آهي. هي آرٽيڪل استعمال ڪندڙ گوگولوپڪس، تنهنڪري مان هن مضمون جو حوالو ڏيندس صحيح هنڌن تي.
  • لاءِ پري رجسٽر ٿيو سوناتائپ جيرا ۽ مخزن کي کولڻ لاءِ ٽڪيٽ کوليو (وڌيڪ تفصيل لاءِ سيڪشن پڙهو سوناٽائپ جيرا تي هڪ ٽڪيٽ ٺاهيو). مخزن کي کولڻ کان پوءِ، JIRA کان لاگ ان/پاسورڊ جوڙو (هتان کان پوءِ سوناٽائپ اڪائونٽ جي طور تي حوالو ڏنو ويو) استعمال ڪيو ويندو نمونا اپلوڊ ڪرڻ لاءِ Sonatype Nexus.
  • اڳيون، هڪ GPG ڪيچ ٺاهڻ جو عمل تمام سڪل بيان ڪيو ويو آهي. وڌيڪ تفصيل لاءِ سيڪشن ڏسو GnuPG کي ترتيب ڏيڻ لاءِ دستخط ڪرڻ
  • جيڪڏهن توهان لينڪس ڪنسول استعمال ڪريو ٿا GPG ڪيچ (gnupg/gnupg2) ٺاهڻ لاءِ، ته پوءِ توهان کي انسٽال ڪرڻو پوندو. ريگ اوزار entropy پيدا ڪرڻ لاء. ٻي صورت ۾، اهم نسل تمام ڊگهو وقت وٺي سگھي ٿو.
  • اسٽوريج خدمتون عوامي GPG چاٻيون

مواد ڏانهن

GitLab ۾ هڪ ترتيب ڏيڻ واري منصوبي کي ترتيب ڏيڻ

  • سڀ کان پهريان، توهان کي هڪ پروجيڪٽ ٺاهڻ ۽ ترتيب ڏيڻ جي ضرورت آهي جنهن ۾ پائپ لائن کي ترتيب ڏيڻ لاء ذخيرو ڪيو ويندو. مون پنهنجي پروجيڪٽ جو نالو سادو ۽ غير پيچيده طور رکيو. ٺهرايو
  • مخزن ٺاهڻ کان پوء، توهان کي مخزن کي تبديل ڪرڻ لاء رسائي کي محدود ڪرڻ جي ضرورت آهي.
    پروجيڪٽ ڏانھن وڃو -> سيٽنگون -> مخزن -> محفوظ شاخون. اسان سڀني ضابطن کي حذف ڪريون ٿا ۽ وائلڊ ڪارڊ * سان هڪ واحد قاعدو شامل ڪريون ٿا جنهن کي دٻائڻ ۽ ضم ڪرڻ جي حق سان صرف استعمال ڪندڙن لاءِ مينٽينرز جي ڪردار سان. هي قاعدو هن پروجيڪٽ جي سڀني استعمال ڪندڙن لاءِ ڪم ڪندو ۽ گروپ جنهن سان هن پروجيڪٽ جو تعلق آهي.
    ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ
  • جيڪڏهن اتي ڪيترائي سنڀاليندڙ آهن، پوء بهترين حل اهو هوندو ته اصول ۾ منصوبي تائين رسائي کي محدود ڪرڻ.
    پروجيڪٽ ڏانھن وڃو -> سيٽنگون -> عام -> نمائش، پروجيڪٽ جون خاصيتون، اجازتون ۽ سيٽ ڪريو پروجيڪٽ جي نمائش پرائيويٽ.
    مون وٽ عوامي طور تي پهچ وارو منصوبو آهي، جتان مان پنهنجو GitLab رنر استعمال ڪريان ٿو ۽ صرف مون وٽ مخزن کي تبديل ڪرڻ جي رسائي آهي. خير، اصل ۾، عوامي پائپ لائن لاگز ۾ نجي معلومات ڏيکارڻ منهنجي فائدي ۾ ناهي.
  • مخزن کي تبديل ڪرڻ لاء ضابطن کي سخت ڪرڻ
    پروجيڪٽ ڏانھن وڃو -> سيٽنگون -> مخزن -> پش قاعدا ۽ مقرر ڪريو ڪميٽر پابندي، چيڪ ڪريو ته ڇا ليکڪ آھي GitLab صارف جھنڊو. مان پڻ ترتيب ڏيڻ جي صلاح ڏيان ٿو دستخط ڪرڻ، ۽ سيٽ ڪريو رد ڪريو غير دستخط ٿيل ڪميٽ پرچم.
  • اڳيون توهان کي ڪم شروع ڪرڻ لاءِ ٽرگر ترتيب ڏيڻ جي ضرورت آهي
    پروجيڪٽ ڏانھن وڃو -> سيٽنگون -> CI / CD -> پائپ لائن ٽرگرز ۽ ھڪڙو نئون ٽرگر ٽوڪن ٺاھيو
    ھن ٽوڪن کي فوري طور تي شامل ڪري سگھجي ٿو عام ٺاھ جوڙ ۾ متغيرن جي ھڪڙي گروپ جي منصوبن لاءِ.
    گروپ ڏانھن وڃو -> سيٽنگون -> CI / CD -> متغير ۽ ھڪڙو متغير شامل ڪريو DEPLOY_TOKEN قيمت ۾ ٽرگر ٽوڪن سان.

مواد ڏانهن

GitLab رنر

هي سيڪشن توهان جي پنهنجي (مخصوص) ۽ عوامي (شيئرڊ) رنر کي استعمال ڪندي ترتيب ڏيڻ تي هلندڙ ڪمن لاءِ تشڪيل بيان ڪري ٿو.

مخصوص ڊوڙندڙ

مان پنهنجون رنر استعمال ڪريان ٿو ڇاڪاڻ ته، سڀ کان پهريان، اهو آسان، تيز ۽ سستو آهي.
رنر لاءِ، مان سفارش ڪريان ٿو لينڪس وي ڊي ايس سان 1 سي پي يو، 2 GB ريم، 20 GB HDD. پڇڻ جي قيمت ~ 3000₽ في سال آهي.

منهنجو رنر

رنر لاءِ مون ورتو VDS 4 CPU، 4 GB RAM، 50 GB SSD. قيمت ~11000₽ ۽ ڪڏهن به افسوس نه ٿيو.
مون وٽ ڪل 7 مشينون آهن. 5 اروبا تي ۽ 2 ihor تي.

تنهنڪري اسان وٽ هڪ رنر آهي. هاڻي اسان ان کي ترتيب ڏينداسين.
اسان SSH ذريعي مشين ڏانھن وڃو ۽ انسٽال ڪريو java، git، maven، gnupg2.

مواد ڏانهن

gitlab رنر کي انسٽال ڪرڻ

  • هڪ نئون گروپ ٺاهيو runner
    sudo groupadd runner
  • maven cache لاءِ ڊاريڪٽري ٺاھيو ۽ گروپ جي اجازتن کي تفويض ڪريو runner
    توهان هن نقطي کي ڇڏي سگهو ٿا جيڪڏهن توهان هڪ مشين تي ڪيترن ئي رانديگرن کي هلائڻ جو ارادو نه ڪيو.

    mkdir -p /usr/cache/.m2/repository
    chown -R :runner /usr/cache
    chmod -R 770 /usr/cache
  • هڪ صارف ٺاهيو gitlab-deployer ۽ گروپ ۾ شامل ڪريو runner
    useradd -m -d /home/gitlab-deployer gitlab-deployer
    usermod -a -G runner gitlab-deployer
  • فائل ۾ شامل ڪريو /etc/ssh/sshd_config ايندڙ لائن
    AllowUsers root@* [email protected]
  • ريبوٽ sshd
    systemctl restart sshd
  • استعمال ڪندڙ لاء پاسورڊ سيٽنگ gitlab-deployer (سادو ٿي سگهي ٿو، ڇاڪاڻ ته مقامي هوسٽ لاءِ پابندي آهي)
    passwd gitlab-deployer
  • انسٽال ڪريو GitLab رنر (لينڪس x86-64)
    sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
    sudo chmod +x /usr/local/bin/gitlab-runner
    ln -s /usr/local/bin/gitlab-runner /etc/alternatives/gitlab-runner
    ln -s /etc/alternatives/gitlab-runner /usr/bin/gitlab-runner
  • ويب سائيٽ تي وڃو gitlab.com -> deploy-project -> Settings -> CI/CD -> Runners -> Specific Runners ۽ ڪاپي ڪريو رجسٽريشن ٽوڪن

اسڪرين

ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

  • رنر رجسٽر ڪرڻ
    gitlab-runner register --config /etc/gitlab-runner/gitlab-deployer-config.toml

عمل

Runtime platform arch=amd64 os=linux pid=17594 revision=3001a600 version=11.10.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.com/
Please enter the gitlab-ci token for this runner:
REGISTRATION_TOKEN
Please enter the gitlab-ci description for this runner:
[ih1174328.vds.myihor.ru]: Deploy Runner
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
Registering runner... succeeded                     runner=ZvKdjJhx
Please enter the executor: docker-ssh, parallels, virtualbox, docker-ssh+machine, kubernetes, docker, ssh, docker+machine, shell:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

  • اسان چيڪ ڪريون ٿا ته رنر رجسٽر ٿيل آهي. ويب سائيٽ تي وڃو gitlab.com -> deploy-project -> Settings -> CI/CD -> Runners -> Specific Runners -> Runners هن پروجيڪٽ لاءِ چالو ڪيو ويو

اسڪرين

ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

  • شامل ڪريو الڳ ٿيو خدمت /etc/systemd/system/gitlab-deployer.service
    [Unit]
    Description=GitLab Deploy Runner
    After=syslog.target network.target
    ConditionFileIsExecutable=/usr/local/bin/gitlab-runner
    [Service]
    StartLimitInterval=5
    StartLimitBurst=10
    ExecStart=/usr/local/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-deployer" "--config" "/etc/gitlab-runner/gitlab-deployer-config.toml" "--service" "gitlab-deployer" "--syslog" "--user" "gitlab-deployer"
    Restart=always
    RestartSec=120
    [Install]
    WantedBy=multi-user.target
  • اچو ته خدمت شروع ڪريون.
    systemctl enable gitlab-deployer.service
    systemctl start gitlab-deployer.service
    systemctl status gitlab-deployer.service
  • اسان چيڪ ڪريون ٿا ته رنر هلي رهيو آهي.

مثال طور

ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

مواد ڏانهن

GPG چابيون ٺاهي رهيو آهي

  • ساڳئي مشين مان اسان لاگ ان ڪندا آهيون ssh ذريعي صارف جي تحت gitlab-deployer (هي GPG ڪيچ ٺاهڻ لاءِ اهم آهي)

    ssh [email protected]

  • اسان سوالن جا جواب ڏيڻ سان هڪ اهم ٺاهيندا آهيون. مون پنهنجو نالو ۽ اي ميل استعمال ڪيو.
    چيڪ ڪرڻ لاء پاسورڊ جي وضاحت ڪرڻ جي پڪ ڪريو. هن چاٻي سان آثارن تي دستخط ڪيو ويندو.

    gpg --gen-key 

  • چيڪ

    gpg --list-keys -a
    /home/gitlab-deployer/.gnupg/pubring.gpg
    ----------------------------------------
    pub   4096R/00000000 2019-04-19
    uid                  Petruha Petrov <[email protected]>
    sub   4096R/11111111 2019-04-19

  • اسان جي عوامي ڪنجي کي ڪيئي سرور تي اپ لوڊ ڪندي

    gpg --keyserver keys.gnupg.net --send-key 00000000
    gpg: sending key 00000000 to hkp server keys.gnupg.net

مواد ڏانهن

Maven قائم ڪرڻ

  • صارف طور لاگ ان ڪريو gitlab-deployer
    su gitlab-deployer 
  • هڪ maven ڊاريڪٽري ٺاهيو مخزن جو ۽ ڪيش سان ڳنڍيو (ڪوبه غلطي نه ڪريو)
    توهان هن نقطي کي ڇڏي سگهو ٿا جيڪڏهن توهان هڪ مشين تي ڪيترن ئي رانديگرن کي هلائڻ جو ارادو نه ڪيو.

    mkdir -p ~/.m2/repository
    ln -s /usr/cache/.m2/repository /home/gitlab-deployer/.m2/repository
  • هڪ ماسٽر ڪيچ ٺاهيو
    mvn --encrypt-master-password password
    {hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}
  • ھڪڙي فائل ٺاھيو ~/.m2/settings-security.xml
    <settingsSecurity>
    <master>{hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}</master>
    </settingsSecurity>
  • Sonatype اڪائونٽ لاءِ پاسورڊ انڪرپٽ ڪرڻ
    mvn --encrypt-password SONATYPE_PASSWORD
    {98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}
  • ھڪڙي فائل ٺاھيو ~/.m2/settings.xml
    <settings>  
    <profiles>
        <profile>
            <id>env</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <gpg.passphrase>GPG_SECRET_KEY_PASSPHRASE</gpg.passphrase>
            </properties>
        </profile>
    </profiles>
    <servers>
        <server>
            <id>sonatype</id>
            <username>SONATYPE_USERNAME</username>
            <password>{98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}</password>
        </server>
    </servers>
    </settings>

ڪٿي ،
GPG_SECRET_KEY_PASSPHRASE - پاسورڊ GPG چاٻي لاءِ
SONATYPE_USERNAME — سوناٽائپ اڪائونٽ لاگ ان

هي رنر جي سيٽ اپ کي مڪمل ڪري ٿو، توهان اڳتي وڌائي سگهو ٿا سيڪشن ڏانهن گٽ لاب سي

مواد ڏانهن

گڏيل رنر

GPG چابيون ٺاهي رهيو آهي

  • سڀ کان پهريان، توهان کي GPG ڪيچ ٺاهڻ جي ضرورت آهي. هن کي ڪرڻ لاء، gnupg انسٽال ڪريو.

    yum install -y gnupg

  • اسان سوالن جا جواب ڏيڻ سان هڪ ڪنجي ٺاهي. مون پنهنجو نالو ۽ اي ميل استعمال ڪيو. چيڪ ڪرڻ لاء پاسورڊ جي وضاحت ڪرڻ جي پڪ ڪريو.

    gpg --gen-key 

  • چيڪ تي معلومات ڏيکاريندي

    gpg --list-keys -a
    pub   rsa3072 2019-04-24 [SC] [expires: 2021-04-23]
      2D0D1706366FC4AEF79669E24D09C55BBA3FD728
    uid           [ultimate] tttemp <[email protected]>
    sub   rsa3072 2019-04-24 [E] [expires: none]

  • اسان جي عوامي ڪنجي کي ڪيئي سرور تي اپ لوڊ ڪندي

    gpg --keyserver keys.gnupg.net --send-key 2D0D1706366FC4AEF79669E24D09C55BBA3FD728
    gpg: sending key 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 to hkp server keys.gnupg.net

  • اسان کي پرائيويٽ ڪنجي ملي ٿي

    gpg --export-secret-keys --armor 2D0D1706366FC4AEF79669E24D09C55BBA3FD728
    -----BEGIN PGP PRIVATE KEY BLOCK-----
    lQWGBFzAqp8BDADN41CPwJ/gQwiKEbyA902DKw/WSB1AvZQvV/ZFV77xGeG4K7k5
    ...
    =2Wd2
    -----END PGP PRIVATE KEY BLOCK-----

  • پروجيڪٽ سيٽنگون ڏانھن وڃو -> سيٽنگون -> CI / CD -> متغير ۽ پرائيويٽ ڪيئي کي متغير ۾ محفوظ ڪريو GPG_SECRET_KEY
    ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

مواد ڏانهن

Maven قائم ڪرڻ

  • هڪ ماسٽر ڪيچ ٺاهيو
    mvn --encrypt-master-password password
    {hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}
  • پروجيڪٽ سيٽنگون ڏانهن وڃو -> سيٽنگون -> CI / CD -> متغير ۽ متغير ۾ محفوظ ڪريو SETTINGS_SECURITY_XML هيٺيون لائينون:
    <settingsSecurity>
    <master>{hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}</master>
    </settingsSecurity>
  • Sonatype اڪائونٽ لاءِ پاسورڊ انڪرپٽ ڪرڻ
    mvn --encrypt-password SONATYPE_PASSWORD
    {98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}
  • پروجيڪٽ سيٽنگون ڏانهن وڃو -> سيٽنگون -> CI / CD -> متغير ۽ متغير ۾ محفوظ ڪريو SETTINGS_XML هيٺيون لائينون:
    <settings>  
    <profiles>
        <profile>
            <id>env</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <gpg.passphrase>GPG_SECRET_KEY_PASSPHRASE</gpg.passphrase>
            </properties>
        </profile>
    </profiles>
    <servers>
        <server>
            <id>sonatype</id>
            <username>sonatype_username</username>
            <password>{98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}</password>
        </server>
    </servers>
    </settings>

ڪٿي ،
GPG_SECRET_KEY_PASSPHRASE - پاسورڊ GPG چاٻي لاءِ
SONATYPE_USERNAME — سوناٽائپ اڪائونٽ لاگ ان

مواد ڏانهن

ڊاکر تصوير ترتيب ڏيو

  • اسان جاوا جي گهربل ورزن سان ڪم ڪرڻ جي ڪم کي هلائڻ لاءِ بلڪل سادو Dockerfile ٺاھيون ٿا. هيٺ الپائن لاء هڪ مثال آهي.

    FROM java:8u111-jdk-alpine
    RUN apk add gnupg maven git --update-cache 
    --repository http://dl-4.alpinelinux.org/alpine/edge/community/ --allow-untrusted && 
    mkdir ~/.m2/

  • توهان جي منصوبي لاء هڪ ڪنٽينر گڏ ڪرڻ

    docker build -t registry.gitlab.com/group/deploy .

  • اسان تصديق ڪريون ٿا ۽ ڪنٽينر کي رجسٽري ۾ لوڊ ڪريو.

    docker login -u USER -p PASSWORD registry.gitlab.com
    docker push registry.gitlab.com/group/deploy

مواد ڏانهن

گٽ لاب سي

منصوبي کي ترتيب ڏيو

شامل ڪريو .gitlab-ci.yml فائل کي ترتيب ڏيڻ واري منصوبي جي روٽ ۾
اسڪرپٽ پيش ڪري ٿو ٻه گڏيل طور تي خاص مقرري جا ڪم. مخصوص رنر يا گڏيل رنر ترتيب سان.

gitlab-ci.yml

stages:
  - deploy

Specific Runner:
  extends: .java_deploy_template
  # Задача будет выполняться на вашем shell-раннере
  tags:
    - deploy

Shared Runner:
  extends: .java_deploy_template
  # Задача будет выполняться на публичном docker-раннере
  tags:
    - docker
  # Образ из раздела GitLab Runner -> Shared Runner -> Docker
  image: registry.gitlab.com/group/deploy-project:latest
  before_script:
    # Импортируем GPG ключ
    - printf "${GPG_SECRET_KEY}" | gpg --batch --import
    # Сохраняем maven конфигурацию
    - printf "${SETTINGS_SECURITY_XML}" > ~/.m2/settings-security.xml
    - printf "${SETTINGS_XML}" > ~/.m2/settings.xml

.java_deploy_template:
  stage: deploy
  # Задача сработает по триггеру, если передана переменная DEPLOY со значением java
  only:
    variables:
    - $DEPLOY == "java"
  variables:
    # отключаем клонирование текущего проекта
    GIT_STRATEGY: none
  script:
    # Предоставляем возможность хранения пароля в незашифрованном виде
    - git config --global credential.helper store
    # Сохраняем временные креды пользователя gitlab-ci-token
    # Токен работает для всех публичных проектов gitlab.com и для проектов группы
    - echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com" >> ~/.git-credentials
    # Полностью чистим текущую директорию
    - rm -rf .* *
    # Клонируем проект который, будем деплоить в Sonatype Nexus
    - git clone ${DEPLOY_CI_REPOSITORY_URL} .
    # Переключаемся на нужный коммит
    - git checkout ${DEPLOY_CI_COMMIT_SHA} -f
    # Если хоть один pom.xml содержит параметр autoReleaseAfterClose валим сборку.
    # В противном случае есть риск залить сырые артефакты в maven central
    - >
      for pom in $(find . -name pom.xml); do
        if [[ $(grep -q autoReleaseAfterClose "$pom" && echo $?) == 0 ]]; then
          echo "File $pom contains prohibited setting: <autoReleaseAfterClose>";
          exit 1;
        fi;
      done
    # Если параметр DEPLOY_CI_COMMIT_TAG пустой, то принудительно ставим SNAPSHOT-версию
    - >
      if [[ "${DEPLOY_CI_COMMIT_TAG}" != "" ]]; then
        mvn versions:set -DnewVersion=${DEPLOY_CI_COMMIT_TAG}
      else
        VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
        if [[ "${VERSION}" == *-SNAPSHOT ]]; then
          mvn versions:set -DnewVersion=${VERSION}
        else
          mvn versions:set -DnewVersion=${VERSION}-SNAPSHOT
        fi
      fi
    # Запускаем задачу на сборку и деплой артефактов
    - mvn clean deploy -DskipTests=true

مواد ڏانهن

جاوا پروجيڪٽ

جاوا پروجيڪٽس ۾ جيڪي اپلوڊ ٿيڻ گهرجن عوامي ذخيرن تي، توهان کي رليز ۽ سنيپ شاٽ ورزن ڊائون لوڊ ڪرڻ لاءِ 2 قدم شامل ڪرڻ گهرجن.

gitlab-ci.yml

stages:
  - build
  - test
  - verify
  - deploy

<...>

Release:
  extends: .trigger_deploy
  # Запускать задачу только пo тегу.
  only:
    - tags

Snapshot:
  extends: .trigger_deploy
  # Запускаем задачу на публикацию SNAPSHOT версии вручную
  when: manual
  # Не запускать задачу, если проставлен тег.
  except:
    - tags

.trigger_deploy:
  stage: deploy
  variables:
    # Отключаем клонирование текущего проекта
    GIT_STRATEGY: none
    # Ссылка на триггер deploy-задачи
    URL: "https://gitlab.com/api/v4/projects/<deploy project ID>/trigger/pipeline"
    # Переменные deploy-задачи
    POST_DATA: "
      token=${DEPLOY_TOKEN}&
      ref=master&
      variables[DEPLOY]=${DEPLOY}&
      variables[DEPLOY_CI_REPOSITORY_URL]=${CI_REPOSITORY_URL}&
      variables[DEPLOY_CI_PROJECT_NAME]=${CI_PROJECT_NAME}&
      variables[DEPLOY_CI_COMMIT_SHA]=${CI_COMMIT_SHA}&
      variables[DEPLOY_CI_COMMIT_TAG]=${CI_COMMIT_TAG}
      "
  script:
    # Не использую cURL, так как с флагами --fail --show-error
    # он не выводит тело ответа, если HTTP код 400 и более 
    - wget --content-on-error -qO- ${URL} --post-data ${POST_DATA}

هن حل ۾، مون ٿورو اڳتي وڌو ۽ فيصلو ڪيو ته هڪ CI ٽيمپليٽ استعمال ڪرڻ جاوا منصوبن لاءِ.

وڌيڪ تفصيل

مون هڪ الڳ منصوبو ٺاهيو gitlab-ci جنهن ۾ مون جاوا پروجيڪٽس لاءِ CI ٽيمپليٽ رکيا common.yml.

common.yml

stages:
  - build
  - test
  - verify
  - deploy

variables:
  SONAR_ARGS: "
  -Dsonar.gitlab.commit_sha=${CI_COMMIT_SHA} 
  -Dsonar.gitlab.ref_name=${CI_COMMIT_REF_NAME} 
  "

.build_java_project:
  stage: build
  tags:
    - touchbit-shell
  variables:
    SKIP_TEST: "false"
  script:
    - mvn clean
    - mvn package -DskipTests=${SKIP_TEST}
  artifacts:
    when: always
    expire_in: 30 day
    paths:
      - "*/target/reports"

.build_sphinx_doc:
  stage: build
  tags:
    - touchbit-shell
  variables:
    DOCKERFILE: .indirect/docs/Dockerfile
  script:
    - docker build --no-cache -t ${CI_PROJECT_NAME}/doc -f ${DOCKERFILE} .

.junit_module_test_run:
  stage: test
  tags:
    - touchbit-shell
  variables:
    MODULE: ""
  script:
    - cd ${MODULE}
    - mvn test
  artifacts:
    when: always
    expire_in: 30 day
    paths:
      - "*/target/reports"

.junit_test_run:
  stage: test
  tags:
    - touchbit-shell
  script:
    - mvn test
  artifacts:
    when: always
    expire_in: 30 day
    paths:
    - "*/target/reports"

.sonar_review:
  stage: verify
  tags:
    - touchbit-shell
  dependencies: []
  script:
    - >
      if [ "$CI_BUILD_REF_NAME" == "master" ]; then
        mvn compile sonar:sonar -Dsonar.login=$SONAR_LOGIN $SONAR_ARGS
      else
        mvn compile sonar:sonar -Dsonar.login=$SONAR_LOGIN $SONAR_ARGS -Dsonar.analysis.mode=preview
      fi

.trigger_deploy:
  stage: deploy
  tags:
    - touchbit-shell
  variables:
    URL: "https://gitlab.com/api/v4/projects/10345765/trigger/pipeline"
    POST_DATA: "
      token=${DEPLOY_TOKEN}&
      ref=master&
      variables[DEPLOY]=${DEPLOY}&
      variables[DEPLOY_CI_REPOSITORY_URL]=${CI_REPOSITORY_URL}&
      variables[DEPLOY_CI_PROJECT_NAME]=${CI_PROJECT_NAME}&
      variables[DEPLOY_CI_COMMIT_SHA]=${CI_COMMIT_SHA}&
      variables[DEPLOY_CI_COMMIT_TAG]=${CI_COMMIT_TAG}
      "
  script:
  - wget --content-on-error -qO- ${URL} --post-data ${POST_DATA}

.trigger_release_deploy:
  extends: .trigger_deploy
  only:
    - tags

.trigger_snapshot_deploy:
  extends: .trigger_deploy
  when: manual
  except:
    - tags

نتيجي طور، جاوا پروجيڪٽ پاڻ ۾، .gitlab-ci.yml تمام ٺهڪندڙ ۽ لفظي نه ڏسڻ ۾ اچي ٿو

gitlab-ci.yml

include: https://gitlab.com/TouchBIT/gitlab-ci/raw/master/common.yml

Shields4J:
  extends: .build_java_project

Sphinx doc:
  extends: .build_sphinx_doc
  variables:
    DOCKERFILE: .docs/Dockerfile

Sonar review:
  extends: .sonar_review
  dependencies:
    - Shields4J

Release:
  extends: .trigger_release_deploy

Snapshot:
  extends: .trigger_snapshot_deploy

مواد ڏانهن

Pom.xml ترتيب

هن موضوع کي وڏي تفصيل سان بيان ڪيو ويو آهي. گوگولوپڪس в ميون کي ترتيب ڏيڻ لاءِ پاڻمرادو سائن اپ ڪرڻ ۽ نمونن کي اسنيپ شاٽ ۽ اسٽيجنگ ريپوزٽريز تي اپلوڊ ڪرڻ، تنهن ڪري مان پلگ ان استعمال ڪرڻ جي ڪجهه نونسن کي بيان ڪندس. مان پڻ بيان ڪندس ته توهان ڪيترو آسان ۽ آرام سان استعمال ڪري سگهو ٿا nexus-staging-maven-pluginجيڪڏهن توهان نٿا چاهيو يا استعمال نٿا ڪري سگهو org.sonatype.oss:oss-parent توهان جي پروجيڪٽ لاءِ والدين طور.

maven-install-plugin

مقامي مخزن ۾ ماڊلز کي انسٽال ڪري ٿو.
ٻين منصوبن ۾ حل جي مقامي تصديق لاء تمام مفيد، گڏو گڏ هڪ checksum.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-install-plugin</artifactId>
  <executions>
    <execution>
      <id>install-project</id>
      <!-- Если у вас многомодульный проект с деплоем родительского помика -->
      <phase>install</phase>
      <!-- Явно указываем файлы для локальной установки -->
      <configuration>
        <file>target/${project.artifactId}-${project.version}.jar</file>
```target/${project.artifactId}-${project.version}-sources.jar</sources>
        <pomFile>dependency-reduced-pom.xml</pomFile>
        <!-- Принудительное обновление метаданных проекта -->
        <updateReleaseInfo>true</updateReleaseInfo>
        <!-- Контрольные суммы для проверки целостности -->
        <createChecksum>true</createChecksum>
      </configuration>
    </execution>
  </executions>
</plugin>

مواد ڏانهن

maven-javadoc-plugin

پروجيڪٽ لاءِ جاواڊڪ ٺاهي رهيو آهي.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>jar</goal>
      </goals>
      <!-- Генерация javadoc должна быть после фазы генерации ресурсов -->
      <phase>prepare-package</phase>
      <configuration>
        <!-- Очень помогает в публичных проектах -->
        <failOnError>true</failOnError>
        <failOnWarnings>true</failOnWarnings>
        <!-- Убирает ошибку поиска документации в target директории -->
        <detectOfflineLinks>false</detectOfflineLinks>
      </configuration>
    </execution>
  </executions>
</plugin>

جيڪڏهن توهان وٽ هڪ ماڊل آهي جنهن ۾ جاوا شامل ناهي (مثال طور صرف وسيلن)
يا توھان نٿا چاھيو ٺاھيو javadoc اصول ۾، پوء مدد ڪريو maven-jar-plugin

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <executions>
    <execution>
      <id>empty-javadoc-jar</id>
      <phase>generate-resources</phase>
      <goals>
        <goal>jar</goal>
      </goals>
      <configuration>
        <classifier>javadoc</classifier>
        <classesDirectory>${basedir}/javadoc</classesDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

مواد ڏانهن

maven-gpg-plugin

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-gpg-plugin</artifactId>
  <executions>
    <execution>
      <id>sign-artifacts</id>
      <!-- Сборка будет падать, если отсутствует GPG ключ -->
      <!-- Подписываем артефакты только на фазе deploy -->
      <phase>deploy</phase>
      <goals>
        <goal>sign</goal>
      </goals>
    </execution>
  </executions>
</plugin>

مواد ڏانهن

nexus-staging-maven-plugin

ٺاھ جوڙ:

<project>
  <!-- ... -->
  <build>
    <plugins>
      <!-- ... -->
      <plugin>
        <groupId>org.sonatype.plugins</groupId>
        <artifactId>nexus-staging-maven-plugin</artifactId>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.sonatype.plugins</groupId>
          <artifactId>nexus-staging-maven-plugin</artifactId>
          <extensions>true</extensions>
          <configuration>
            <serverId>sonatype</serverId>
            <nexusUrl>https://oss.sonatype.org/</nexusUrl>
            <!-- Обновляем метаданные, чтобы пометить артефакт как release -->
            <!-- Не влияет на snapshot версии -->
            <updateReleaseInfo>true</updateReleaseInfo>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <configuration>
            <!-- Отключаем плагин -->
            <skip>true</skip>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <distributionManagement>
    <snapshotRepository>
      <id>sonatype</id>
      <name>Nexus Snapshot Repository</name>
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </snapshotRepository>
    <repository>
      <id>sonatype</id>
      <name>Nexus Release Repository</name>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
  </distributionManagement>
</project>

جيڪڏهن توهان وٽ هڪ ملٽي ماڊل پروجيڪٽ آهي ۽ توهان کي مخزن تي مخصوص ماڊل اپلوڊ ڪرڻ جي ضرورت ناهي، پوء توهان کي شامل ڪرڻ جي ضرورت آهي nexus-staging-maven-plugin پرچم سان skipNexusStagingDeployMojo

<build>
  <plugins>
    <plugin>
      <groupId>org.sonatype.plugins</groupId>
      <artifactId>nexus-staging-maven-plugin</artifactId>
      <configuration>
        <skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
      </configuration>
    </plugin>
  </plugins>
</build>

ڊائون لوڊ ڪرڻ کان پوء، سنيپ شاٽ / رليز ورزن ۾ موجود آهن اسٽيجنگ repositories

<repositories>
  <repository>
    <id>SonatypeNexus</id>
    <url>https://oss.sonatype.org/content/groups/staging/</url>
    <!-- Не надо указывать флаги snapshot/release для репозитория -->
  </repository>
</repositories>

وڌيڪ پلس

  • Nexus repository (mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin).
  • Maven سينٽرل تي اپلوڊ ڪرڻ لاءِ خودڪار رليز چيڪ

مواد ڏانهن

نتيجي ۾

SNAPSHOT ورجن شايع ڪرڻ

جڏهن هڪ پروجيڪٽ ٺاهيندي، اهو ممڪن آهي دستي طور تي هڪ ٽاسڪ لانچ ڪرڻ لاءِ SNAPSHOT ورجن ڊائون لوڊ ڪرڻ لاءِ Nexus

ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

جڏهن هي ڪم شروع ڪيو ويندو آهي، ترتيب ڏيڻ واري منصوبي ۾ لاڳاپيل ڪم شروع ڪيو ويندو آهي (مثال).

تراشيل لاگ

Running with gitlab-runner 11.10.0 (3001a600)
  on Deploy runner JSKWyxUw
Using Shell executor...
Running on ih1174328.vds.myihor.ru...
Skipping Git repository setup
Skipping Git checkout
Skipping Git submodules setup
$ rm -rf .* *
$ git config --global credential.helper store
$ echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com" >> ~/.git-credentials
$ git clone ${DEPLOY_CI_REPOSITORY_URL} .
Cloning into 'shields4j'...
$ git checkout ${DEPLOY_CI_COMMIT_SHA}
Note: checking out '850f86aa317194395c5387790da1350e437125a7'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
  git checkout -b new_branch_name
HEAD is now at 850f86a... skip deploy test-core
$ for pom in $(find . -name pom.xml); do # collapsed multi-line command
$ if [[ "${DEPLOY_CI_COMMIT_TAG}" != "" ]]; then # collapsed multi-line command
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 4 modules...
[INFO] Installing Nexus Staging features:
[INFO]   ... total of 4 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Shields4J                                                          [pom]
[INFO] test-core                                                          [jar]
[INFO] Shields4J client                                                   [jar]
[INFO] TestNG listener                                                    [jar]
[INFO] 
[INFO] --------------< org.touchbit.shields4j:shields4j-parent >---------------
[INFO] Building Shields4J 1.0.0                                           [1/4]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:set (default-cli) @ shields4j-parent ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: /home/gitlab-deployer/JSKWyxUw/0/TouchBIT/deploy/shields4j
[INFO] Processing change of org.touchbit.shields4j:shields4j-parent:1.0.0 -> 1.0.0-SNAPSHOT
[INFO] Processing org.touchbit.shields4j:shields4j-parent
[INFO]     Updating project org.touchbit.shields4j:shields4j-parent
[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO] 
[INFO] Processing org.touchbit.shields4j:client
[INFO]     Updating parent org.touchbit.shields4j:shields4j-parent
[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO]     Updating dependency org.touchbit.shields4j:test-core
[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO] 
[INFO] Processing org.touchbit.shields4j:test-core
[INFO]     Updating parent org.touchbit.shields4j:shields4j-parent
[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO] 
[INFO] Processing org.touchbit.shields4j:testng
[INFO]     Updating parent org.touchbit.shields4j:shields4j-parent
[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO]     Updating dependency org.touchbit.shields4j:client
[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO]     Updating dependency org.touchbit.shields4j:test-core
[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Shields4J 1.0.0 .................................... SUCCESS [  0.992 s]
[INFO] test-core .......................................... SKIPPED
[INFO] Shields4J client ................................... SKIPPED
[INFO] TestNG listener 1.0.0 .............................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.483 s
[INFO] Finished at: 2019-04-21T02:40:42+03:00
[INFO] ------------------------------------------------------------------------
$ mvn clean deploy -DskipTests=${SKIP_TESTS}
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 4 modules...
[INFO] Installing Nexus Staging features:
[INFO]   ... total of 4 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Shields4J                                                          [pom]
[INFO] test-core                                                          [jar]
[INFO] Shields4J client                                                   [jar]
[INFO] TestNG listener                                                    [jar]
[INFO] 
[INFO] --------------< org.touchbit.shields4j:shields4j-parent >---------------
[INFO] Building Shields4J 1.0.0-SNAPSHOT                                  [1/4]
[INFO] --------------------------------[ pom ]---------------------------------
...
DELETED
...
[INFO]  * Bulk deploy of locally gathered snapshot artifacts finished.
[INFO] Remote deploy finished with success.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Shields4J 1.0.0-SNAPSHOT ........................... SUCCESS [  2.375 s]
[INFO] test-core .......................................... SUCCESS [  3.929 s]
[INFO] Shields4J client ................................... SUCCESS [  3.815 s]
[INFO] TestNG listener 1.0.0-SNAPSHOT ..................... SUCCESS [ 36.134 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 47.629 s
[INFO] Finished at: 2019-04-21T02:41:32+03:00
[INFO] ------------------------------------------------------------------------

نتيجي طور، نسخو نڪسس ۾ لوڊ ڪيو ويو آهي 1.0.0-سنيپ شاٽ.

سڀ سنيپ شاٽ ورزن ويب سائيٽ تي مخزن مان ختم ڪري سگھجن ٿا oss.sonatype.org توهان جي اڪائونٽ هيٺ.

ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

مواد ڏانهن

رليز ورجن شايع ڪرڻ

جڏهن هڪ ٽيگ نصب ڪيو ويندو آهي، ترتيب ڏيڻ واري منصوبي ۾ لاڳاپيل ڪم خودڪار طور تي رليز ورزن کي Nexus (مثال).

ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

بهترين حصو اهو آهي ته ويجهي ڇڏڻ خودڪار طور تي نڪسس ۾ شروع ٿئي ٿو.

[INFO] Performing remote staging...
[INFO] 
[INFO]  * Remote staging into staging profile ID "9043b43f77dcc9"
[INFO]  * Created staging repository with ID "orgtouchbit-1037".
[INFO]  * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1037
[INFO]  * Uploading locally staged artifacts to profile org.touchbit
[INFO]  * Upload of locally staged artifacts finished.
[INFO]  * Closing staging repository with ID "orgtouchbit-1037".
Waiting for operation to complete...
.........
[INFO] Remote staged 1 repositories, finished with success.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Shields4J 1.0.0 .................................... SUCCESS [  9.603 s]
[INFO] test-core .......................................... SUCCESS [  3.419 s]
[INFO] Shields4J client ................................... SUCCESS [  9.793 s]
[INFO] TestNG listener 1.0.0 .............................. SUCCESS [01:23 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:47 min
[INFO] Finished at: 2019-04-21T04:05:46+03:00
[INFO] ------------------------------------------------------------------------

۽ جيڪڏهن ڪجهه غلط ٿي وڃي، اهو ڪم ضرور ناڪام ٿيندو

[INFO] Performing remote staging...
[INFO] 
[INFO]  * Remote staging into staging profile ID "9043b43f77dcc9"
[INFO]  * Created staging repository with ID "orgtouchbit-1038".
[INFO]  * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1038
[INFO]  * Uploading locally staged artifacts to profile org.touchbit
[INFO]  * Upload of locally staged artifacts finished.
[INFO]  * Closing staging repository with ID "orgtouchbit-1038".
Waiting for operation to complete...
.......
[ERROR] Rule failure while trying to close staging repository with ID "orgtouchbit-1039".
[ERROR] 
[ERROR] Nexus Staging Rules Failure Report
[ERROR] ==================================
[ERROR] 
[ERROR] Repository "orgtouchbit-1039" failures
[ERROR]   Rule "signature-staging" failures
[ERROR]     * No public key: Key with id: (1f42b618d1cbe1b5) was not able to be located on &lt;a href=http://keys.gnupg.net:11371/&gt;http://keys.gnupg.net:11371/&lt;/a&gt;. Upload your public key and try the operation again.
...
[ERROR] Cleaning up local stage directory after a Rule failure during close of staging repositories: [orgtouchbit-1039]
[ERROR]  * Deleting context 9043b43f77dcc9.properties
[ERROR] Cleaning up remote stage repositories after a Rule failure during close of staging repositories: [orgtouchbit-1039]
[ERROR]  * Dropping failed staging repository with ID "orgtouchbit-1039" (Rule failure during close of staging repositories: [orgtouchbit-1039]).
[ERROR] Remote staging finished with a failure: Staging rules failure!
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Shields4J 1.0.0 .................................... SUCCESS [  4.073 s]
[INFO] test-core .......................................... SUCCESS [  2.788 s]
[INFO] Shields4J client ................................... SUCCESS [  3.962 s]
[INFO] TestNG listener 1.0.0 .............................. FAILURE [01:07 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

نتيجي طور، اسان صرف هڪ اختيار سان رهجي ويا آهيون. يا ته هي نسخو حذف ڪريو يا ان کي شايع ڪريو.

ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

رليز ٿيڻ کان پوءِ، ڪجهه وقت کان پوءِ آثار اندر هوندا ميون سينٽرل تي جاوا پروجيڪٽ اپ لوڊ ڪرڻ لاءِ GitLab CI ترتيب ڏيڻ

غير موضوع

اها منهنجي لاءِ هڪ دريافت هئي جيڪا ميون ٻين عوامي ذخيرن کي ترتيب ڏئي ٿي.
مون کي شامل ڪرڻو پيو robots.txt ڇاڪاڻ ته اهو منهنجي پراڻي مخزن کي ترتيب ڏئي ٿو.

مواد ڏانهن

ٿڪل

جيڪو اسان وٽ آهي

  • هڪ الڳ ڊيپلائي پروجيڪٽ جنهن ۾ توهان ڪيترن ئي سي آءِ ڪمن کي لاڳو ڪري سگهو ٿا جيڪي آرٽيڪل اپلوڊ ڪرڻ لاءِ عوامي ذخيرن تي مختلف ترقياتي ٻولين لاءِ.
  • Deploy پروجيڪٽ کي ٻاهرئين مداخلت کان الڳ ڪيو ويو آهي ۽ صرف صارفين طرفان مالڪ ۽ سنڀاليندڙ ڪردارن سان تبديل ڪري سگهجي ٿو.
  • هڪ الڳ مخصوص رنر "گرم" ڪيش سان صرف ڪمن کي هلائڻ لاءِ.
  • عوامي مخزن ۾ سنيپ شاٽ / رليز ورجن کي شايع ڪرڻ.
  • ماون سينٽرل ۾ اشاعت لاءِ تياري لاءِ رليز ورزن جي خودڪار چيڪ.
  • Maven سينٽرل ۾ "خام" نسخن جي خودڪار اشاعت جي خلاف تحفظ.
  • سنيپ شاٽ ورجن ٺاھيو ۽ شايع ڪريو "تي ڪلڪ ڪريو".
  • سنيپ شاٽ / رليز ورزن حاصل ڪرڻ لاءِ هڪ واحد مخزن.
  • جاوا پروجيڪٽ جي تعمير/جانچ/پبلشنگ لاءِ جنرل پائپ لائن.

GitLab CI ترتيب ڏيڻ ايترو پيچيده موضوع نه آهي جيترو اهو لڳي ٿو پهرين نظر ۾. اهو ڪافي آهي سيٽ اپ ڪرڻ لاءِ سي آءِ ٽرنڪي بنياد تي ٻه ڀيرا ، ۽ هاڻي توهان هن معاملي ۾ شوقين کان پري آهيو. ان کان علاوه، GitLab دستاويز تمام بيڪار آهي. پهرين قدم کڻڻ کان ڊپ نه ٿيو. ھلندڙ ماڻھوءَ جي قدمن ھيٺان رستو نظر اچي ٿو (مون کي ياد ناھي ته اھو ڪنھن چيو :)

مان موٽ حاصل ڪري خوش ٿي ويندس.

ايندڙ آرٽيڪل ۾ آئون ڳالهائيندس GitLab CI کي ڪيئن ترتيب ڏيڻ لاءِ ڪم کي هلائڻ لاءِ انٽيگريشن ٽيسٽن سان مقابلي ۾ (ڊاڪر ڪمپوز استعمال ڪندي ٽيسٽ تحت خدمتون هلائڻ) جيڪڏهن توهان وٽ صرف هڪ شيل رنر آهي.

مواد ڏانهن

جو ذريعو: www.habr.com

تبصرو شامل ڪريو