באַשטעטיקן GitLab CI צו ופּלאָאַד אַ ז'אבא פּרויעקט צו מאַווען סענטראַל

דער אַרטיקל איז בדעה פֿאַר ז'אבא דעוועלאָפּערס וואָס דאַרפֿן צו געשווינד אַרויסגעבן זייער פּראָדוקטן צו סאָנאַטיפּע און / אָדער מאַווען הויפט ריפּאַזאַטאָריז ניצן GitLab. אין דעם אַרטיקל, איך וועל רעדן וועגן באַשטעטיקן גיטלאַב-ראַנער, גיטלאַב-סי און מאַווען-פּלוגין צו סאָלווע דעם פּראָבלעם.

פּרירעקוואַזאַץ:

  • זיכער סטאָרידזש פון mvn און GPG שליסלען.
  • זיכער דורכפירונג פון ציבור סי טאַסקס.
  • ופּלאָאַדינג אַרטאַפאַקץ (מעלדונג / מאָמענטבילד) צו ציבור ריפּאַזאַטאָריז.
  • אָטאַמאַטיק טשעק פון מעלדונג ווערסיעס פֿאַר ארויסגעבן אין מאַווען סענטראַל.
  • א גענעראַל לייזונג פֿאַר ופּלאָאַדינג אַרטאַפאַקץ צו אַ ריפּאַזאַטאָרי פֿאַר קייפל פּראַדזשעקס.
  • פּאַשטעס און יז פון נוצן.

צופרידן

אַלגעמיינע אינפֿאָרמאַציע

  • א דיטיילד באַשרייַבונג פון די מעקאַניזאַם פֿאַר ארויסגעבן אַרטאַפאַקץ צו Maven Central דורך די Sonatype OSS ריפּאַזאַטאָרי האָסטינג סערוויס איז שוין דיסקרייבד אין די ארטיקל באַניצער גאָאָגאָלפּלעקס, אַזוי איך וועל אָפּשיקן צו דעם אַרטיקל אין די רעכט ערטער.
  • פאַר-רעגיסטרירן בייַ סאָנאַטיפּע JIRA און אָנהייב אַ בילעט צו עפֿענען די ריפּאַזאַטאָרי (פֿאַר מער דעטאַילס, לייענען דעם אָפּטיילונג שאַפֿן אַ Sonatype JIRA בילעט). נאָך עפן די ריפּאַזאַטאָרי, די JIRA לאָגין / פּאַראָל פּאָר (דערנאָך ריפערד צו ווי די סאָנאַטיפּע חשבון) וועט זיין געוויינט צו צופֿעליקער אַרטאַפאַקץ צו די סאָנאַטיפּע נעקסוס.
  • דער פּראָצעס פון דזשענערייטינג אַ GPG שליסל איז זייער דריילי דיסקרייבד. זען די אָפּטיילונג פֿאַר מער דעטאַילס. קאַנפיגיער GnuPG צו צייכן אַרטאַפאַקץ
  • אויב איר נוצן די לינוקס קאַנסאָול צו דזשענערייט אַ GPG שליסל (gnupg/gnupg2), איר דאַרפֿן צו ינסטאַלירן רנג-מכשירים צו פּראָדוצירן ענטראָפּי. אַנדערש, שליסל דור קענען נעמען אַ זייער לאַנג צייט.
  • סטאָרידזש באַדינונגען עפנטלעך גפּג שליסלען

צום אינהאַלט

באַשטעטיקן אַ צעוויקלען פּרויעקט אין GitLab

  • ערשטער פון אַלע, איר דאַרפֿן צו שאַפֿן און קאַנפיגיער אַ פּרויעקט אין וואָס די רערנ - ליניע וועט זיין סטאָרד פֿאַר די דיפּלוימאַנט פון אַרטאַפאַקץ. איך גערופן מיין פּרויעקט פשוט און אַנקאַמפּלאַקייטיד - צעוויקלען
  • נאָך קריייטינג די ריפּאַזאַטאָרי, איר דאַרפֿן צו באַגרענעצן אַקסעס צו טוישן די ריפּאַזאַטאָרי.
    גיין צו די פּרויעקט -> סעטטינגס -> ריפּאַזאַטאָרי -> פּראָטעקטעד בראַנטשעס. מיר ויסמעקן אַלע כּללים און לייגן אַ איין הערשן מיט ווילדקאַרד * מיט די רעכט צו שטופּן און צונויפגיסן בלויז פֿאַר ניצערס מיט די מאַינטאַינער ראָלע. דער הערשן וועט אַרבעטן פֿאַר אַלע יוזערז פון ביידע דעם פּרויעקט און די גרופּע צו וואָס די פּרויעקט געהערט.
    באַשטעטיקן GitLab CI צו ופּלאָאַד אַ ז'אבא פּרויעקט צו מאַווען סענטראַל
  • אויב עס זענען עטלעכע מאַינטערייטערז, דער בעסטער לייזונג איז צו באַגרענעצן אַקסעס צו די פּרויעקט אין פּרינציפּ.
    גיין צו די פּרויעקט -> סעטטינגס -> אַלגעמיינע -> וויזאַביליטי, פּרויעקט פֿעיִקייטן, פּערמישאַנז און שטעלן פּראָיעקט וויזאַביליטי צו פּריוואַט.
    איך האָבן אַ פּרויעקט אין ציבור אַקסעס, ווייַל איך נוצן מיין אייגענע GitLab Runner און בלויז איך האָבן אַקסעס צו מאָדיפיצירן די ריפּאַזאַטאָרי. נו, עס איז נישט אין מיין אינטערעסן צו ווייַזן פּריוואַט אינפֿאָרמאַציע אין ציבור רערנ - ליניע לאָגס.
  • טייטנינג די כּללים פֿאַר טשאַנגינג די ריפּאַזאַטאָרי
    גיין צו די פּרויעקט -> סעטטינגס -> ריפּאַזאַטאָרי -> פּוש כּללים און שטעלן די פלאַגס קאַמיטער ריסטריקשאַן, קוק צי דער מחבר איז אַ גיטלאַב באַניצער. איך אויך רעקאָמענדירן באַשטעטיקן טוען סיינינג, און שטעלן די אָפּוואַרפן אַנסיינד קאַמיץ פאָן.
  • ווייַטער, איר דאַרפֿן צו קאַנפיגיער אַ צינגל צו לויפן טאַסקס
    גיין צו פּרויעקט -> סעטטינגס -> סי / סי -> רערנ - ליניע טריגערז און שאַפֿן אַ נייַ צינגל-סימען
    דעם סימען קענען זיין גלייך מוסיף צו די אַלגעמיינע קאַנפיגיעריישאַן פון וועריאַבאַלז פֿאַר אַ גרופּע פון ​​פּראַדזשעקס.
    גיין צו די גרופּע -> סעטטינגס -> סי / סי -> וועריאַבאַלז און לייגן אַ בייַטעוודיק DEPLOY_TOKEN מיט צינגל-סימען אין די ווערט.

צום אינהאַלט

GitLab Runner

דער אָפּטיילונג באשרייבט די קאַנפיגיעריישאַן פֿאַר פליסנדיק טאַסקס מיט די געבוירענער (ספּעציפיש) און עפנטלעך (שאַרעד) ראַנער.

ספּעציפיש ראַנער

איך נוצן מיין אייגענע ראַנערז, ווייַל ערשטער פון אַלע עס איז באַקוועם, שנעל, ביליק.
פֿאַר לויפער איך רעקאָמענדירן לינוקס וודס מיט 1 קפּו, 2 גיגאבייט באַראַן, 20 גיגאבייט הדד. אַרויסגעבן פּרייַז ~ 3000₽ פּער יאָר.

מיין לויפער

פֿאַר די לויפער איך גענומען VDS 4 קפּו, 4 גיגאבייט באַראַן, 50 גיגאבייט ססד. עס קאָס ~ 11000₽ און קיינמאָל ריגרעטיד עס.
איך האָבן אַ גאַנץ פון 7 מאשינען. 5 אויף אַרובאַ און 2 אויף איהאָר.

אַזוי, מיר האָבן אַ לויפער. איצט מיר וועלן שטעלן עס אַרויף.
מיר גיין צו די מאַשין דורך SSH און ינסטאַלירן Java, Git, Maven, Gnupg2.

צום אינהאַלט

ינסטאָלינג גיטלאַב ראַנער

  • שאַפֿן אַ נייַע גרופּע 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 -> דיפּלוי-פּראָיעקט -> סעטטינגס -> סי / סי -> ראַנערז -> ספּעציפיש ראַנערז און נאָכמאַכן די רעגיסטראַציע סימען

סקרין

באַשטעטיקן 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 -> דיפּלוי-פּראָיעקט -> סעטטינגס -> סי / סי -> ראַנערז -> ספּעציפיש ראַנערז -> ראַנערז אַקטיווייטיד פֿאַר דעם פּרויעקט

סקרין

באַשטעטיקן 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 (דאָס איז וויכטיק פֿאַר 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

צום אינהאַלט

מאַווען סעטאַפּ

  • מיר גיין אונטער די באַניצער gitlab-deployer
    su gitlab-deployer 
  • שאַפֿן אַ מאַווען וועגווייַזער repository און לינק מיט די קאַש (מאַכן קיין גרייַז)
    דעם שריט קענען זיין סקיפּט אויב איר טאָן ניט פּלאַן צו לויפן עטלעכע ראַנערז אויף דער זעלביקער מאַשין.

    mkdir -p ~/.m2/repository
    ln -s /usr/cache/.m2/repository /home/gitlab-deployer/.m2/repository
  • שאַפֿן אַ בעל שליסל
    mvn --encrypt-master-password password
    {hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}
  • שאַפֿן טעקע ~/.מ2/סעטטינגס-סעקוריטי.קסמל
    <settingsSecurity>
    <master>{hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}</master>
    </settingsSecurity>
  • ענקריפּטינג די פּאַראָל פֿון די סאָנאַטיפּע חשבון
    mvn --encrypt-password SONATYPE_PASSWORD
    {98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}
  • שאַפֿן טעקע ~/.מ2/סעטטינגס.קסמל
    <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 - גפּג שליסל פּאַראָל
SONATYPE_USERNAME - סאָנאַטיפּע חשבון לאָגין

דעם קאַמפּליץ די ראַנער סעטאַפּ, איר קענען גיינ ווייַטער צו די אָפּטיילונג גיטלאַב סי

צום אינהאַלט

שערד ראַנער

דור פון גפּג שליסלען

  • ערשטער פון אַלע, איר דאַרפֿן צו שאַפֿן אַ גפּג שליסל. צו טאָן דאָס, ינסטאַלירן 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-----

  • גיין צו פּרויעקט סעטטינגס -> סעטטינגס -> סי / סי -> וועריאַבאַלז און ראַטעווען די פּריוואַט שליסל אין אַ בייַטעוודיק GPG_SECRET_KEY
    באַשטעטיקן GitLab CI צו ופּלאָאַד אַ ז'אבא פּרויעקט צו מאַווען סענטראַל

צום אינהאַלט

מאַווען סעטאַפּ

  • שאַפֿן אַ בעל שליסל
    mvn --encrypt-master-password password
    {hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}
  • גיין צו פּרויעקט סעטטינגס -> סעטטינגס -> סי / קאָמפּאַקטדיסק -> וועריאַבאַלז און ראַטעווען אין אַ בייַטעוודיק SETTINGS_SECURITY_XML די פאלגענדע שורות:
    <settingsSecurity>
    <master>{hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}</master>
    </settingsSecurity>
  • ענקריפּטינג די פּאַראָל פֿון די סאָנאַטיפּע חשבון
    mvn --encrypt-password SONATYPE_PASSWORD
    {98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}
  • גיין צו פּרויעקט סעטטינגס -> סעטטינגס -> סי / קאָמפּאַקטדיסק -> וועריאַבאַלז און ראַטעווען אין אַ בייַטעוודיק 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 - גפּג שליסל פּאַראָל
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 צו דער וואָרצל פון די צעוויקלען פּרויעקט
דער שריפט גיט צוויי מיוטשואַלי ויסשליסיק דיפּלוימאַנט טאַסקס. ספּעציפיש ראַנער אָדער שערד ראַנער ריספּעקטיוולי.

.גיטלאב-סי.ימל

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

צום אינהאַלט

Java פּרויעקט

אין דזשאַוואַ פּראַדזשעקס וואָס זענען געמיינט צו זיין ופּלאָאַדעד צו ציבור ריפּאַזאַטאָריז, איר דאַרפֿן צו לייגן 2 סטעפּס צו אָפּלאָדירן די מעלדונג און סנאַפּשאָט ווערסיעס.

.גיטלאב-סי.ימל

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 מוסטער פֿאַר ז'אבא פראיעקטן 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 קוקט זייער סאָליד און נישט ווערבאָוס

.גיטלאב-סי.ימל

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

צום אינהאַלט

פּאָמ.קסמל קאַנפיגיעריישאַן

די טעמע איז דיסקרייבד אין גרויס דעטאַל. גאָאָגאָלפּלעקס в באַשטעטיקן מאַווען צו אויטאָמאַטיש צייכן און ופּלאָאַד אַרטאַפאַקץ צו מאָמענטבילד און סטאַגינג ריפּאַזאַטאָריז, אַזוי איך וועל באַשרייַבן עטלעכע פון ​​די נואַנסיז פון ניצן פּלוגינס. איך וועל אויך באַשרייַבן ווי לייכט און געוויינטלעך איר קענען נוצן 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>

צום אינהאַלט

מאַווען-דזשאַוואַדאָק-פּלוגין

דזשענערייטינג דזשאַוואַדאָק פֿאַר די פּרויעקט.

<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>

אויב איר האָבן אַ מאָדולע וואָס טוט נישט אַנטהאַלטן דזשאַוואַ (פֿאַר בייַשפּיל בלויז רעסורסן)
אָדער איר טאָן נישט וועלן צו דזשענערייט דזשאַוואַדאָק אין פּרינציפּ, דעריבער צו העלפן 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>

צום אינהאַלט

מאַווען-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>

אויב איר האָבן אַ מאַלטי-מאָדולע פּרויעקט, און איר טאָן ניט דאַרפֿן צו צופֿעליקער אַ ספּעציפיש מאָדולע צו די ריפּאַזאַטאָרי, איר דאַרפֿן צו לייגן צו די pom.xml פון דעם מאָדולע. 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 ווערסיע

ווען איר בויען אַ פּרויעקט, עס איז מעגלעך צו מאַניואַלי אָנהייבן אַ אַרבעט צו אָפּלאָדירן די 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-SNAPSHOT.

כל מאָמענטבילד ווערסיעס קענען זיין אַוועקגענומען פון די ריפּאַזאַטאָרי אויף דעם פּלאַץ 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 צו ופּלאָאַד אַ ז'אבא פּרויעקט צו מאַווען סענטראַל

אָפטאָפּיק

עס איז געווען אַ התגלות צו מיר אַז מאַווען ינדעקסיז אנדערע ציבור ריפּאַזאַטאָריז.
איך האט צו ופּלאָאַד ראָובאַץ.טקסט ווייַל עס ינדעקסט מיין אַלט ריפּאַזאַטאָרי.

צום אינהאַלט

סאָף

וואָס מיר האָבן

  • א באַזונדער צעוויקלונג פּרויעקט אין וואָס איר קענען ינסטרומענט עטלעכע סי טאַסקס פֿאַר ופּלאָאַדינג אַרטאַפאַקץ צו ציבור ריפּאַזאַטאָריז פֿאַר פאַרשידן אַנטוויקלונג שפּראַכן.
  • די דיפּלוימאַנט פּרויעקט איז אפגעזונדערט פון אַרויס ינטערפיראַנס און קענען זיין מאַדאַפייד בלויז דורך ניצערס מיט די אָונערז און מאַינטאַינער ראָלעס.
  • א באַזונדער ספּעציפֿיש ראַנער מיט אַ "הייס" קאַש צו לויפן בלויז צעוויקלען טאַסקס.
  • ויסגאַבע פון ​​מאָמענטבילד / מעלדונג ווערסיעס אין אַ ציבור ריפּאַזאַטאָרי.
  • אָטאַמאַטיק טשעק פון די מעלדונג ווערסיע פֿאַר גרייטקייַט פֿאַר ארויסגעבן אין מאַווען סענטראַל.
  • שוץ קעגן אָטאַמאַטיק ארויסגעבן פון "רוי" ווערסיעס אין מאַווען סענטראַל.
  • בויען און אַרויסגעבן מאָמענטבילד ווערסיעס "אויף גיט".
  • איין ריפּאַזאַטאָרי פֿאַר באַקומען מאָמענטבילד / מעלדונג ווערסיעס.
  • אַלגעמיינע רערנ - ליניע פֿאַר בנין / טעסטינג / ארויסגעבן אַ דזשאַוואַ פּרויעקט.

באַשטעטיקן GitLab CI איז נישט אַזוי קאָמפּליצירט טעמע ווי עס מיינט אין ערשטער בליק. עס איז גענוג צו שטעלן CI אויף אַ טערנקי יקער עטלעכע מאָל, און איצט איר ניטאָ ווייַט פון אַ ליבהאָבער אין דעם ענין. דערצו, GitLab דאַקיומענטיישאַן איז זייער יבעריק. דו זאלסט נישט זיין דערשראָקן צו נעמען די ערשטער שריט. דער וועג ארויס אונטער די טרעפ פון דעם מענטש גיין (איך טאָן ניט געדענקען ווער האט עס :)

איך וועל זיין צופרידן צו געבן באַמערקונגען.

אין דער ווייַטער אַרטיקל, איך וועט ווייַזן איר ווי צו שטעלן GitLab CI צו לויפן קאַמפּעטיטיוו ינטאַגריישאַן פּרובירן טאַסקס (פליסנדיק פּרובירן באַדינונגס מיט דאָקער-קאָמפּאָסע) אויב איר נאָר האָבן איין שאָל ראַנער.

צום אינהאַלט

מקור: www.habr.com

לייגן אַ באַמערקונג