Github: Github 운영 개요 및 Argo CD 배포 예


Github Actions은 실제로 TravisCI과 매우 비슷하지만 Github와 더욱 밀접하게 통합되어 있으며 인터페이스도 Github WebUI에 포함되어 있습니다.

따라서 이 능력을 더욱 자세히 살펴보고 어떻게 사용하는지 다음 게시물에서 이 자체 트랜잭션 프로그램을 Kubernetes 그룹에 배치하고 CI/CD 파이프라인을 구축하며 Github 작업과 ArgoCD 배치 프로그램을 사용할 것입니다.
  • Github Actions pricing
  • Github Actions: an overview
  • A workflow file structure
  • Getting started: Creating workflow file
  • Events
  • Manual trigger — workflow_dispatch
  • Workflow inputs
  • Webhooks: create
  • Environment variables
  • Secrets
  • Conditions and if
  • needs — jobs dependency
  • Actions
  • An ArgoCD application
  • Github Actions workflow for ArgoCD
  • Github Playbook 가격


    파일 번호는 here>>>입니다.
    GitHub 작업은 모든 계정 유형에 대해 무료이지만 몇 가지 제한 사항이 있습니다.

    예를 들어 GitHub팀을 사용하기 때문에 우리는 매달 2G바이트와 3000분의 시간을 가질 수 있다.
    따라서 Linux, macOS 및 Windows의 분 수는 달라집니다.

    즉, 만약에 우리가 맥OS 에이전트를 사용한다면 우리의 3000분 총수에서 우리는 300분만 사용할 수 있고 1분을 늘릴 때마다 추가 자금이 필요하다.

    또한 Github 작업은 Github 클라우드에서 실행할 수 있고 as self-hosted runners은 보안 자원에 접근하는 문제를 해결할 수 있습니다. Github는 정적 IP 범위가 없기 때문에 Security Group/방화벽을 설정할 수 없습니다.
    Github suggests 업데이트 네트워크가 있는 json 파일을 정기적으로 다운로드합니다. (참고로 Github Actions는 Microsoft Azure을 처리하고 있습니다.) 하지만 너무 게으르기 때문에 보안 설정을 업데이트하기 위한 추가 자동화를 만들 수 없습니다.

    Github 작업: 개요


    이러한 작업에서 구축 프로세스는 다음과 같습니다(Introduction to GitHub Actions 참조).
  • 이벤트(예: 요청을 끌어오거나 저장소에 제출할 경우 전체 목록 here>>>)에서 작업이 포함된 워크플로우를 트리거합니다.
  • 작업에는 하나 이상의 작업으로 구성된 단계 목록이 포함되어 있습니다.

  • 작업 흐름의 여러 작업이 동시에
  • 을 실행할 수 있는 실행 프로그램에서 실행
    주요 구성 요소는 다음과 같습니다.

  • runner: Github 클라우드 또는 호스팅된 서버에서
  • 작업 수행

  • 워크플로우: 이벤트
  • 에서 트리거하는 하나 이상의 작업을 포함하는 YAML의 프로세스

  • 숙제: 같은 주자에서 운행하는 절차.워크플로에 여러 작업이 있는 경우 기본적으로 워크플로는 병렬로 시작되지만
  • 에 의존하도록 구성할 수도 있습니다.

  • 단계: 일반적인 명령이나 동작을 수행하는 작업.같은 작업의 절차가 같은 실행 프로그램에서 실행되기 때문에 그들은 서로 데이터를 공유할 수 있다.

  • 작업: 주요 블록 실행 — 준비된 작업 세트일 수도 있고 간단한 명령
  • 을 실행할 수도 있습니다.

    워크플로우 파일 구조


    간단히 말해서 워크플로우 파일을 구축하는 방법을 살펴보겠습니다.
  • name: 워크플로우 이름
  • on: 이 워크플로우를 트리거할 이벤트
  • jobs: 이 워크플로의 작업 목록
  • <JOB_NAME>
  • runs-on: 작업
  • 을 실행하는 실행 프로그램
  • steps: 이 작업에서uses로 실행할 작업이나
  • 을 실행합니다
  • uses:
  • 실행
  • run:
  • 명령 실행

    시작: 워크플로우 파일 만들기


    간단한 서류부터 시작해서 어떻게 작동하는지 봅시다.
    저장소 루트 디렉토리에 .github/workflows/이라는 디렉토리를 만듭니다. 여기서는 다양한 이벤트로 트리거할 수 있는 모든 워크플로우를 저장합니다.
    $ mkdir -p .github/workflows
    
    이 디렉토리에서는 스트림에 대해 .github/workflows/actions-test.yaml이라는 파일을 생성합니다.
    name: actions-test
    on: [push]
    jobs:
      print-hello:
        runs-on: ubuntu-latest
        steps:
          - run: echo "Hello, world"
    
    Github에 저장 및 푸시:
    $ git add .github/workflows/actions-test.yaml && git commit -m “Test flow” && git push
    
    Github WebUI로 이동하여 작업 탭으로 전환하면 다음 워크플로가 수행됩니다.


    이벤트


    이벤트에서 이 흐름을 실행하는 조건을 설명할 수 있습니다.
    이러한 조건은 요청을 끌어오거나 저장소, 시간표, Github 이외의 이벤트에 제출할 수 있으며, 이 이벤트들은 저장소의 웹훅에 실행될 것이다.
    또한 저장소의 여러 분기에 대해 이러한 조건을 구성할 수도 있습니다.
    name: actions-test
    on: 
      push:
        branches:
          - master
      pull_request:
        branches:
          - test-branch
    ...
    
    또는 cronjob을 사용하려면 Scheduled events을 참조하십시오.
    name: actions-test
    on: 
      schedule:
        - cron: '* * * *'
    

    수동 트리거 — 작업 흐름과 스케줄링


    또한 workflow_dispatch on 을 사용하여 워크플로우를 수동으로 실행하도록 구성할 수도 있습니다.
    name: actions-test
    on: 
       workflow_dispatch
    jobs:
      print-hello:
        runs-on: ubuntu-latest
        steps:
          - run: echo "Hello, world"
    
    그런 다음 작업 중에 이 흐름을 실행하는 버튼이 나타납니다.

    워크플로우 입력


    워크플로우에 다음과 같은 inputs 을 추가할 수도 있습니다.
    name: actions-test
    on: 
       workflow_dispatch:
         inputs:
           userName:
             description: "Username"
             required: true
             default: "Diablo"
    jobs:
      print-hello:
        runs-on: ubuntu-latest
        steps:
          - run: echo "Username: ${{ github.event.inputs.username }}"
          - run: echo "Actor's username: ${{ github.actor }}"
    
    여기서 github.event에서는 ${{ github.event.inputs.username }}의 값을 받았고 workflow_dispatch.inputs.userName 에서는 Github 운영 메타데이터를 받았습니다.
    github.actor

    예를 들어 Argo CD와 함께 배치할 수 있도록 Docker 이미지 라벨을 전달할 수 있습니다.

    Webhooks: 만들기


    위에서 사용한 푸시 외에도 저장소의 다른 이벤트에 대한 워크플로우를 구성할 수 있습니다.
    전체 목록은 을 참조하십시오.
    또 다른 예제에서는 Webhook events을 사용하여 새 분기 또는 태그를 작성할 때 실행할 스트림을 구성합니다.
    name: actions-test
    on: 
      create
    jobs:
      print-hello:
        runs-on: ubuntu-latest
        steps:
          - run: |
              echo "Event name: ${{ github.event_name }}"
              echo "Actor's username: ${{ github.actor }}"
    
    여기 create은 트리거의 이름을 표시하는 데 사용됩니다.
    새 브랜치를 생성하고 밀어넣기:
    $ git checkout -b a-new-branch
    Switched to a new branch ‘a-new-branch’
    $ git push -u origin a-new-branch
    
    체크:
    ${{ github.event_name }}

    환경 변수


    또한 Github 작업은 워크플로우의 환경 변수를 지원합니다.
    기본 변수 목록은 워크플로우 수준, 작업 수준, 각 작업 또는 각 단계에서 고유한 변수를 만들 수 있는 을 참조하십시오.
    이 절차에서는 변수에 대한 액세스가 다르므로 Default environment variables을 참조하십시오.

  • 컨텍스트 변수  — ${{ env.VARNAME }}: 작업 흐름 파일을 실행 프로그램에 보내기 전에 작업 흐름 파일을 미리 처리하는 동안 값을 설정하여 실행 이외의 어느 곳에서든지 사용합니다. 예를 들어if조건(아래에서 논의할 것)
  • 에서

  • 환경 변수 —   $VARNAME: 실행 프로그램
  • 에서 실행되는 작업 실행 중 값을 설정합니다
  • 작업 수행 중 자신의 변수를 만들려면 기본 $GITHUB_ENV 변수
  • 에 설정된 특정 파일을 사용하십시오
    변수 예:
    name: vars-test
    
    on:
      push
    
    env:
      VAR_NAME: "Global value"
    
    jobs:
      print-vars:
        runs-on: ubuntu-latest
        steps:
    
          # using own varibales
          - name: "Test global var as $VAR_NAME"
            run: echo "Test value $VAR_NAME"
    
          - name: "Test global var as ${{ env.VAR_NAME }}"
            run: echo "Test value ${{ env.VAR_NAME }}"
    
          # using default variables
          - name: "Test job var as $GITHUB_REPOSITORY"
            run: echo "Test value $GITHUB_REPOSITORY"
    
          # this will be empty, as default variables are not in the context
          - name: "Test job var as ${{ env.GITHUB_REPOSITORY }}"
            run: echo "Test value ${{ env.GITHUB_REPOSITORY }}"
    
          # using 'dynamic' variables
          - name: "Set local var"
            run: echo "local_var=local value" >> $GITHUB_ENV
    
          - name: "Print local var as $local_var"
            run: echo "$local_var"
    
          - name: "Print local var as ${{ env.local_var }}"
            run: echo "${{ env.local_var }}"
    
    결과:
    About environment variables

    비밀.


    파일 번호는 입니다.
    저장소 설정 > Confidential 에 Confidential 을 추가할 수 있습니다.
    here>>>

    이제 워크플로에 추가합니다.비밀은 ${{ secret.SECRETNAME }}에서 직접 입력하거나 변수로 설정할 수 있습니다.
    name: actions-test
    
    on: 
      push
    
    env:
      TEST_ENV: ${{ secrets.TEST_SECRET }}
    
    jobs:
      print-hello:
        runs-on: ubuntu-latest
        steps:
          - run: |
              echo "Test secret: ${{ secrets.TEST_SECRET }}"
              echo "Test secret: ${{ env.TEST_ENV }}"
    
    프로세스를 실행하려면 다음과 같이 하십시오.

    하면, 만약, 만약...


    Github Actions는 if 연산자와 표현식을 사용하여 작업에 대한 조건 검사를 지원합니다. 을 참조하십시오.
    예를 들면 다음과 같습니다.
    name: actions-test
    
    on:
      push
    
    jobs:
      print-hello:
        runs-on: ubuntu-latest
        steps:
    
          - id: 'zero'
            run: echo "${{ github.actor }}"
    
          - id: 'one'
            run: echo "Running because of 'github.actor' contains a 'setevoy' string"
            if: "contains(github.actor, 'setevoy')"
    
          # this will not run
          - id: 'two'
            run: echo "Skipping because of 'github.actor' contains a 'setevoy' string"
            if: "!contains(github.actor, 'setevoy')"
    
          - id: 'three'
            run: echo "Running because of Step Two was skipped"
            if: steps.two.conclusion == 'skipped'
    
          - id: 'four'
            run: echo "Running because of commit message was '${{ github.event.commits[0].message }}'"
            if: contains(github.event.commits[0].message, 'if set')
    
          - id: 'five'
            run: echo "Running because of previous Step was successful and the trigger event was 'push'"
            if: success() && github.event_name == 'push'
    
    여기서 우리는 About contexts and expressions, github context 함수, contains()!=, && operators을 사용하여 조건을 검사한다.
    결과는 다음과 같습니다.
    steps context

    요구 사항-업무 의존성


    단계의 if: success() 외에도 을 사용하여 작업 간의 의존 관계를 추가할 수 있습니다.
    name: actions-test
    
    on: 
      push
    
    jobs:
    
      init:
        runs-on: ubuntu-latest
        steps:
          - run: echo "An init job"
    
      build:
        runs-on: ubuntu-latest
        steps:
          - run: echo "A build job" && exit 1
        needs: 'init'
    
      deploy:
        runs-on: ubuntu-latest
        steps:
          - run: echo "A deploy job"
        if: always()
        needs: ['init', 'build']
    
    여기서 우리는 구축 작업에서 init 작업이 완성되기를 기다리고 배치 작업에서 init와build을 기다린다. needs을 사용하여 우리는 실행 배치 작업을 설정하고 의존항 작업의 실행 결과가 어떻든 상관없다.
    if: always()

    행동


    마지막으로 Github 작업의 주요 구성 요소를 살펴보겠습니다. — 움직여.
    Actions에서는 에 있는 기존 스크립트와 유틸리티 또는 Docker Hub에 있는 Docker 이미지를 사용할 수 있습니다.
    Github Actions Marketplace 참조.
    다음 예에서 우리는 Finding and customizing actions을 사용하여 메모리 라이브러리 루트와 runner 에이전트를 복제하고 actions/checkout@v2을 사용하여 Argo CD 프로그램을 동기화할 것이다(자세한 정보는 omegion/argocd-app-actions 글 참조).

    Argo CD: 개요, SSL 구성 및 어플리케이션 배포 Argo CD 애플리케이션


    테스트 애플리케이션을 만듭니다.

    기본적으로 관리자 사용자는 ArgoCD 토큰을 사용할 수 있는 권한이 없기 때문에 argocd-cm 구성 매핑을 업데이트합니다.
    ...
    data:
      accounts.admin: apiKey,login
    ...
    
    로그인:
    $ argocd login dev-1–18.argocd.example.com
    Username: admin
    Password:
    ‘admin’ logged in successfully
    Context ‘dev-1–18.argocd.example.com’ updated
    
    생성 토큰:
    $ argocd account generate-token
    eyJ***3Pc
    

    ArgoCD용 Github 운영 워크플로우


    이 토큰을 사용하여 비밀 추가:

    새 워크플로우를 만들려면 다음과 같이 하십시오.
    name: "ArgoCD sync"
    on: "push"
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
    
          - name: "Clone reposiory"
            uses: actions/checkout@v2
            with:
              repository: "argoproj/argocd-example-apps.git"
              ref: "master"
    
          - name: "Sync ArgoCD Application"
            uses: omegion/argocd-app-actions@master
            with:
              address: "dev-1-18.argocd.example.com"
              token: ${{ secrets.ARGOCD_TOKEN }}
              appName: "guestbook"
    
    저장소로 밀어넣고 수행 여부를 확인합니다.

    Argo CD의 애플리케이션이 동기화되었습니다.

    완성
    최초로 에 발표되었다.

    좋은 웹페이지 즐겨찾기