を使用してスプリングブートアプリケーション



概要
この記事では、GitLab CI/CDを使用して、サーバーインスタンスにSpring Boot Webアプリケーションをビルド、テスト、配備する方法を検討していきます.
Gitlabは無制限の無料プライベートリポジトリとCI/CDランナーの2000分の寛大な提供しています.
我々はGITLABをこの記事で我々のクラウドGitリポジトリとして使用しています.

アプリケーションの設定
この記事の目的のために、我々は簡単なスプリングブートアプリケーションを作成しますSpring Initializr .
生成されたプロジェクト、POMをダウンロードした後.XMLは次のようになります.
<dependencies>                                             
    <dependency>                                           
        <groupId>org.springframework.boot</groupId>        
        <artifactId>spring-boot-starter-web</artifactId>   
    </dependency>                                          

    <dependency>                                           
        <groupId>org.springframework.boot</groupId>        
        <artifactId>spring-boot-starter-test</artifactId>  
        <scope>test</scope>                                
    </dependency>                                          
</dependencies>                                            
次に、インデックスエンドポイントのコントローラマッピングを作成します.エンドポイントは、現在のタイムスタンプで連結されたHello World文字列を返します.
@Controller                                           
public class IndexController {                        

    @GetMapping("/")                                  
    @ResponseBody                                     
    public String index() {                           
        return "Hello World " + LocalDateTime.now();  
    }                                                 

}
我々は、アプリケーションと訪問を開始することによって、新しいエンドポイントをテストすることができますhttp://localhost:8080 我々のブラウザから、我々はHello Worldストリングを見なければなりません.
我々は作業アプリケーションを持っているので、我々はGitLabで新しいプロジェクトを作成する必要があります、ローカルコードをコミットし、それをGitLabによって生成されたプロジェクトのURLを使用してリモートのRPOにプッシュする必要があります.
ローカルマシン上のプロジェクトのルートディレクトリから次のコマンドを実行しましょう.
git init

git add .

git commit -m "initial commit"

git remote add origin https://gitlab.com/SeunMatt/gitlab-ci-demo.git

git push origin master
プロジェクトのURLは、選択したユーザー名とプロジェクト名によって多少異なります.

サーバの設定
このチュートリアルでは、新しいデジタルドロップレットを作成し、JRE(Java実行環境)とNGinXをインストールします.
NGinxは、ポート8080で動作し、HTTP 8047トラフィックを転送します.
私たちはterraform設定ファイルをanother article 液滴を供給する.

GITLAB CI/CD
このセクションでは、新しい変更を押すたびにGitLabをどのように設定してスプリングブートアプリケーションを自動配備するかを確認します.
足し算で始めましょう.Gitlab CIYMLのプロジェクトには、サーバー上の新しいCI/CDユーザーを作成し、最終的に必要なスクリプトを使用してパイプラインを定義します.

アプリケーションビル
GITLAB CI/CDを使用するためには、追加する必要があります.Gitlab CIYMLファイルをプロジェクトディレクトリのルートにします.
.Gitlab CIYMLは、実行するジョブを定義する単純な平文ファイルで、各ジョブで実行するスクリプトを定義します.
を作成しましょう.Gitlab CIプロジェクトのルートディレクトリに含まれるYMLファイルは次の内容になります.
stages:
 - build
 - deploy
上記のスニペットは、彼らが現れる順序で実行する2つのステージを定義します.
1つ以上のジョブのグループ化としてステージを見ることができます.異なるステージの組み合わせはパイプラインを作る.
各ステージの名前は、その中のジョブの種類を反映する必要があります.
たとえば、ビルド段階ではJARファイルとしてアプリケーションをテストしてパッケージ化するジョブがありますが、展開段階では生成されたJARファイルをサーバーにコピーするジョブが含まれます.
Mavenパッケージコマンドを実行し、単一のJARファイルを生成するジョブを定義しましょう.Mavenビルドを呼び出します.
maven-build:
  image: maven:3-jdk-11
  stage: build
  script: "mvn package -B"
  artifacts:
    paths:
      - target/gitlab-ci-demo.jar
上記のスニペットでは、Mavenバージョン3とJDK 11を含むDockerコンテナを使用するように設定しました.
stageキーワードは、このジョブがビルドステージに属していることを示し、スクリプトキーワードは、準備が完了したら、どのようなコマンドをDockerコンテナで実行するかを示します.
もう一つの特別なキーワードは、アーティファクトです.GITLAB CI/CDランナーにスクリプトスクリプトの最終結果を保存するよう指示します.
この場合、我々は最後のJARファイルを保持しています.
完了.Gitlab CIYMLファイルは次のようになります.
stages:                          
 - build                         
 - deploy                        

maven-build:                     
  image: maven:3-jdk-11          
  stage: build                   
  script: "mvn package -B"       
  artifacts:                     
    paths:                       
      - target/gitlab-ci-demo.jar
これをアクションで見るには、gitlabに変更をコミットしてプッシュしましょう.Gitlabは自動的に検出します.Gitlab CIYMLファイルとトリガgitlab ci/cdランナー.
GITLABで実行中のジョブの進行状況を監視することができます.

実行中のボタンをクリックすると、別のコマンドからライブ出力が表示されます.
ビルドが完了すると、実行中のボタンが緑色に変わり、テキストが渡されます.


アプリケーション展開
我々の展開プロセスのために、我々は最初にCI/CDユーザを我々のサーバーに作成します.
JARファイルがサーバー上にあると、サーバーにsshされ、JARファイルを適切なディレクトリに移動し、SystemCtlを使用してアプリケーションサービスを再起動します.
以前にプロビジョニングされたサーバインスタンスにsshして、以下のコマンドを実行してCI/CDユーザを作成して設定しましょう.
adduser --quiet --shell $SHELL --disabled-password --gecos 'GitlabCI User' gitlab-ci

usermod -a -G sudo gitlab-ci

echo 'gitlab-ci:changemepassword' | chpasswd

printf 'Match User gitlab-ci\n\tPasswordAuthentication yes\n' >> /etc/ssh/sshd_config

systemctl restart sshd

echo 'gitlab-ci ALL=(ALL) NOPASSWD: /bin/mv, NOPASSWD: /usr/bin/systemctl, NOPASSWD: /bin/cp' | sudo EDITOR='tee -a' visudo
まず、新しいユーザgitlab ciを作成し、ユーザ名のパスワードをchangemepasswordに変更します.
それから、我々は我々の新しいユーザーにパスワードを通して認証するのを許して、SSHDサービスを再起動させるためにsshung configファイルを更新しました.
最後のコマンドは非常に重要です.
私たちは、sudoパスワードを供給するために人間の介入を欠いた自動化されたプロセスでユーザを使用するので、これをセットする必要があります.
GitLabのパスワードをgitlabの環境変数として追加する必要があります.Gitlab CIYMLファイル.
そのためには、GitLabアカウント>>設定>> ci/cd >>変数にログインする必要があります.
変数セクションを展開したら、ボタンをクリックして新しい変数を追加します.

今私たちのユーザーを作成し、gitlab上でci/cd変数にユーザーのパスワードを追加しました、私たちの更新しましょう.Gitlab CI展開ジョブを使用したYMLファイル
deploy-master:                                                                                                                                  
  before_script:                                                                                                                                
    - apt-get update -qq && apt-get install -y -qq sshpass                                                                                      
  stage: deploy                                                                                                                                 
  script:                                                                                                                                       
    - sshpass -V                                                                                                                                
    - export SSHPASS=$CI_USER_PASS                                                                                                              
    - sshpass -e scp -o StrictHostKeyChecking=no target/gitlab-ci-demo.jar [email protected]:/home/gitlab-ci                            
    - sshpass -e ssh -tt -o StrictHostKeyChecking=no [email protected] sudo mv /home/gitlab-ci/gitlab-ci-demo.jar /opt/java/webapps     
    - sshpass -e ssh -tt -o StrictHostKeyChecking=no [email protected] sudo systemctl restart gitlab-ci-demo.service                                                                                                                                                                 
このジョブ定義では、スクリプトのタグの中で他のコマンドを実行する前に、どのようなコマンドをサーバ上で実行すべきかを指定する前に、Thin - Countスクリプトを使用します.
さらに、スクリプトのセクションでは、現在の環境にSSHパスとしてCIユーザーのパスワードをエクスポートしました.
そうすることによって、sshpassは環境変数sshpassの値でSSHとSCPコマンドからパスワードプロンプトに自動的に応えます
我々が実行したsshコマンドは非常に簡単です、私たちは最初にscpを使用してファイルをサーバーにコピーし、次にファイルを正しいディレクトリに移動し、SystemTCTLを使ってサービスを再起動します.
完了.Gitlab CIyml fillには以下の内容があります:
stages:                                                                                                                                         
 - build                                                                                                                                        
 - deploy                                                                                                                                       

maven-build:                                                                                                                                    
  image: maven:3-jdk-11                                                                                                                         
  stage: build                                                                                                                                  
  script: "mvn package -B"                                                                                                                      
  artifacts:                                                                                                                                    
    paths:                                                                                                                                      
      - target/gitlab-ci-demo.jar                                                                                                               

deploy-master:                                                                                                                                  
  before_script:                                                                                                                                
    - apt-get update -qq && apt-get install -y -qq sshpass                                                                                      
  stage: deploy                                                                                                                                 
  script:                                                                                                                                       
    - sshpass -V                                                                                                                                
    - export SSHPASS=$CI_USER_PASS                                                                                                              
    - sshpass -e scp -o StrictHostKeyChecking=no target/gitlab-ci-demo.jar [email protected]:/home/gitlab-ci                            
    - sshpass -e ssh -tt -o StrictHostKeyChecking=no [email protected] sudo mv /home/gitlab-ci/gitlab-ci-demo.jar /opt/java/webapps     
    - sshpass -e ssh -tt -o StrictHostKeyChecking=no [email protected] sudo systemctl restart gitlab-ci-demo.service                    

私たちの変更をコミットしてプッシュしましょう.いつものように、gitlabは自動的にランナーを起動し、パイプラインの進行状況を監視できます.
一旦パイプラインが通過したら、我々のドメイン/IPアドレスに移動して、我々のウェブアプリケーションを走らせるのを見ます.

付加する
我々がこれまでに設定したもので、我々が我々のGITリポジトリにプッシュするたびに、gitlabは構築して、配備します.
我々はマスターにプッシュする場合にのみGitLabを展開する場合はどうなりますか?配備マスタにルールタグを追加することで簡単に実現できます.
deploy-master:                                                                                                                              
  rules:                                                                                                                                    
    - if: '$CI_COMMIT_BRANCH =~ /^master$/'                                                                                                 
  before_script:                                                                                                                            
    - apt-get update -qq && apt-get install -y -qq sshpass                                                                                  
  stage: deploy                                                                                                                             
  script:                                                                                                                                   
    - sshpass -V                                                                                                                            
    - export SSHPASS=$CI_USER_PASS                                                                                                          
    - sshpass -e scp -o StrictHostKeyChecking=no target/gitlab-ci-demo.jar [email protected]:/home/gitlab-ci                        
    - sshpass -e ssh -tt -o StrictHostKeyChecking=no [email protected] sudo mv /home/gitlab-ci/gitlab-ci-demo.jar /opt/java/webapps 
    - sshpass -e ssh -tt -o StrictHostKeyChecking=no [email protected] sudo systemctl restart gitlab-ci-demo.service                
このように、マスター以外の他のブランチにプッシュすると、Mavenのビルドジョブだけが実行されます.
ただし、マスターブランチにマージしたりプッシュしたりする場合は、Mavenビルドと配備マスタの両方が実行されます.

結論
この記事では、GitLab上のCI/CDパイプラインの設定の基礎を見てみました.
GITLAB CI/CDは、これらのより多くの機能と機能を持って、私はあなたが読んでくださいofficial documentation もっと知る.完全なソースコードはavailable on Gitlab .