როგორ კოდირებთ ცვლადებს 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) pipeline { agent any stages { Ашу процесінде, қайда қолданылатын айнымалылар, әдетте, орта айнымалылары ретінде қол жетімді. stage('Use Secret') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Жалпы принциптер:
- Мінімдеу ауқымы: Құпиялар тек қажетті кезеңдерде және ортада қол жетімді.
- Логтарды маскалау: Құпия мәндер орындалу логтарында жасырын.
- Рөлдерді бөлу: Тек рұқсат етілген пайдаланушылар немесе жүйелер құпияларды қосуға/өзгертуді жүзеге асыра алады.
- Сыртқы сақтау қоймаларын пайдалану: Күрделі сценарийлер және орталықтандырылған құпия басқару үшін Vault немесе ұқсас шешімдер пайдаланылады.