Ինչպես եք ծածկագրում փոփոխականները 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 կամ նման լուծումներ: