Sobes.tech
Middle

Ինչպես եք ծածկագրում փոփոխականները CI-ում?

sobes.tech AI

Պատասխան AI-ից

Կոդավորում եմ փոփոխականները CI համակարգի ներքին հնարավորությունները օգտագործելով: Ամեն մի CI համակարգ, լինի դա GitLab CI/CD, GitHub Actions կամ Jenkins, ունի անվտանգ գաղտնիքների պահպանում հնարավորությունը: Այս փոփոխականները հասանելի են միայն կոնկրետ շինարարության փուլերում և չեն ցուցադրվում լոգերում:

Օրինակ, GitLab CI-ում:

  • Անհատական շրջակա միջավայրի փոփոխականներ: Թիմի կամ նախագծի մակարդակով կարող եք պահպանել փոփոխականներ: Դրանք նշվում են որպես "ապահովված" և "մասկետված": "Ապահովված" օգտագործվում է միայն պաշտպանված ճյուղերում և տեգերում, "մասկետված" թաքցնում է արժեքը լոգերում, եթե այն ամբողջությամբ համընկնում է:

    # .gitlab-ci.yml
    # Փոփոխականի հասանելիությունը շրջակա միջավայրի միջոցով
    script:
      - echo $MY_SECRET_VARIABLE
    
  • HashiCorp Vault: Դուրսի գաղտնիքների պահեստի ինտեգրացիա, օրինակ HashiCorp Vault: GitLab CI կարող է հաստատվել Vault-ում և ստանալ գաղտնիքները գործարկման ժամանակ:

    # .gitlab-ci.yml
    variables:
      VAULT_SERVER: "https://vault.example.com"
      VAULT_AUTH_ROLE: "gitlab-ci"
      VAULT_AUTH_PATH: "auth/kubernetes"
      VAULT_SECRETS: |
        MY_SECRET_KEY: vault/path/to/secret:key
    script:
      - echo $MY_SECRET_KEY # Փոփոխականը ավտոմատ կերպով բեռնվում է Vault-ից
    

GitHub Actions-ում:

  • Գաղտնաբառեր: Դրանք կարող են պահվել ռեպոզիտորի կամ կազմակերպության մակարդակով: Դրանք հասանելի են ${{ secrets.MY_SECRET }} ձևաչափով: Վալյուերը չեն ցուցադրվում լոգերում և չեն կարող ստանալ API-ի միջոցով:

    # .github/workflows/main.yml
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: Օգտագործել գաղտնաբառ
          run: echo ${{ secrets.MY_SECRET }}
    

Jenkins-ում:

  • Credentials Plugin: Հնարավորություն է տալիս պահել տարբեր տեսակի հավատարմագրեր (օգտանուն/գաղտնաբառ, գաղտնի տեքստ, SSH բանալի) կոդավորված տեսքով: Դրանք հասանելի են Jenkinsfile-ում կամ գրաֆիկական ինտերֆեյսում:

    // Jenkinsfile (Հայտարարական պլան)
    pipeline {
        agent any
        stages {
            Աշխատանքային գործընթացում, որտեղ օգտագործվում են փոփոխականներ, դրանք սովորաբար հասանելի են որպես շրջակա միջավայրի փոփոխականներ:
            stage('Use Secret') {
                steps {
                    withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) {
                        sh 'echo $MY_VAR'
                    }
                }
            }
        }
    }
    

Ընդհանուր սկզբունքներ:

  • Մինիմալիզացիա տարածքի: Գաղտնիքները հասանելի են միայն անհրաժեշտ փուլերում և միջավայրերում:
  • Լոգերի մասկավորում: Գաղտնի արժեքները թաքնված են գործարկման լոգերում:
  • Ռոլերի բաժանում: Միայն թույլատրելի օգտվողներն կամ համակարգերը կարող են ավելացնել/փոփոխել գաղտնիքները:
  • Արտաքին պահեստների օգտագործում: Կարդացվող և կենտրոնական կառավարում համար, օգտագործվում են Vault կամ նման լուծումներ: