ماون سنٹرل پر جاوا پروجیکٹ اپ لوڈ کرنے کے لیے GitLab CI کو ترتیب دینا

یہ مضمون جاوا ڈویلپرز کے لیے ہے جنہیں GitLab کا استعمال کرتے ہوئے سوناٹائپ اور/یا ماون سنٹرل ریپوزٹریز میں اپنی مصنوعات کو تیزی سے شائع کرنے کی ضرورت ہے۔ اس مضمون میں میں اس مسئلے کو حل کرنے کے لیے gitlab-runner، gitlab-ci اور maven-plugin ترتیب دینے کے بارے میں بات کروں گا۔

شرائط:

  • ایم وی این اور جی پی جی کیز کا محفوظ ذخیرہ۔
  • عوامی CI کاموں کی محفوظ عملدرآمد۔
  • عوامی ذخیروں میں نمونے (ریلیز/اسنیپ شاٹ) اپ لوڈ کرنا۔
  • ماون سینٹرل میں اشاعت کے لیے ریلیز ورژن کی خودکار جانچ۔
  • ایک سے زیادہ پروجیکٹس کے لیے ایک ذخیرہ میں نمونے اپ لوڈ کرنے کا ایک عمومی حل۔
  • سادگی اور استعمال میں آسانی۔

مواد

عمومی معلومات

  • سوناٹائپ او ایس ایس ریپوزٹری ہوسٹنگ سروس کے ذریعے ماون سینٹرل میں نمونے شائع کرنے کے طریقہ کار کی تفصیلی وضاحت پہلے ہی میں بیان کی جا چکی ہے۔ اس مضمون صارف Googolplex، لہذا میں اس مضمون کا صحیح جگہوں پر حوالہ دوں گا۔
  • کے لیے پہلے سے رجسٹر کریں۔ سوناٹائپ JIRA اور ذخیرہ کھولنے کے لیے ٹکٹ کھولیں (مزید تفصیلات کے لیے سیکشن پڑھیں سوناٹائپ JIRA پر ٹکٹ بنائیں)۔ ریپوزٹری کو کھولنے کے بعد، JIRA سے لاگ ان/پاس ورڈ جوڑا (اس کے بعد سوناٹائپ اکاؤنٹ کہا جاتا ہے) کو سونا ٹائپ گٹھ جوڑ پر نمونے اپ لوڈ کرنے کے لیے استعمال کیا جائے گا۔
  • اگلا، ایک GPG کلید پیدا کرنے کے عمل کو بہت خشک طریقے سے بیان کیا گیا ہے۔ مزید تفصیلات کے لیے سیکشن دیکھیں نمونے پر دستخط کرنے کے لیے GnuPG کو ترتیب دینا
  • اگر آپ GPG کلید (gnupg/gnupg2) بنانے کے لیے لینکس کنسول کا استعمال کرتے ہیں، تو آپ کو انسٹال کرنے کی ضرورت ہے آرجیجی آلات اینٹروپی پیدا کرنے کے لیے۔ بصورت دیگر، کلیدی جنریشن میں بہت وقت لگ سکتا ہے۔
  • ذخیرہ کرنے کی خدمات عوام جی پی جی کیز

مواد پر

GitLab میں ایک تعیناتی پروجیکٹ ترتیب دینا

  • سب سے پہلے، آپ کو ایک پروجیکٹ بنانے اور ترتیب دینے کی ضرورت ہے جس میں نمونے کی تعیناتی کے لیے پائپ لائن کو ذخیرہ کیا جائے گا۔ میں نے اپنے پروجیکٹ کا نام سادہ اور غیر پیچیدہ رکھا ہے۔ تعیناتی
  • ذخیرہ بنانے کے بعد، آپ کو ذخیرہ کو تبدیل کرنے کے لیے رسائی کو محدود کرنے کی ضرورت ہے۔
    پروجیکٹ -> سیٹنگز -> ریپوزٹری -> پروٹیکٹڈ برانچز پر جائیں۔ ہم تمام قواعد کو حذف کرتے ہیں اور صرف مینٹینرز کے کردار والے صارفین کے لیے پش اور ضم کرنے کے حق کے ساتھ وائلڈ کارڈ * کے ساتھ ایک اصول شامل کرتے ہیں۔ یہ اصول اس پروجیکٹ اور اس گروپ کے تمام صارفین کے لیے کام کرے گا جس سے یہ پروجیکٹ تعلق رکھتا ہے۔
    ماون سنٹرل پر جاوا پروجیکٹ اپ لوڈ کرنے کے لیے GitLab CI کو ترتیب دینا
  • اگر کئی دیکھ بھال کرنے والے ہیں، تو بہترین حل یہ ہوگا کہ اصولی طور پر اس منصوبے تک رسائی کو محدود کیا جائے۔
    پروجیکٹ پر جائیں -> ترتیبات -> عمومی -> مرئیت، پروجیکٹ کی خصوصیات، اجازتیں اور پروجیکٹ کی مرئیت کو سیٹ کریں ذاتی.
    میرے پاس عوامی طور پر قابل رسائی پروجیکٹ ہے، کیونکہ میں اپنا GitLab رنر استعمال کرتا ہوں اور صرف میرے پاس ذخیرہ کو تبدیل کرنے تک رسائی ہے۔ ٹھیک ہے، اصل میں، عوامی پائپ لائن لاگز میں نجی معلومات دکھانا میرے مفاد میں نہیں ہے۔
  • مخزن کو تبدیل کرنے کے قوانین کو سخت کرنا
    پروجیکٹ پر جائیں -> سیٹنگز -> ریپوزٹری -> پش رولز اور کمیٹر پابندی سیٹ کریں، چیک کریں کہ آیا مصنف گٹ لیب صارف فلیگ ہے۔ میں ترتیب دینے کی بھی سفارش کرتا ہوں۔ دستخط کا عہد کریں، اور غیر دستخط شدہ کمٹ کو مسترد کرنے کا جھنڈا سیٹ کریں۔
  • اگلا آپ کو کاموں کو شروع کرنے کے لیے ایک ٹرگر ترتیب دینے کی ضرورت ہے۔
    پروجیکٹ پر جائیں -> ترتیبات -> CI / CD -> پائپ لائن ٹرگرز اور ایک نیا ٹرگر ٹوکن بنائیں
    اس ٹوکن کو فوری طور پر منصوبوں کے گروپ کے لیے متغیرات کی عمومی ترتیب میں شامل کیا جا سکتا ہے۔
    گروپ -> ترتیبات -> CI / CD -> متغیرات پر جائیں اور ایک متغیر شامل کریں۔ DEPLOY_TOKEN قدر میں ٹرگر ٹوکن کے ساتھ۔

مواد پر

گٹ لیب رنر

یہ سیکشن آپ کے اپنے (مخصوص) اور عوامی (مشترکہ) رنر کا استعمال کرتے ہوئے تعیناتی پر کاموں کو چلانے کے لیے ترتیب کو بیان کرتا ہے۔

مخصوص رنر

میں اپنے رنر استعمال کرتا ہوں کیونکہ، سب سے پہلے، یہ آسان، تیز اور سستا ہے۔
ایک رنر کے لیے، میں 1 CPU، 2 GB RAM، 20 GB HDD کے ساتھ ایک Linux VDS تجویز کرتا ہوں۔ ایشو کی قیمت ~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
  • میون کیشے کے لئے ایک ڈائرکٹری بنائیں اور گروپ کی اجازتیں تفویض کریں۔ 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 Runner انسٹال کریں (Linux 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 کو ترتیب دینا

مواد پر

جی پی جی کیز تیار کی جا رہی ہیں۔

  • اسی مشین سے ہم صارف کے تحت ssh کے ذریعے لاگ ان ہوتے ہیں۔ gitlab-deployer (یہ جی پی جی کلید بنانے کے لیے اہم ہے)
    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>
  • سوناٹائپ اکاؤنٹ کے لیے پاس ورڈ کو خفیہ کرنا
    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 کلید بنانے کی ضرورت ہے۔ ایسا کرنے کے لیے، 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>
  • سوناٹائپ اکاؤنٹ کے لیے پاس ورڈ کو خفیہ کرنا
    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 کنفیگریشن

اس موضوع کو بڑی تفصیل سے بیان کیا گیا ہے۔ Googolplex в اسنیپ شاٹ اور سٹیجنگ ریپوزٹریز میں نمونے کو خود بخود سائن کرنے اور اپ لوڈ کرنے کے لیے ماون کو ترتیب دینا، تو میں پلگ ان کے استعمال کی کچھ باریکیوں کو بیان کروں گا۔ میں یہ بھی بیان کروں گا کہ آپ کتنا آسان اور آرام سے استعمال کر سکتے ہیں۔ nexus-staging-maven-pluginاگر آپ اپنے پروجیکٹ کے لیے org.sonatype.oss:oss-parent کو بطور والدین استعمال نہیں کرنا چاہتے یا استعمال نہیں کر سکتے۔

maven-install-plugin

مقامی ذخیرہ میں ماڈیولز انسٹال کرتا ہے۔
دوسرے منصوبوں میں حل کی مقامی تصدیق کے ساتھ ساتھ چیکسم کے لیے بہت مفید ہے۔

<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

پروجیکٹ کے لیے javadoc تیار کرنا۔

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

مزید فوائد

  • گٹھ جوڑ کے ذخیرے کے ساتھ کام کرنے کے اہداف کی ایک بہت ہی بھرپور فہرست (mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin).
  • ماون سینٹرل پر اپ لوڈ کرنے کے لیے خودکار ریلیز چیک

مواد پر

نتیجہ

سنیپ شاٹ ورژن شائع کیا جا رہا ہے۔

پروجیکٹ بناتے وقت، گٹھ جوڑ پر SNAPSHOT ورژن ڈاؤن لوڈ کرنے کے لیے دستی طور پر ایک ٹاسک لانچ کرنا ممکن ہے۔

ماون سنٹرل پر جاوا پروجیکٹ اپ لوڈ کرنے کے لیے 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 کو ترتیب دینا

مواد پر

ریلیز ورژن شائع کرنا

جب کوئی ٹیگ انسٹال ہوتا ہے، ڈیپلائی پروجیکٹ میں متعلقہ کام خود بخود ریلیز ورژن کو گٹھ جوڑ پر ڈاؤن لوڈ کرنے کے لیے متحرک ہوجاتا ہے (مثال کے طور پر).

ماون سنٹرل پر جاوا پروجیکٹ اپ لوڈ کرنے کے لیے 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 شامل کرنا پڑا کیونکہ اس نے میرے پرانے ذخیرے کو انڈیکس کیا تھا۔

مواد پر

حاصل يہ ہوا

جو ہمارے پاس ہے۔

  • ایک علیحدہ تعیناتی پروجیکٹ جس میں آپ مختلف ترقیاتی زبانوں کے لیے عوامی ذخیروں میں نمونے اپ لوڈ کرنے کے لیے کئی CI کاموں کو نافذ کر سکتے ہیں۔
  • Deploy پروجیکٹ بیرونی مداخلت سے الگ تھلگ ہے اور اسے صرف مالک اور مینٹینر کے کردار والے صارفین ہی تبدیل کر سکتے ہیں۔
  • ایک علیحدہ مخصوص رنر جس میں "ہاٹ" کیشے ہے تاکہ صرف کاموں کو تعینات کیا جا سکے۔
  • عوامی ذخیرہ میں سنیپ شاٹ/ریلیز ورژن شائع کرنا۔
  • ماون سینٹرل میں اشاعت کے لیے تیاری کے لیے ریلیز ورژن کی خودکار جانچ۔
  • ماون سینٹرل میں "خام" ورژن کی خودکار اشاعت کے خلاف تحفظ۔
  • "کلک پر" سنیپ شاٹ ورژن بنائیں اور شائع کریں۔
  • سنیپ شاٹ/ریلیز ورژن حاصل کرنے کے لیے ایک واحد ذخیرہ۔
  • جاوا پروجیکٹ کی تعمیر/ٹیسٹ/شائع کے لیے عمومی پائپ لائن۔

GitLab CI کو ترتیب دینا اتنا پیچیدہ موضوع نہیں ہے جتنا کہ پہلی نظر میں لگتا ہے۔ ایک دو بار ٹرن کی بنیاد پر CI کو ترتیب دینا کافی ہے، اور اب آپ اس معاملے میں شوقیہ سے بہت دور ہیں۔ مزید یہ کہ GitLab دستاویزات بہت بے کار ہیں۔ پہلا قدم اٹھانے سے نہ گھبرائیں۔ سڑک چلنے والے شخص کے قدموں کے نیچے نظر آتی ہے (مجھے یاد نہیں کہ یہ کس نے کہا تھا :)

میں رائے حاصل کرنے کے لئے خوش ہو جائے گا.

اگلے مضمون میں میں اس بارے میں بات کروں گا کہ GitLab CI کو انٹیگریشن ٹیسٹ کے ساتھ کاموں کو مسابقتی طور پر چلانے کے لیے (docker-compose کے ذریعے ٹیسٹ کے تحت خدمات چلانا) اگر آپ کے پاس صرف ایک شیل رنر ہے۔

مواد پر

ماخذ: www.habr.com