Github Action + Docker


このブログはたくさん参考になりました
私が今使っているプロジェクターでDockerのGithubアクションを使って
Github Actionは最も代表的なCI/CDツールの1つであり、コードを自動的に統合して導入することで、導入を簡素化できるという利点があります.ジェンキンスを使おうと思っていたのですが、ジェンキンスを使おうとすると、もう一つジェンキンスのために用意しなければならない例があり、Github Actionも経験があり、ちなみに~(当時はDockerを使わずにS 3を使っていました)
じゃあLet'sgo~🏃‍♀️🏃‍♀️🏃‍♀️

ながれていり

  • 主支路におけるプッシュ
  • Github Actionでは、
  • を「ビルドバックドック」センターにプッシュします.
  • の例では、イメージをdocker hubに引き寄せ、
  • を実行する.

    Githubアクション用のファイルの作成



    リポジトリでActionsをクリックして、複数のテンプレートを選択します.そこからGradleテンプレートを選択!
    これにより、ルートディレクトリに/.github/workflow/gradle.ymlファイルを作成できます.
    # This workflow uses actions that are not certified by GitHub.
    # They are provided by a third-party and are governed by
    # separate terms of service, privacy policy, and support
    # documentation.
    # This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
    # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
    
    name: Java CI with Gradle
    
    # main 브랜치에 푸시하거나 pr 하면 이 플로우 실행
    on:
      push:
        branches: [ main ]
      pull_request:
        branches: [ main ]
    
    jobs:
      build:
    
        runs-on: ubuntu-latest
    
        steps:
        # jdk 11 set up
        - uses: actions/checkout@v2
        - name: Set up JDK 11
          uses: actions/setup-java@v2
          with:
            java-version: '11'
            distribution: 'temurin'
        # gradle 로 src build
        - name: Build with Gradle
          uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
          with:
            arguments: build
        # Docker에 빌드 된 이미지 push
        - name: Docker build
          run: |
            docker login -u ${{ secrets.USERNAME }} -p ${{ secrets.PASSWORD }}
            docker build -t spring-cicd .
            docker tag spring-cicd s2moon98/spring-cicd:${GITHUB_SHA::7}
            docker push s2moon98/spring-cicd:${GITHUB_SHA::7}
        # instance에 배포
        - name: Deploy
          uses: appleboy/ssh-action@master
          with:
            host: 146.56.130.233
            username: ubuntu
            key: ${{ secrets.PRIVATE_KEY }}
            envs: GITHUB_SHA
            script: |
              docker pull s2moon98/spring-cicd:${GITHUB_SHA::7}
              docker tag s2moon98/spring-cicd:${GITHUB_SHA::7} spring-cicd
              docker stop server
              docker run -d --rm --name server -p 8080:8080 spring-cicd
    ポート関連エラー解決
    最初はdocker run -d --rm --name server -p 80:8080 spring-cicdでdocker psを試してみるとブイが外部から接続できないという問題がありました.グーグルにも私のような状況はありません.ただし、curl localhost:80はインスタンスに接続されています.
    そこで考えてみると、すでにこのサーバにポート転送80->8080を設定していたので、外部接続は無条件に8080に入り、サーバ内もDockerコマンドで80ポートしか開かなかったので、接続は拒否されました!dockerコマンドで8080を開くように設定したら、解決しました~🌻

    サーバインスタンスでの作業


    インスタンスにdockerをインストールします.Ubuntu環境ですapt-getを使いますdocker --versionに取り付けられていることを確認した後.
    導入用の鍵を生成!
    この鍵は、接続インスタンスのようにssh鍵ペアも使用される.
    ssh-actionを使用してGithubアクションを展開するための鍵を生成


    readmeドキュメントに示すように、rsa方式で鍵ペアが作成され、公開鍵はインスタンスに.ssh/authorized_keys2に繰り返し貼り付けられる.そして要求に従ってchmodを使用して権限を設定します
    公開鍵エラー解決策-2
    最初はインスタンスを接続するための公開鍵をインスタンスの.ssh/authorized_keysに保存していたので、もちろんこのファイルは公開鍵を保存するファイルだと思って、ここに追加して保存しました.でもずっとpublic keyが見つからなかったのでエラーでreadmeドキュメントを見たらauthorized_keys2ドキュメントだった~公式ドキュメントをしっかり見てね~!
    Googleはもともとauthorized keysに格納できるが、私の場合、サーバに格納すべき公開鍵は複数の特殊な場合である.
    次にDockerfileを作成し、Docker hubに画像をプッシュします.
    FROM openjdk:11.0.10-jre-slim-buster
    ARG JAR_FILE=build/libs/picture-diary-0.0.1-SNAPSHOT.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java", "-jar", "/app.jar"]
    構築したjarファイルをコピーして実行する、かなり簡単なDockerfileです.
    完成したコードをmainにプッシュ?!

    長らく盛名を受けている.😭