āĻšā§āĻ¯āĻžāĻ˛ā§! āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻāĻŦāĻ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯āĻ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ āĻĒā§āĻ°āĻā§āĻ° āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻ āĻā§āĻŽā§āĻļāĻ¨ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻāĻŽāĻŋ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻ˛āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ, āĻā§āĻāĻžāĻŦā§ āĻāĻ° āĻā§āĻˇāĻŽāĻ¤āĻžāĻā§āĻ˛āĻŋ āĻ āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻāĻāĻŋ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻŦāĨ¤
āĻāĻ āĻ¸āĻžāĻāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ
āĻ¨ā§āĻĒā§āĻ°āĻžāĻŖāĻŋāĻ¤ āĻāĻŋāĻ˛
āĻāĻŽāĻŋ āĻ¸ā§āĻā§āĻ°ā§āĻ¯āĻžāĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻ āĻ¨ā§āĻ°ā§āĻĒ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§āĻāĻŋ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ°ā§āĻĒā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ āĻāĻŦāĻ āĻŦāĻŋāĻ¨āĻžāĻŽā§āĻ˛ā§āĻ¯ā§āĻ° āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋāĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻ¯āĻž āĻāĻŽāĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤āĻžāĻŽāĨ¤ āĻāĻ āĻāĻŽāĻŋ āĻļā§āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°ā§ āĻŦāĻ˛āĻ¤ā§ āĻšāĻŦā§.
āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻŽāĻ¨ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻžāĻ° āĻāĻ°āĻŦā§ āĻ¯ā§āĻŽāĻ¨:
āĻšā§āĻā§, qbec, āĻāĻžāĻ¨āĻŋāĻā§, git-āĻā§āĻ°āĻŋāĻĒā§āĻ и āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ āĻāĻ¤āĻŋāĻļā§āĻ˛ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¸ā§āĻˇā§āĻāĻŋāĻ° āĻ¸āĻžāĻĨā§āĨ¤
āĻ¸āĻžāĻŽāĻā§āĻ°ā§
āĻšā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻāĻ¯āĻŧāĻž āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻāĻ¨āĻŋāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻ¯āĻŧ āĻšāĻā§āĻā§ Qbec-āĻāĻ° āĻā§āĻŽāĻŋāĻāĻž āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸-āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻž āĻšāĻā§āĻā§ qbec āĻĻāĻŋāĻ¯āĻŧā§ āĻšā§āĻ˛āĻŽ āĻāĻžāĻ°ā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨ āĻāĻŋāĻ-āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻā§āĻŽāĻŋāĻāĻž āĻāĻāĻāĻŋ āĻā§āĻ˛āĻŦāĻā§āĻ¸ āĻāĻŽā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻŽā§āĻ āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ āĻā§āĻŽā§āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨ āĻļāĻŋāĻ˛ā§āĻĒāĻāĻ°ā§āĻŽ āĻāĻŦāĻ āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ¯āĻāĻ¨ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻ ā§āĻ˛āĻžāĻ ā§āĻ˛āĻŋ āĻāĻ¤āĻŋāĻļā§āĻ˛ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ ā§āĻ¯āĻžāĻĒāĻ¸ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨
1. āĻšā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻāĻ¯āĻŧāĻž
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻŽāĻ°āĻž āĻšā§āĻā§āĻ¤ā§ āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻāĻāĻāĻŋ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻĒā§āĻ°āĻāĻžāĻļāĻ¨āĻž āĻ¸āĻžāĻāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦāĨ¤ āĻšā§āĻā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻāĻ¨ā§āĻā§āĻ¨ā§āĻ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°āĨ¤
āĻ¯āĻžāĻ°āĻž āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻ¨āĻ¨ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻāĻŋāĻā§ āĻŦāĻ˛āĻŦāĨ¤ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻāĻŦāĻ āĻāĻŋāĻā§ āĻ§āĻ°āĻŖā§āĻ° āĻĒāĻŋāĻāĻāĻāĻĒāĻŋ āĻ¸āĻš āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻ¸āĻžāĻāĻ āĻāĻā§āĻāĻŋāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ā§, āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°āĻž āĻšāĻ˛ā§, āĻĢā§āĻ˛āĻžāĻāĻ¤ā§ āĻĒā§āĻˇā§āĻ āĻžāĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§, āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°āĻā§āĻ˛āĻŋ āĻāĻāĻā§ āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻ¸āĻžāĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸ā§āĻ°ā§āĻ¸ āĻā§āĻĄ āĻ¨āĻŋāĻ¤ā§ āĻĻā§āĻ¯āĻŧ, āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻŽāĻžāĻ°ā§āĻāĻĄāĻžāĻāĻ¨ āĻŽāĻžāĻ°ā§āĻāĻāĻĒ āĻāĻŦāĻ āĻĨāĻŋāĻŽ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻā§āĻ° āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¸āĻŽāĻžāĻĒā§āĻ¤ āĻ¸āĻžāĻāĻā§ āĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°ā§āĨ¤
āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻāĻāĻĒā§āĻā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻāĻžāĻ āĻžāĻŽā§ āĻāĻŦāĻ āĻā§āĻ¨āĻžāĻ°ā§āĻā§āĻĄ āĻāĻāĻāĻāĻŋāĻāĻŽāĻāĻ˛ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻĒāĻžāĻŦā§āĻ¨ āĻ¯āĻž āĻāĻĒāĻ¨āĻŋ āĻ¸āĻšāĻāĻāĻžāĻŦā§ āĻ¯ā§āĻā§āĻ¨ā§ āĻ¸āĻ¸ā§āĻ¤āĻž āĻšā§āĻ¸ā§āĻāĻŋāĻāĻ¯āĻŧā§ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāĻžāĻā§āĻ° āĻ¸āĻžāĻāĻ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻžāĻŦā§ Hugo āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻžāĻāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻšāĻā§āĻā§:
hugo new site docs.example.org
āĻāĻŦāĻ āĻāĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§ āĻāĻŋāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛:
cd docs.example.org
git init
āĻāĻāĻ¨ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻžāĻāĻāĻāĻŋ āĻāĻĻāĻŋāĻŽ āĻāĻŦāĻ āĻāĻāĻŋāĻ¤ā§ āĻāĻŋāĻā§ āĻĻā§āĻāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻāĻāĻŋ āĻĨāĻŋāĻŽ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻāĻāĻāĻŋ āĻĨāĻŋāĻŽ āĻšāĻ˛ āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻā§āĻŽāĻĒā§āĻ˛ā§āĻā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻžāĻāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻā§āĻ˛āĻŋāĨ¤
āĻĨāĻŋāĻŽ āĻšāĻŋāĻ¸ā§āĻŦā§ āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ
āĻāĻŽāĻŋ āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋāĻ¤ā§ āĻŦāĻŋāĻļā§āĻˇ āĻŽāĻ¨ā§āĻ¯ā§āĻ āĻĻāĻŋāĻ¤ā§ āĻāĻžāĻ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻĨāĻŋāĻŽ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻĻāĻ°āĻāĻžāĻ° āĻ¨ā§āĻ, āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻŦāĻ˛ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ git āĻ¸āĻžāĻŦāĻŽāĻĄāĻŋāĻāĻ˛:
git submodule add https://github.com/matcornic/hugo-theme-learn themes/learn
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻĨāĻžāĻāĻŦā§ āĻāĻŦāĻ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻĨāĻŋāĻŽāĻāĻŋ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻ˛āĻŋāĻā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĨāĻžāĻāĻŦā§ āĻāĻŦāĻ āĻāĻ¤ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĨāĻžāĻāĻŦā§, āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻāĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻŽā§āĻ˛ āĻāĻ¤ā§āĻ¸ āĻĨā§āĻā§ āĻā§āĻ¨ā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŦāĻ āĻāĻ¯āĻŧ āĻĒāĻžāĻŦā§āĻ¨ āĻ¨āĻžāĨ¤ āĻŦā§āĻŽāĻžāĻ¨āĻžāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ°āĨ¤
āĻāĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻ āĻŋāĻ āĻāĻ°āĻž āĻ¯āĻžāĻ config.toml:
baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"
āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§, āĻāĻĒāĻ¨āĻŋ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
hugo server
āĻāĻ° āĻ āĻŋāĻāĻžāĻ¨āĻžāĻ¯āĻŧ
āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻļāĻŋāĻ°ā§āĻ¨āĻžāĻŽ āĻĒā§āĻˇā§āĻ āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ content/_index.md:
# My docs site
## Welcome to the docs!
You will be very smart :-)
āĻ¨āĻ¤ā§āĻ¨ āĻ¤ā§āĻ°āĻŋ āĻĒā§āĻˇā§āĻ āĻžāĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
āĻāĻāĻāĻŋ āĻ¸āĻžāĻāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§, āĻļā§āĻ§ā§ āĻāĻžāĻ˛āĻžāĻ¨:
hugo
āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨/ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻžāĻāĻ āĻšāĻŦā§.
āĻšā§āĻ¯āĻžāĻ, āĻāĻĒāĻžāĻ¯āĻŧ āĻĻā§āĻŦāĻžāĻ°āĻž, āĻāĻ° āĻ
āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻāĻāĻŋ āĻāĻ¨āĻž āĻ¯āĻžāĻ .gitignore:
echo /public > .gitignore
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
git add .
git commit -m "New site created"
2. āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻāĻ āĻ¨ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ¸ā§āĻā§āĨ¤ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻŽāĻŋ āĻāĻ°āĻāĻŽ āĻāĻŋāĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ:
.
âââ deploy
â âââ app1
â âââ app2
âââ dockerfiles
âââ image1
âââ image2
- āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛āĻ¸/ - āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛āĻ¸ āĻ¸āĻš āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻĄāĻāĻžāĻ° āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŋāĻā§ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
- āĻ¸ā§āĻĨāĻžāĻĒāĻ¨/ - āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ°āĻ¯āĻŧā§āĻā§ā§ˇ
āĻāĻāĻāĻžāĻŦā§, āĻāĻŽāĻ°āĻž āĻĒāĻĨ āĻ§āĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛/āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻžāĻāĻ/āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛
FROM alpine:3.11 as builder
ARG HUGO_VERSION=0.62.0
RUN wget -O- https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz -C /usr/local/bin
ADD . /src
RUN hugo -s /src
FROM alpine:3.11
RUN apk add --no-cache darkhttpd
COPY --from=builder /src/public /var/www
ENTRYPOINT [ "/usr/bin/darkhttpd" ]
CMD [ "/var/www" ]
āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻā§āĻ¨, āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ā§ āĻĻā§āĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§ āĻĨā§āĻā§, āĻāĻ āĻ¸āĻŽā§āĻāĻžāĻŦāĻ¨āĻž āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻāĻŋāĻ¤ā§āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻŦā§ āĻ
āĻ¨ā§āĻ§āĻāĻžāĻ°httpd (āĻšāĻžāĻ˛āĻāĻž HTTP āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°) āĻāĻŦāĻ āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨/ - āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻāĻāĻžāĻŦā§ āĻ¤ā§āĻ°āĻŋ āĻ¸āĻžāĻāĻā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§āĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
git add dockerfiles/website
git commit -m "Add Dockerfile for website"
3. āĻāĻ¨āĻŋāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻāĻ¯āĻŧāĻž
āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻŽāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻā§
āĻāĻŽā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§, āĻļā§āĻ§ā§ āĻ¸āĻā§āĻā§ āĻ§āĻžāĻ°āĻ āĻāĻžāĻ˛āĻžāĻ¨ āĻāĻžāĻ¨āĻŋāĻā§ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ āĻāĻŦāĻ āĻāĻāĻŋāĻ¤ā§ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄ āĻĒā§āĻ°āĻ¸āĻā§āĻāĻāĻŋ āĻĒāĻžāĻ¸ āĻāĻ°ā§āĻ¨, āĻāĻĒāĻ¨āĻŋ āĻĄāĻāĻžāĻ°ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻāĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
docker run -ti --rm
-v $PWD:/workspace
-v ~/.docker/config.json:/kaniko/.docker/config.json:ro
gcr.io/kaniko-project/executor:v0.15.0
--cache
--dockerfile=dockerfiles/website/Dockerfile
--destination=registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1
āĻ¯ā§āĻāĻžāĻ¨ā§ registry.gitlab.com/kvaps/docs.example.org/website - āĻāĻĒāĻ¨āĻžāĻ° āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻā§āĻ° āĻ¨āĻžāĻŽ, āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻāĻāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻĄāĻāĻžāĻ° āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ¤ā§ āĻāĻžāĻ˛ā§ āĻšāĻŦā§āĨ¤
āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻŽāĻžāĻĒ --āĻā§āĻ¯āĻžāĻļā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻĄāĻāĻžāĻ° āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ¤ā§ āĻ¸ā§āĻ¤āĻ°āĻā§āĻ˛āĻŋ āĻā§āĻ¯āĻžāĻļā§ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ, āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻŦā§ registry.gitlab.com/kvaps/docs.example.org/website/cache, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻ¸āĻš āĻ āĻ¨ā§āĻ¯ āĻĒāĻĨ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ --āĻā§āĻ¯āĻžāĻļā§-āĻ°ā§āĻĒā§.
āĻĄāĻāĻžāĻ°-āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
4. qbec-āĻāĻ° āĻā§āĻŽāĻŋāĻāĻž
āĻāĻāĻŋ āĻāĻŽāĻ¨ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻŦāĻŋāĻļā§āĻˇāĻāĻžāĻŦā§ āĻ¸āĻ¤ā§āĻ¯ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ¸āĻš āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻŋāĻā§ āĻā§āĻˇāĻŖāĻžāĻŽā§āĻ˛āĻāĻāĻžāĻŦā§ āĻ¤āĻžāĻĻā§āĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨āĨ¤
Qbec āĻāĻĒāĻ¨āĻžāĻā§ āĻšā§āĻ˛āĻŽ āĻāĻžāĻ°ā§āĻāĻā§āĻ˛āĻŋāĻā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻĒāĻžāĻ¸ āĻāĻ°ā§ āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻĒā§āĻ°āĻāĻžāĻļā§āĻ° āĻŽāĻ¤ā§ āĻāĻāĻāĻāĻžāĻŦā§ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ, āĻāĻ¤ā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻŽāĻŋāĻāĻā§āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻ¸āĻš, āĻāĻŦāĻ āĻāĻ° āĻĢāĻ˛ā§, ChartMuseum āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻĻā§āĻ° āĻāĻ°ā§ā§ˇ āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻĒāĻ¨āĻŋ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻāĻŋāĻ āĻĨā§āĻā§ āĻāĻžāĻ°ā§āĻāĻā§āĻ˛āĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻŦāĻ āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻŽāĻŋ āĻāĻā§āĻ āĻŦāĻ˛ā§āĻāĻŋ, āĻāĻŽāĻ°āĻž āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŦ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨/:
mkdir deploy
cd deploy
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ:
qbec init website
cd website
āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ āĻ¨ āĻāĻ āĻŽāĻ¤ āĻĻā§āĻāĻžāĻ¯āĻŧ:
.
âââ components
âââ environments
â âââ base.libsonnet
â âââ default.libsonnet
âââ params.libsonnet
âââ qbec.yaml
āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻĻā§āĻā§āĻ¨ qbec.yaml:
apiVersion: qbec.io/v1alpha1
kind: App
metadata:
name: website
spec:
environments:
default:
defaultNamespace: docs
server: https://kubernetes.example.org:8443
vars: {}
āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§ āĻāĻā§āĻ°āĻšā§ spec.environments, qbec āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻā§ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ kubeconfig āĻĨā§āĻā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ āĻŋāĻāĻžāĻ¨āĻž āĻāĻŦāĻ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻāĻ¨ āĻ¯āĻāĻ¨ āĻŽā§āĻ¤āĻžāĻ¯āĻŧā§āĻ¨ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻĒāĻ°āĻŋāĻŦā§āĻļā§, qbec āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ Kubernetes āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻŦā§, āĻ
āĻ°ā§āĻĨāĻžā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ° āĻĒā§āĻ°āĻ¸āĻā§āĻ āĻāĻŦāĻ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻ¯ā§āĻāĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¨āĻžāĨ¤
āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻāĻ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ qbec.yaml, āĻāĻŦāĻ āĻĢāĻžāĻāĻ˛ā§ params.libsonnet, āĻ¯āĻž āĻŦāĻ˛ā§ āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻā§āĻĨāĻžāĻ¯āĻŧ āĻ¨āĻŋāĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŋ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ:
- āĻāĻĒāĻžāĻĻāĻžāĻ¨ / - āĻāĻŽāĻžāĻĻā§āĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻāĻāĻžāĻ¨ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻŦā§, āĻ¸ā§āĻā§āĻ˛āĻŋ jsonnet āĻāĻŦāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ yaml āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻāĻ¯āĻŧāĻ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
- āĻĒāĻ°āĻŋāĻŦā§āĻļ/ - āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ (āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°) āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦāĨ¤
āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĻā§āĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻāĻā§:
- āĻĒāĻ°āĻŋāĻŦā§āĻļ/base.libsonnet - āĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻŦā§
- āĻĒāĻ°āĻŋāĻŦā§āĻļ/default.libsonnet - āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ°āĻ¯āĻŧā§āĻā§ āĻĄāĻŋāĻĢāĻ˛ā§āĻ
āĻā§āĻ˛āĻž āĻ¯āĻžāĻ āĻĒāĻ°āĻŋāĻŦā§āĻļ/base.libsonnet āĻāĻŦāĻ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻāĻĒāĻžāĻĻāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨:
{
components: {
website: {
name: 'example-docs',
image: 'registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1',
replicas: 1,
containerPort: 80,
servicePort: 80,
nodeSelector: {},
tolerations: [],
ingressClass: 'nginx',
domain: 'docs.example.org',
},
},
}
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¯āĻžāĻ components/website.jsonnet:
local env = {
name: std.extVar('qbec.io/env'),
namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.website;
[
{
apiVersion: 'apps/v1',
kind: 'Deployment',
metadata: {
labels: { app: params.name },
name: params.name,
},
spec: {
replicas: params.replicas,
selector: {
matchLabels: {
app: params.name,
},
},
template: {
metadata: {
labels: { app: params.name },
},
spec: {
containers: [
{
name: 'darkhttpd',
image: params.image,
ports: [
{
containerPort: params.containerPort,
},
],
},
],
nodeSelector: params.nodeSelector,
tolerations: params.tolerations,
imagePullSecrets: [{ name: 'regsecret' }],
},
},
},
},
{
apiVersion: 'v1',
kind: 'Service',
metadata: {
labels: { app: params.name },
name: params.name,
},
spec: {
selector: {
app: params.name,
},
ports: [
{
port: params.servicePort,
targetPort: params.containerPort,
},
],
},
},
{
apiVersion: 'extensions/v1beta1',
kind: 'Ingress',
metadata: {
annotations: {
'kubernetes.io/ingress.class': params.ingressClass,
},
labels: { app: params.name },
name: params.name,
},
spec: {
rules: [
{
host: params.domain,
http: {
paths: [
{
backend: {
serviceName: params.name,
servicePort: params.servicePort,
},
},
],
},
},
],
},
},
]
āĻāĻ āĻĢāĻžāĻāĻ˛ā§, āĻāĻŽāĻ°āĻž āĻāĻāĻ¸āĻžāĻĨā§ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻ¸āĻ¤ā§āĻ¤āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§āĻāĻŋ, āĻāĻāĻā§āĻ˛āĻŋ āĻšāĻ˛: āĻŦāĻŋāĻ¸ā§āĻ¤ā§āĻ¤āĻŋ, āĻ¸ā§āĻŦāĻž и āĻĒā§āĻ°āĻŦā§āĻļ. āĻ¯āĻĻāĻŋ āĻāĻā§āĻāĻž āĻšāĻ¯āĻŧ, āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻĒāĻžāĻĻāĻžāĻ¨ā§ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ, āĻ¤āĻŦā§ āĻāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋāĻ āĻ¯āĻĨā§āĻˇā§āĻāĨ¤
āĻļāĻŦā§āĻĻāĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ āĻāĻ¸āĻ¨āĻ¨ā§āĻ āĻ°ā§āĻā§āĻ˛āĻžāĻ° json āĻāĻ° āĻ¸āĻžāĻĨā§ āĻ āĻ¨ā§āĻ āĻŽāĻŋāĻ˛, āĻ¨ā§āĻ¤āĻŋāĻāĻ¤āĻāĻžāĻŦā§, āĻ°ā§āĻā§āĻ˛āĻžāĻ° json āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻāĻāĻŋ āĻŦā§āĻ§ jsonnet, āĻ¤āĻžāĻ āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨āĻ˛āĻžāĻāĻ¨ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¸āĻšāĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ yaml2json āĻāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ yaml āĻā§ json-āĻ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§, āĻ āĻĨāĻŦāĻž āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻā§āĻ¨ā§ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¨āĻž āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ yaml āĻāĻāĻžāĻ°ā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻ¸āĻā§āĻā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ¸āĻ¨āĻ¨ā§āĻ āĻāĻŽāĻŋ āĻĻā§āĻĸāĻŧāĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻ˛āĻžāĻāĻāĻ¨ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻā§āĻāĻŋ
āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, vim āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻ˛āĻžāĻāĻāĻ¨ āĻāĻā§ vim-jsonnet, āĻ¯āĻž āĻ¸āĻŋāĻ¨āĻā§āĻ¯āĻžāĻā§āĻ¸ āĻšāĻžāĻāĻ˛āĻžāĻāĻāĻŋāĻ āĻāĻžāĻ˛ā§ āĻāĻ°ā§ āĻāĻŦāĻ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°ā§ jsonnet fmt āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖā§ (jsonnet āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨)āĨ¤
āĻ¸āĻŦāĻāĻŋāĻā§ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤, āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ:
āĻāĻŽāĻ°āĻž āĻāĻŋ āĻĒā§āĻ¯āĻŧā§āĻāĻŋ āĻ¤āĻž āĻĻā§āĻāĻ¤ā§, āĻāĻ˛ā§āĻ¨ āĻāĻžāĻ˛āĻžāĻ:
qbec show default
āĻāĻāĻāĻĒā§āĻā§, āĻāĻĒāĻ¨āĻŋ āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻāĻ°āĻž yaml āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨ āĻ¯āĻž āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤, āĻāĻāĻ¨ āĻāĻŦā§āĻĻāĻ¨ āĻāĻ°ā§āĻ¨:
qbec apply default
āĻāĻāĻāĻĒā§āĻā§ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻāĻŋ āĻāĻ°āĻž āĻšāĻŦā§, qbec āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻžāĻāĻĒ āĻāĻ°ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻ¤ā§ āĻŦāĻ˛āĻŦā§ y āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨.
āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻ ā§āĻ¯āĻžāĻĒ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ!
āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻž āĻšāĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
qbec diff default
āĻāĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻĒāĻ° āĻāĻŋāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻāĻžāĻŦ āĻĢā§āĻ˛āĻŦā§ āĻ¤āĻž āĻĻā§āĻāĻ¤ā§
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
cd ../..
git add deploy/website
git commit -m "Add deploy for website"
5. āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸-āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĻā§āĻā§āĻ¨
āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤, āĻāĻŽāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻāĻŋ gitlab-āĻ°āĻžāĻ¨āĻžāĻ° āĻļā§āĻ˛- āĻŦāĻž āĻĄāĻāĻžāĻ°-āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ āĻ¸āĻš āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŦ-āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻŽā§āĻļāĻŋāĻ¨ā§ (LXC āĻ§āĻžāĻ°āĻ)āĨ¤ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦā§ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ āĻ°āĻžāĻ¨āĻžāĻ°āĻĻā§āĻ° āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻāĻŋāĻ˛āĨ¤ āĻ¤āĻžāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻā§āĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ āĻ¯ā§āĻŽāĻ¨ āĻĻā§āĻāĻŋāĻ¯āĻŧā§āĻā§, āĻāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻāĻ¤āĻž āĻāĻŦāĻ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻžāĻ° āĻĻāĻŋāĻ āĻĨā§āĻā§ āĻāĻāĻ¯āĻŧ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻĻāĻ°ā§āĻļ āĻ¨āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŦāĻ āĻāĻŽāĻ¨āĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻĨāĻ āĻ°āĻžāĻ¨āĻžāĻ° āĻŽā§āĻ¤āĻžāĻ¯āĻŧā§āĻ¨ āĻāĻ°āĻž āĻ āĻ¨ā§āĻ āĻāĻžāĻ˛ āĻāĻŦāĻ āĻāĻĻāĻ°ā§āĻļāĻāĻ¤āĻāĻžāĻŦā§ āĻ¸āĻ āĻŋāĻāĨ¤
āĻ¸ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤, āĻāĻāĻŋ āĻŽā§āĻā§āĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¨āĻ¯āĻŧ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻŦ gitlab-āĻ°āĻžāĻ¨āĻžāĻ° āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ āĻāĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§āĨ¤
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ° āĻŽā§āĻ¤āĻžāĻ¯āĻŧā§āĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ°ā§āĻĄāĻŋāĻŽā§āĻĄ āĻšā§āĻ˛āĻŽ āĻāĻžāĻ°ā§āĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻ¤āĻžāĻ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻž āĻāĻžāĻ¨āĻ¤ā§ āĻšāĻŦā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻ°āĻŖ āĻā§āĻā§āĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻāĻŋāĻāĻ¸ -> CI / CD -> āĻ°āĻžāĻ¨āĻžāĻ°ā§āĻ¸ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻšā§āĻ˛āĻŽā§ āĻĒāĻžāĻ āĻžāĻ¨:
helm repo add gitlab https://charts.gitlab.io
helm install gitlab-runner
--set gitlabUrl=https://gitlab.com
--set runnerRegistrationToken=yga8y-jdCusVDn_t4Wxc
--set rbac.create=true
gitlab/gitlab-runner
āĻ¯ā§āĻāĻžāĻ¨ā§:
https://gitlab.com āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ āĻŋāĻāĻžāĻ¨āĻžāĨ¤- yga8y-jdCusVDn_t4Wxc - āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻā§āĻā§āĻ¨āĨ¤
- rbac.create=āĻ¸āĻ¤ā§āĻ¯ - āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸-āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻĄ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ°āĻžāĻ¨āĻžāĻ°āĻā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¸āĻāĻā§āĻ¯āĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻĻā§āĻ¯āĻŧāĨ¤
āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¸āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻāĻžāĻā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŋāĻ¤ āĻ°āĻžāĻ¨āĻžāĻ° āĻĻā§āĻāĻ¤ā§ āĻšāĻŦā§ āĻā§āĻ°āĻžāĻāĻžāĻ˛āĻžāĻ¨āĻāĻžāĻ°ā§, āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸ā§āĻāĻŋāĻāĻ¸ā§āĨ¤
āĻ¯ā§āĻ āĻāĻ°āĻž āĻ°āĻžāĻ¨āĻžāĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
āĻāĻāĻž āĻāĻŋ āĻ¯ā§ āĻ¸āĻšāĻ? - āĻšā§āĻ¯āĻžāĻ, āĻāĻāĻž āĻ¯ā§ āĻ¸āĻšāĻ! āĻ°āĻžāĻ¨āĻžāĻ°āĻĻā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ° āĻāĻ°āĻž āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ° āĻā§āĻ¨ āĻāĻžāĻŽā§āĻ˛āĻž āĻ¨ā§āĻ, āĻāĻāĻ¨ āĻĨā§āĻā§ āĻ°āĻžāĻ¨āĻžāĻ°āĻ°āĻž āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¤ā§āĻ°āĻŋ āĻ āĻ§ā§āĻŦāĻāĻ¸ āĻšāĻ¯āĻŧā§ āĻ¯āĻžāĻŦā§āĨ¤
6. QBEC āĻāĻ° āĻ¸āĻžāĻĨā§ āĻšā§āĻ˛āĻŽ āĻāĻžāĻ°ā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨
āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ gitlab-āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ āĻāĻļ, āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŋāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤
āĻāĻŽāĻ°āĻž āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻžāĻāĻ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻĒāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻāĻŋ āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻžāĻāĻ āĻā§āĻŦ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ, āĻāĻŋāĻ¨ā§āĻ¨ gitlab-āĻ°āĻžāĻ¨āĻžāĻ°, āĻ¯āĻž āĻĒā§āĻ°āĻ¤āĻŋ Kubernetes āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻŦāĻžāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ:
cd deploy
qbec init gitlab-runner
cd gitlab-runner
āĻāĻŦāĻžāĻ° āĻāĻŽāĻ°āĻž āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ Kubernetes āĻāĻ¨ā§āĻāĻŋāĻāĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦ āĻ¨āĻž, āĻ¤āĻŦā§ āĻāĻāĻāĻŋ āĻ°ā§āĻĄāĻŋāĻŽā§āĻĄ āĻšā§āĻ˛āĻŽ āĻāĻžāĻ°ā§āĻ āĻ¨āĻŋāĻŦāĨ¤ Qbec-āĻāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻšāĻ˛ Git āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§āĻā§ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻšā§āĻ˛āĻŽ āĻāĻžāĻ°ā§āĻ āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻžāĨ¤
āĻāĻ¸ā§āĻ¨ āĻāĻŋāĻ āĻ¸āĻžāĻŦāĻŽāĻĄāĻŋāĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻŋ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°āĻŋ:
git submodule add https://gitlab.com/gitlab-org/charts/gitlab-runner vendor/gitlab-runner
āĻāĻāĻ¨ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻŦāĻŋāĻā§āĻ°ā§āĻ¤āĻž/āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ āĻ¸āĻš āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĻā§āĻ˛āĻŋ āĻāĻāĻāĻāĻžāĻŦā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻāĻžāĻ°ā§āĻ āĻ¸āĻš āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛
https://github.com/helm/charts
āĻāĻ¸ā§āĻ¨ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻāĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŋ components/gitlab-runner.jsonnet:
local env = {
name: std.extVar('qbec.io/env'),
namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.gitlabRunner;
std.native('expandHelmTemplate')(
'../vendor/gitlab-runner',
params.values,
{
nameTemplate: params.name,
namespace: env.namespace,
thisFile: std.thisFile,
verbose: true,
}
)
āĻĒā§āĻ°āĻĨāĻŽ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻšā§āĻ˛āĻŽ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻāĻ°ā§āĻ¨ āĻāĻŽāĻ°āĻž āĻāĻžāĻ°ā§āĻā§ āĻĒāĻžāĻĨ āĻĒāĻžāĻ¸, āĻ¤āĻžāĻ°āĻĒāĻ° params.values, āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻāĻ¨āĻāĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻĨā§āĻā§ āĻ¨āĻŋāĻ, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ āĻŦāĻā§āĻā§āĻāĻāĻŋ āĻāĻ¸ā§
- āĻ¨āĻžāĻŽ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ - āĻŽā§āĻā§āĻ¤āĻŋāĻ° āĻ¨āĻžāĻŽ
- āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ - āĻ¨ā§āĻŽāĻ¸ā§āĻĒā§āĻ¸ āĻšā§āĻ˛āĻŽā§ āĻāĻ˛ā§ āĻā§āĻā§
- āĻāĻ āĻ¨āĻĨāĻŋ - āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻ¯āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻĒāĻžāĻĨ āĻĒāĻžāĻ¸ āĻāĻ°ā§
- āĻāĻžāĻ°ā§āĻŦā§āĻ¸ - āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻĻā§āĻāĻžāĻ¯āĻŧ āĻšā§āĻ˛āĻŽ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻ¸āĻš
āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŽā§āĻĒā§āĻ¨ā§āĻ¨ā§āĻā§āĻ° āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°āĻā§āĻ˛ā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻ¯āĻžāĻ āĻĒāĻ°āĻŋāĻŦā§āĻļ/base.libsonnet:
local secrets = import '../secrets/base.libsonnet';
{
components: {
gitlabRunner: {
name: 'gitlab-runner',
values: {
gitlabUrl: 'https://gitlab.com/',
rbac: {
create: true,
},
runnerRegistrationToken: secrets.runnerRegistrationToken,
},
},
},
}
āĻŽāĻ¨ā§āĻ¯ā§āĻ āĻĻāĻžāĻ āĻ°āĻžāĻ¨āĻžāĻ° āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°ā§āĻļāĻ¨ āĻā§āĻā§āĻ¨ āĻāĻŽāĻ°āĻž āĻŦāĻšāĻŋāĻ°āĻžāĻāĻ¤ āĻĢāĻžāĻāĻ˛ āĻĨā§āĻā§ āĻāĻ¨āĻ¯āĻŧāĻ¨ secrets/base.libsonnet, āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ:
{
runnerRegistrationToken: 'yga8y-jdCusVDn_t4Wxc',
}
āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻžāĻ āĻāĻ°ā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ:
qbec show default
āĻ¯āĻĻāĻŋ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻāĻ āĻžāĻ āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻšā§āĻ˛āĻŽ āĻ°āĻŋāĻ˛āĻŋāĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻā§āĻ° āĻŽā§āĻ¤āĻžāĻ¯āĻŧā§āĻ¨ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§ āĻĢā§āĻ˛āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ:
helm uninstall gitlab-runner
āĻāĻŦāĻ āĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŋāĻ¨ā§āĻ¤ā§ qbec āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§:
qbec apply default
7. āĻāĻŋāĻ-āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻā§āĻŽāĻŋāĻāĻž
āĻāĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§, āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻāĻžāĻ āĻžāĻŽā§āĻāĻŋ āĻāĻāĻ°āĻāĻŽ āĻĻā§āĻāĻžāĻā§āĻā§:
.
âââ components
â âââ gitlab-runner.jsonnet
âââ environments
â âââ base.libsonnet
â âââ default.libsonnet
âââ params.libsonnet
âââ qbec.yaml
âââ secrets
â âââ base.libsonnet
âââ vendor
âââ gitlab-runner (submodule)
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŋāĻā§ āĻā§āĻĒāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻ¨āĻ¯āĻŧ, āĻ¤āĻžāĻ āĻ¨āĻž? āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻ¸āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§.
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻ āĻ°ā§āĻĨāĻĒā§āĻ°ā§āĻŖ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻā§āĻĒāĻ¨ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ qbec āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° CI āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§āĨ¤
āĻ¤āĻŦā§ āĻāĻāĻŋ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ¯ā§ āĻāĻ°āĻ āĻāĻāĻŋāĻ˛ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯ā§āĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻ°āĻ āĻ āĻ¨ā§āĻ āĻā§āĻĒāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛āĻā§āĻ˛āĻŋāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻ āĻŋāĻ¨ āĻšāĻŦā§āĨ¤āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻŽāĻŋ āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻāĻŋ āĻāĻŽā§āĻāĻžāĻ° āĻā§āĻ˛ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻŦāĻ˛āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻŦā§ āĻ¨āĻž git-āĻā§āĻ°āĻŋāĻĒā§āĻ.
git-āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻāĻŋ āĻāĻ°āĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻ¯ā§ āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻā§āĻĒāĻ¨ā§āĻ¯āĻŧāĻ¤āĻžāĻ° āĻ¸āĻŽāĻā§āĻ° āĻāĻ¤āĻŋāĻšāĻžāĻ¸ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻ¤ā§āĻ˛āĻ¨āĻž, āĻāĻāĻ¤ā§āĻ°ā§āĻāĻ°āĻŖ āĻāĻŦāĻ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦāĻā§āĻ˛āĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ āĻ¯ā§āĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻāĻŋāĻ-āĻāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻāĻŋ āĻāĻ°āĻ¤āĻžāĻŽāĨ¤
āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ā§āĻ° āĻĒāĻ°ā§ āĻĒā§āĻ°āĻĨāĻŽ āĻāĻŋāĻ¨āĻŋāĻ¸ git-āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
git crypt init
āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ PGP āĻā§ āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻŋ āĻ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻ¨ āĻ¸āĻšāĻ¯ā§āĻā§ āĻšāĻŋāĻ¸ā§āĻŦā§ āĻ¨āĻŋāĻā§āĻā§ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
git-crypt add-gpg-user [email protected]
āĻāĻāĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĻāĻŋ āĻĄāĻŋāĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻā§ PGP āĻā§ āĻ¨āĻž āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻāĻļāĻž āĻāĻ°āĻž āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻŋ āĻ āĻ¨ā§āĻ¯ āĻĒāĻĨā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻā§ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
git crypt export-key /path/to/keyfile
āĻāĻāĻāĻžāĻŦā§, āĻ¯ā§ āĻā§āĻ āĻāĻāĻāĻŋ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻā§āĻāĻĻāĻāĻ˛ āĻā§ āĻĢāĻžāĻāĻ˛ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĄāĻŋāĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻŦā§āĨ¤
āĻāĻāĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻā§āĻĒāĻ¨ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ.
āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻŽāĻ¨ā§ āĻāĻ°āĻŋāĻ¯āĻŧā§ āĻĻāĻŋāĻ āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻāĻāĻ¨āĻ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨/āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ°/āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻāĻā§ āĻā§āĻĒāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž/, āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻŦ āĻĢāĻžāĻāĻ˛ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ, āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦ secrets/.gitattributes āĻāĻ āĻŽāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¸āĻš:
* filter=git-crypt diff=git-crypt
.gitattributes !filter !diff
āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻĨā§āĻā§ āĻĻā§āĻāĻž āĻ¯āĻžāĻ¯āĻŧ, āĻŽāĻžāĻ¸ā§āĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻāĻ˛ * āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻšāĻŦā§ git-āĻā§āĻ°āĻŋāĻĒā§āĻ, āĻŦāĻžāĻĻ āĻĻāĻŋāĻ¯āĻŧā§ .gitaattributes
āĻāĻŽāĻ°āĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ:
git crypt status -e
āĻāĻāĻāĻĒā§āĻā§, āĻāĻŽāĻ°āĻž āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒāĻžāĻ āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°āĻž āĻāĻā§
āĻāĻāĻžāĻ, āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ:
cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"
āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻŦā§āĻ˛āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻāĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻ¯āĻĨā§āĻˇā§āĻ:
git crypt lock
āĻāĻŦāĻ āĻ
āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻž āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻāĻŋāĻā§āĻ¤ā§ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻŦā§, āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĒāĻĄāĻŧāĻž āĻ
āĻ¸āĻŽā§āĻāĻŦāĨ¤
āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĄāĻŋāĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻ¤ā§, āĻāĻžāĻ˛āĻžāĻ¨:
git crypt unlock
8. āĻāĻāĻāĻŋ āĻā§āĻ˛āĻŦāĻā§āĻ¸ āĻāĻŽā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻāĻāĻāĻŋ āĻā§āĻ˛āĻŦāĻā§āĻ¸ āĻāĻŽā§āĻ āĻšāĻ˛ āĻāĻāĻāĻŋ āĻāĻŽā§āĻ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°ā§āĻā§āĻā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ āĻāĻŽāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻ˛ āĻ¸āĻšāĨ¤ āĻāĻāĻŋ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻžāĻ¨āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻ¸āĻā§āĻāĻžāĻ˛āĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
āĻāĻāĻžāĻ¨ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¸āĻšāĻ, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛āĻ¸/āĻā§āĻ˛āĻŦāĻā§āĻ¸/āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻāĻ āĻŽāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¸āĻš:
FROM alpine:3.11
RUN apk add --no-cache git git-crypt
RUN QBEC_VER=0.10.3
&& wget -O- https://github.com/splunk/qbec/releases/download/v${QBEC_VER}/qbec-linux-amd64.tar.gz
| tar -C /tmp -xzf -
&& mv /tmp/qbec /tmp/jsonnet-qbec /usr/local/bin/
RUN KUBECTL_VER=1.17.0
&& wget -O /usr/local/bin/kubectl
https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/linux/amd64/kubectl
&& chmod +x /usr/local/bin/kubectl
RUN HELM_VER=3.0.2
&& wget -O- https://get.helm.sh/helm-v${HELM_VER}-linux-amd64.tar.gz
| tar -C /tmp -zxf -
&& mv /tmp/linux-amd64/helm /usr/local/bin/helm
āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻā§āĻ¨, āĻāĻ āĻāĻŋāĻ¤ā§āĻ°āĻāĻŋāĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋāĻā§āĻ˛āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŋāĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻ āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻā§āĻŦā§āĻā§āĻā§āĻ˛, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻ˛āĻ¤ā§ āĻāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻāĻžāĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻāĻāĻŋāĻ¤ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ¤ā§āĻĒāĻ¨ā§āĻ¨ āĻĒāĻĄāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻā§āĻŽāĻŋāĻāĻž āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻāĻŋ āĻāĻ°āĻ¤ā§, gitlab-runner'om āĻāĻ° āĻ¸āĻžāĻĨā§ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻ¯āĻžāĻ¨:
cd deploy/gitlab-runner
āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ components/rbac.jsonnet:
local env = {
name: std.extVar('qbec.io/env'),
namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.rbac;
[
{
apiVersion: 'v1',
kind: 'ServiceAccount',
metadata: {
labels: {
app: params.name,
},
name: params.name,
},
},
{
apiVersion: 'rbac.authorization.k8s.io/v1',
kind: 'Role',
metadata: {
labels: {
app: params.name,
},
name: params.name,
},
rules: [
{
apiGroups: [
'*',
],
resources: [
'*',
],
verbs: [
'*',
],
},
],
},
{
apiVersion: 'rbac.authorization.k8s.io/v1',
kind: 'RoleBinding',
metadata: {
labels: {
app: params.name,
},
name: params.name,
},
roleRef: {
apiGroup: 'rbac.authorization.k8s.io',
kind: 'Role',
name: params.name,
},
subjects: [
{
kind: 'ServiceAccount',
name: params.name,
namespace: env.namespace,
},
],
},
]
āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻŽāĻ°āĻž āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŋ āĻĒāĻ°āĻŋāĻŦā§āĻļ/base.libsonnet, āĻ¯āĻž āĻāĻāĻ¨ āĻāĻ āĻŽāĻ¤ āĻĻā§āĻāĻžāĻ¯āĻŧ:
local secrets = import '../secrets/base.libsonnet';
{
components: {
gitlabRunner: {
name: 'gitlab-runner',
values: {
gitlabUrl: 'https://gitlab.com/',
rbac: {
create: true,
},
runnerRegistrationToken: secrets.runnerRegistrationToken,
runners: {
serviceAccountName: $.components.rbac.name,
image: 'registry.gitlab.com/kvaps/docs.example.org/toolbox:v0.0.1',
},
},
},
rbac: {
name: 'gitlab-runner-deploy',
},
},
}
āĻŽāĻ¨ā§āĻ¯ā§āĻ āĻĻāĻžāĻ $.components.rbac.name āĻŦā§āĻāĻžāĻ¯āĻŧ āĻ¨āĻžāĻŽ āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻāĻ¨ā§āĻ¯ rbac
āĻāĻ¸ā§āĻ¨ āĻĻā§āĻā§āĻ¨ āĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ¯āĻŧā§āĻā§:
qbec diff default
āĻāĻŦāĻ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°ā§āĻ¨:
qbec apply default
āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻŋāĻā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
cd ../..
git add dockerfiles/toolbox
git commit -m "Add Dockerfile for toolbox"
git add deploy/gitlab-runner
git commit -m "Configure gitlab-runner to use toolbox"
9. āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻŽā§āĻ āĻ¸āĻŽāĻžāĻŦā§āĻļ
āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻŽā§āĻ˛ā§ āĻāĻŽāĻ°āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦ gitlab-ci.yml āĻāĻ āĻŽāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¸āĻš:
.build_docker_image:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug-v0.15.0
entrypoint: [""]
before_script:
- echo "{"auths":{"$CI_REGISTRY":{"username":"$CI_REGISTRY_USER","password":"$CI_REGISTRY_PASSWORD"}}}" > /kaniko/.docker/config.json
build_toolbox:
extends: .build_docker_image
script:
- /kaniko/executor --cache --context $CI_PROJECT_DIR/dockerfiles/toolbox --dockerfile $CI_PROJECT_DIR/dockerfiles/toolbox/Dockerfile --destination $CI_REGISTRY_IMAGE/toolbox:$CI_COMMIT_TAG
only:
refs:
- tags
build_website:
extends: .build_docker_image
variables:
GIT_SUBMODULE_STRATEGY: normal
script:
- /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_TAG
only:
refs:
- tags
āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻāĻŋ āĻĻāĻ¯āĻŧāĻž āĻāĻ°ā§ āĻ¨ā§āĻ āĻāĻ°ā§āĻ¨ GIT_SUBMODULE_STRATEGY: āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻ¸ā§āĻāĻ¸āĻŦ āĻāĻžāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻžāĻ° āĻāĻā§ āĻ¸ā§āĻĒāĻˇā§āĻāĻāĻžāĻŦā§ āĻ¸āĻžāĻŦāĻŽāĻĄāĻŋāĻāĻ˛ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
git add .gitlab-ci.yml
git commit -m "Automate docker build"
āĻāĻŽāĻŋ āĻŽāĻ¨ā§ āĻāĻ°āĻŋ āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻŦāĻ˛āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ v0.0.1 āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻ¯āĻžāĻ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨:
git tag v0.0.1
āĻ¯āĻāĻ¨āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¤āĻāĻ¨āĻ āĻāĻŽāĻ°āĻž āĻā§āĻ¯āĻžāĻāĻā§āĻ˛āĻŋ āĻā§āĻ˛āĻŋāĻ¯āĻŧā§ āĻĻā§āĻŦā§ˇ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻā§āĻ¯āĻžāĻ Git āĻā§āĻ¯āĻžāĻ āĻŽā§āĻ¯āĻžāĻĒ āĻāĻ°āĻž āĻšāĻŦā§. āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻ¯āĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻļ āĻ¸ā§āĻ āĻā§āĻ¯āĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻāĻŽā§āĻ āĻŦāĻŋāĻ˛ā§āĻĄ āĻļā§āĻ°ā§ āĻāĻ°āĻŦā§āĨ¤
āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻšāĻŦā§ git push --tags, āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻĻā§āĻā§āĻ¨:
āĻĒā§āĻ°āĻĨāĻŽ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§āĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
āĻāĻāĻž āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻžāĻ° āĻŽāĻ¤ā§ āĻ¯ā§ āĻā§āĻ¯āĻžāĻ-āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ āĻŦāĻŋāĻ˛ā§āĻĄāĻā§āĻ˛āĻŋ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¤ā§āĻ°āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ˛, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§ āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻ¯āĻžāĻāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻ¨ā§ āĻāĻŽāĻŋāĻāĻā§āĻ˛āĻŋāĻ¤ā§āĻ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻĒā§āĻ°āĻžāĻ¨ā§ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĻāĻŋāĻā§ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻŋāĻ¤ āĻāĻ°āĻŦā§āĨ¤
āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¤ā§āĻ°āĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻā§āĻ¯āĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŦāĻĻā§āĻ§ āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻļāĻžāĻāĻžāĻ¯āĻŧ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻŽāĻžāĻ˛āĻŋāĻ, āĻ¯āĻžāĻ¤ā§ āĻ¸āĻāĻā§āĻšā§āĻ¤ āĻāĻŦāĻŋāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻšāĻžāĻ°ā§āĻĄāĻā§āĻĄ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§ˇ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ āĻĻāĻŋāĻ¯āĻŧā§ āĻ°ā§āĻ˛āĻŦā§āĻ¯āĻžāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻŽāĻžāĻ˛āĻŋāĻ-āĻļāĻžāĻāĻž.
10. āĻ
āĻā§āĻŽā§āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻĒāĻ¨ā§āĻ¯āĻŧāĻ¤āĻžāĻā§āĻ˛āĻŋ āĻĄāĻŋāĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻā§ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻāĻŽāĻžāĻĻā§āĻ° CI āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
git crypt export-key /tmp/docs-repo.key
base64 -w0 /tmp/docs-repo.key; echo
āĻāĻŽāĻ°āĻž āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦā§ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŦ, āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¸ā§āĻāĻŋāĻāĻ¸ā§ āĻ¯āĻžāĻŦ:
āĻ¸ā§āĻāĻŋāĻāĻ¸ â> CI/CD â> āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛
āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨:
āĻāĻĻāĻ°ā§āĻļ
āĻāĻžāĻŦāĻŋ
āĻŽā§āĻ˛ā§āĻ¯
āĻ°āĻā§āĻˇāĻŋāĻ¤
āĻāĻĻā§āĻŽāĻŦā§āĻļā§
āĻŦā§āĻ¯āĻžāĻĒā§āĻ¤āĻŋ
File
GITCRYPT_KEY
<your string>
true
(āĻĒā§āĻ°āĻļāĻŋāĻā§āĻˇāĻŖā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻĒāĻ¨āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ false
)
true
All environments
āĻ¯ā§āĻ āĻāĻ°āĻž āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ gitlab-ci.yml āĻāĻāĻŋ āĻ¯ā§āĻ āĻāĻ°āĻž:
.deploy_qbec_app:
stage: deploy
only:
refs:
- master
deploy_gitlab_runner:
extends: .deploy_qbec_app
variables:
GIT_SUBMODULE_STRATEGY: normal
before_script:
- base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
script:
- qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes
deploy_website:
extends: .deploy_qbec_app
script:
- qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes
āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž qbec-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŋāĻā§ āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°ā§āĻāĻŋ:
- --āĻ°ā§āĻ āĻāĻŋāĻā§/āĻ ā§āĻ¯āĻžāĻĒ - āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ
- --force:k8s-āĻĒā§āĻ°āĻ¸āĻā§āĻ __incluster__ - āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻāĻŋāĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¯āĻž āĻŦāĻ˛ā§ āĻ¯ā§ āĻĄāĻŋāĻĒā§āĻ˛āĻ¯āĻŧāĻŽā§āĻ¨ā§āĻ āĻāĻāĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻāĻāĻŦā§ āĻ¯ā§āĻāĻžāĻ¨ā§ gtilab-āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻ˛āĻā§āĨ¤ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ, āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ qbec āĻāĻĒāĻ¨āĻžāĻ° kubeconfig āĻ āĻāĻāĻāĻŋ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ Kubernetes āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦā§
- -āĻ āĻĒā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨ - qbecāĻā§ āĻ āĻĒā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻŦāĻžāĻ§ā§āĻ¯ āĻāĻ°ā§ āĻ¯āĻ¤āĻā§āĻˇāĻŖ āĻ¨āĻž āĻāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻāĻ˛ā§ āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻāĻāĻŋ āĻ¸āĻĢāĻ˛ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨-āĻā§āĻĄ āĻĻāĻŋāĻ¯āĻŧā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°ā§āĨ¤
- -āĻšā§āĻ¯āĻžāĻ - āĻļā§āĻ§ā§ āĻāĻ¨ā§āĻāĻžāĻ°ā§āĻā§āĻāĻŋāĻ āĻļā§āĻ˛ āĻ¨āĻŋāĻˇā§āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°ā§ āĻ¤ā§āĻŽāĻŋ āĻāĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤? āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
git add .gitlab-ci.yml
git commit -m "Automate deploy"
āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŋāĻ āĻ§āĻžāĻā§āĻāĻž āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§:
āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§āĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
11. āĻļāĻŋāĻ˛ā§āĻĒāĻāĻ°ā§āĻŽ āĻāĻŦāĻ āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ¯āĻāĻ¨ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻ ā§āĻ˛āĻžāĻ ā§āĻ˛āĻŋ
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤, āĻāĻĒāĻ°ā§āĻ° āĻ§āĻžāĻĒāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¯ā§āĻā§āĻ¨ā§ āĻŽāĻžāĻāĻā§āĻ°ā§āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻ¤ā§āĻ°āĻŋ āĻāĻŦāĻ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻĨā§āĻˇā§āĻ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻ¸āĻžāĻāĻ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻā§āĻ¯āĻžāĻ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻ¨āĻžāĨ¤ āĻ āĻ¤āĻāĻŦ, āĻāĻŽāĻ°āĻž āĻāĻ°āĻ āĻāĻ¤āĻŋāĻļā§āĻ˛ āĻāĻĒāĻžāĻ¯āĻŧā§ āĻ¯āĻžāĻŦ āĻāĻŦāĻ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻļāĻžāĻāĻžāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻā§āĻ¸ā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻŦāĨ¤
āĻ§āĻžāĻ°āĻŖāĻž āĻ¸āĻšāĻ: āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŽā§āĻ āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻžāĻāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻāĻĒāĻ¨āĻŋ āĻ§āĻžāĻā§āĻāĻž āĻĻāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ¨āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻāĻ°āĻž āĻšāĻŦā§ āĻŽāĻžāĻ˛āĻŋāĻ, āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ Kubernetes āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ āĻĻā§āĻāĻŋ āĻāĻžāĻ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ gitlab-ci.yml:
build_website:
extends: .build_docker_image
variables:
GIT_SUBMODULE_STRATEGY: normal
script:
- mkdir -p $CI_PROJECT_DIR/artifacts
- /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
artifacts:
paths:
- artifacts/
only:
refs:
- master
- tags
deploy_website:
extends: .deploy_qbec_app
script:
- DIGEST="$(cat artifacts/website.digest)"
- qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"
āĻĻāĻ¯āĻŧāĻž āĻāĻ°ā§ āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻļāĻžāĻāĻž āĻ¯ā§āĻ āĻāĻ°ā§āĻāĻŋ āĻŽāĻžāĻ˛āĻŋāĻ Đē refs āĻāĻžāĻāĻ°āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ˛ā§āĻĄ_āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻžāĻāĻ āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻāĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻāĻŋ $CI_COMMIT_REF_NAME āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ $CI_COMMIT_TAG, āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻŽāĻ°āĻž āĻāĻŋāĻ-āĻāĻ° āĻā§āĻ¯āĻžāĻāĻā§āĻ˛āĻŋ āĻĨā§āĻā§ āĻĒāĻ°āĻŋāĻ¤ā§āĻ°āĻžāĻŖ āĻĒāĻžāĻ āĻāĻŦāĻ āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻāĻŽāĻŋāĻ āĻļāĻžāĻāĻžāĻ° āĻ¨āĻžāĻŽā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŽā§āĻāĻāĻŋ āĻĒā§āĻļ āĻāĻ°āĻŦāĨ¤ āĻāĻāĻŋ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ¯ā§ āĻāĻāĻŋ āĻā§āĻ¯āĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§āĻ āĻāĻžāĻ āĻāĻ°āĻŦā§, āĻ¯āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĄāĻāĻžāĻ°-āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¸āĻš āĻ¸āĻžāĻāĻā§āĻ° āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻāĻā§āĻ˛āĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻŦā§āĨ¤
āĻ¯āĻāĻ¨ āĻ¸āĻžāĻāĻā§āĻ° āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻāĻžāĻ° āĻā§āĻ¯āĻžāĻā§āĻ° āĻ¨āĻžāĻŽ āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻāĻ¨āĻ āĻāĻŽāĻžāĻĻā§āĻ° Kubernetes-āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻŋāĻ¤ā§āĻ° āĻĨā§āĻā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋāĻā§ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻŦā§ āĻ¨āĻž, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻā§āĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°āĻŦā§ āĻ¨āĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻāĨ¤
āĻŦāĻŋāĻāĻ˛ā§āĻĒ --vm:ext-str digest="$DIGEST" qbec-āĻāĻ° āĻāĻ¨ā§āĻ¯ - āĻāĻĒāĻ¨āĻžāĻā§ jsonnet-āĻ āĻāĻāĻāĻŋ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻĒāĻžāĻ¸ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻŽāĻ°āĻž āĻāĻžāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŦā§āĻĻāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ°āĻŋāĻ˛āĻŋāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšā§āĻāĨ¤ āĻāĻŽāĻ°āĻž āĻāĻ° āĻā§āĻ¯āĻžāĻ āĻ¨āĻžāĻŽāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž, āĻ¯āĻž āĻāĻāĻ¨ āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŋāĻ¤ā§āĻ°āĻāĻŋāĻ° āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¸āĻžāĻĨā§ āĻ˛āĻŋāĻā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻ¯āĻāĻ¨ āĻāĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ¤āĻāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻāĻŋ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻāĻžāĻ¨ā§, āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ā§ āĻāĻŋāĻ¤ā§āĻ°ā§āĻ° āĻĄāĻžāĻāĻā§āĻ¸ā§āĻ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻāĻžāĻ¨āĻŋāĻā§āĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻŦā§ (āĻŦāĻŋāĻāĻ˛ā§āĻĒ --āĻĄāĻžāĻāĻā§āĻ¸ā§āĻ-āĻĢāĻžāĻāĻ˛)
āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻ°āĻž āĻāĻ āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻŦ āĻāĻŦāĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻŋ āĻĒāĻĄāĻŧāĻŦāĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ deploy/website/environments/base.libsonnet āĻ¯āĻž āĻāĻāĻ¨ āĻāĻ āĻŽāĻ¤ āĻĻā§āĻāĻžāĻŦā§:
{
components: {
website: {
name: 'example-docs',
image: 'registry.gitlab.com/kvaps/docs.example.org/website@' + std.extVar('digest'),
replicas: 1,
containerPort: 80,
servicePort: 80,
nodeSelector: {},
tolerations: [],
ingressClass: 'nginx',
domain: 'docs.example.org',
},
},
}
āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨, āĻāĻāĻ¨ āĻ¯ā§ āĻā§āĻ¨ā§ āĻāĻŽāĻŋāĻ āĻāĻ¨ āĻŽāĻžāĻ˛āĻŋāĻ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻļā§āĻ°ā§ āĻāĻ°ā§ āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻžāĻāĻ, āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻāĻŋ Kubernetes āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
git add .
git commit -m "Configure dynamic build"
āĻĒāĻ°ā§ āĻāĻāĻž āĻā§āĻ āĻāĻāĻ āĻāĻŋāĻ āĻ§āĻžāĻā§āĻāĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ āĻŽāĻ¤ āĻāĻŋāĻā§ āĻĻā§āĻāĻ¤ā§ āĻšāĻŦā§:
āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
āĻ¨ā§āĻ¤āĻŋāĻāĻ¤āĻāĻžāĻŦā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻļā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ°āĻā§ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻŽā§āĻ¤āĻžāĻ¯āĻŧā§āĻ¨ āĻāĻ°āĻžāĻ° āĻĻāĻ°āĻāĻžāĻ° āĻ¨ā§āĻ, āĻ¯āĻĻāĻŋ āĻ¨āĻž, āĻ āĻŦāĻļā§āĻ¯āĻ, āĻāĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§ āĻāĻŋāĻā§āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻ āĻŋāĻ āĻāĻ°āĻŋ gitlab-ci.yml:
deploy_gitlab_runner:
extends: .deploy_qbec_app
variables:
GIT_SUBMODULE_STRATEGY: normal
before_script:
- base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
script:
- qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes
only:
changes:
- deploy/gitlab-runner/**/*
āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻā§āĻ°ā§āĻ¯āĻžāĻ āĻ°āĻžāĻāĻž āĻšāĻŦā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨/āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ°/ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ°āĻŦā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¯āĻĻāĻŋ āĻā§āĻ¨ āĻĨāĻžāĻā§
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
git add .gitlab-ci.yml
git commit -m "Reduce gitlab-runner deploy"
āĻāĻŋāĻ āĻ§āĻžāĻā§āĻāĻž, āĻāĻāĻž āĻ¤ā§āĻ˛āĻ¨āĻžāĻŽā§āĻ˛āĻ āĻāĻžāĻ˛:
āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻž āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§āĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
12. āĻāĻ¤āĻŋāĻļā§āĻ˛ āĻĒāĻ°āĻŋāĻŦā§āĻļ
āĻāĻ¤āĻŋāĻļā§āĻ˛ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨āĻā§ āĻŦā§āĻāĻŋāĻ¤ā§āĻ°ā§āĻ¯āĻŽāĻ¯āĻŧ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ¸ā§āĻā§āĨ¤
āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻžāĻ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ āĻŦāĻŋāĻ˛ā§āĻĄ_āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻžāĻāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻŽāĻžāĻā§ gitlab-ci.yml, āĻāĻāĻž āĻĨā§āĻā§ āĻŦā§āĻ˛āĻ āĻ āĻĒāĻ¸āĻžāĻ°āĻŖ āĻā§āĻŦāĻ˛, āĻ¯āĻž āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦāĻā§ āĻ¯ā§āĻā§āĻ¨ā§ āĻļāĻžāĻāĻžāĻ¯āĻŧ āĻ¯ā§ āĻā§āĻ¨ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ¤ā§ āĻāĻāĻŋ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻŦāĻžāĻ§ā§āĻ¯ āĻāĻ°āĻŦā§:
build_website:
extends: .build_docker_image
variables:
GIT_SUBMODULE_STRATEGY: normal
script:
- mkdir -p $CI_PROJECT_DIR/artifacts
- /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
artifacts:
paths:
- artifacts/
āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻžāĻ āĻāĻĒāĻĄā§āĻ āĻāĻ°ā§āĻ¨ deploy_website, āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ āĻĒāĻ°āĻŋāĻŦā§āĻļ:
deploy_website:
extends: .deploy_qbec_app
environment:
name: prod
url: https://docs.example.org
script:
- DIGEST="$(cat artifacts/website.digest)"
- qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"
āĻāĻāĻŋ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦāĻā§ āĻāĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻŦā§ āĻļāĻā§āĻā§ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻāĻŦāĻ āĻāĻāĻŋāĻ° āĻ¸āĻ āĻŋāĻ āĻ˛āĻŋāĻā§āĻ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻāĻ¨ āĻāĻ°ā§ āĻĻā§āĻāĻŋ āĻāĻžāĻ āĻ¯ā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ:
deploy_website:
extends: .deploy_qbec_app
environment:
name: prod
url: https://docs.example.org
script:
- DIGEST="$(cat artifacts/website.digest)"
- qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"
deploy_review:
extends: .deploy_qbec_app
environment:
name: review/$CI_COMMIT_REF_NAME
url: http://$CI_ENVIRONMENT_SLUG.docs.example.org
on_stop: stop_review
script:
- DIGEST="$(cat artifacts/website.digest)"
- qbec apply review --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
only:
refs:
- branches
except:
refs:
- master
stop_review:
extends: .deploy_qbec_app
environment:
name: review/$CI_COMMIT_REF_NAME
action: stop
stage: deploy
before_script:
- git clone "$CI_REPOSITORY_URL" master
- cd master
script:
- qbec delete review --root deploy/website --force:k8s-context __incluster__ --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
variables:
GIT_STRATEGY: none
only:
refs:
- branches
except:
refs:
- master
when: manual
āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻŦā§āĻ¯āĻ¤ā§āĻ¤ āĻ¯ā§āĻā§āĻ¨ āĻļāĻžāĻāĻžāĻ¯āĻŧ āĻ§āĻžāĻā§āĻāĻž āĻĻāĻŋāĻ¯āĻŧā§ āĻ¤āĻžāĻĻā§āĻ° āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻ¸āĻžāĻāĻā§āĻ° āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŦāĻ°ā§āĻĒ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻŦā§āĨ¤
āĻāĻŽāĻ°āĻž qbec āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻāĻŋ: --āĻ
ā§āĻ¯āĻžāĻĒ-āĻā§āĻ¯āĻžāĻ - āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻā§āĻ˛āĻŋāĻā§ āĻā§āĻ¯āĻžāĻ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ āĻā§āĻ¯āĻžāĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ; āĻ¯āĻāĻ¨ Kubernetes-āĻ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻŦāĻ āĻ§ā§āĻŦāĻāĻ¸ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, qbec āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻžāĻĻā§āĻ° āĻāĻĒāĻ° āĻāĻžāĻ āĻāĻ°āĻŦā§āĨ¤
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž, āĻ¤āĻŦā§ āĻā§āĻŦāĻ˛ āĻāĻāĻāĻāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤
āĻāĻāĻžāĻ¨ā§āĻ āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ qbec āĻāĻŦā§āĻĻāĻ¨ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻžāĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ qbec āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°ā§āĻ¨ - āĻāĻāĻŋ āĻ āĻŋāĻ āĻ¸ā§āĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ āĻ¯āĻāĻ¨ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯āĻā§āĻ˛āĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦ (āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻž āĻāĻŦāĻ āĻĄāĻŋāĻĢāĻ˛ā§āĻ):
āĻ¯ā§āĻ āĻāĻāĻžāĻ¨ā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§āĻ¨ āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻ°āĻŋāĻŦā§āĻļ deploy/website/qbec.yaml
spec:
environments:
review:
defaultNamespace: docs
server: https://kubernetes.example.org:8443
āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻ°āĻž āĻāĻāĻž āĻā§āĻˇāĻŖāĻž deploy/website/params.libsonnet:
local env = std.extVar('qbec.io/env');
local paramsMap = {
_: import './environments/base.libsonnet',
default: import './environments/default.libsonnet',
review: import './environments/review.libsonnet',
};
if std.objectHas(paramsMap, env) then paramsMap[env] else error 'environment ' + env + ' not defined in ' + std.thisFile
āĻāĻŦāĻ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ¸ā§āĻāĻŽ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻ˛āĻŋāĻā§āĻ¨ deploy/website/environments/review.libsonnet:
// this file has the param overrides for the default environment
local base = import './base.libsonnet';
local slug = std.extVar('qbec.io/tag');
local subdomain = std.extVar('subdomain');
base {
components+: {
website+: {
name: 'example-docs-' + slug,
domain: subdomain + '.docs.example.org',
},
},
}
āĻāĻ° āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻžāĻ āĻāĻāĻāĻŋ āĻāĻ¨āĻŋāĻˇā§āĻ āĻāĻāĻžāĻā§āĻˇāĻĒāĻžāĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻ āĻ¸ā§āĻāĻĒ_āĻ°āĻŋāĻāĻŋāĻ, āĻļāĻžāĻāĻžāĻāĻŋ āĻ¸āĻ°āĻžāĻ¨ā§ āĻšāĻ˛ā§ āĻāĻāĻŋ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻ¯āĻžāĻ¤ā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻāĻāĻŋāĻ¤ā§ āĻā§āĻāĻāĻāĻ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻ¨āĻž āĻāĻ°ā§āĨ¤ GIT_STRATEGY: āĻā§āĻ¨ā§āĻāĻŋāĻ āĻ¨āĻ¯āĻŧ, āĻĒāĻ°ā§ āĻāĻŽāĻ°āĻž āĻā§āĻ˛ā§āĻ¨ āĻāĻ°āĻŋ āĻŽāĻžāĻ˛āĻŋāĻ-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ°āĻŋāĻāĻŋāĻ āĻļāĻžāĻāĻž āĻāĻŦāĻ āĻŽā§āĻā§ āĻĻāĻŋāĻ¨āĨ¤
āĻāĻāĻā§ āĻŦāĻŋāĻā§āĻ°āĻžāĻ¨ā§āĻ¤āĻŋāĻāĻ°, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻŋ āĻāĻāĻ¨āĻ āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻāĻĒāĻžāĻ¯āĻŧ āĻā§āĻāĻā§ āĻĒāĻžāĻāĻ¨āĻŋāĨ¤
āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻšāĻ˛ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻšā§āĻā§āĻ˛ā§āĻ° āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž, āĻ¯āĻž āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ°ā§āĻĒā§ āĻ§ā§āĻŦāĻāĻ¸ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
git add .
git commit -m "Enable automatic review"
āĻāĻŋāĻ āĻ§āĻžāĻā§āĻāĻž, git checkout -b āĻĒāĻ°ā§āĻā§āĻˇāĻž, āĻāĻŋāĻ āĻĒā§āĻļ āĻ āĻ°āĻŋāĻāĻŋāĻ¨ āĻā§āĻ¸ā§āĻ, āĻā§āĻ āĻāĻ°ā§āĻ¨:
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦā§ āĻ¤ā§āĻ°āĻŋ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
āĻ¸āĻŦ āĻāĻžāĻ āĻāĻ°āĻā§? - āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻļāĻžāĻāĻž āĻŽā§āĻā§āĻ¨: āĻāĻŋāĻ āĻā§āĻāĻāĻāĻ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ°, āĻāĻŋāĻ āĻĒā§āĻļ āĻŽā§āĻ˛: āĻĒāĻ°ā§āĻā§āĻˇāĻž, āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŋ āĻ¯ā§ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻŽā§āĻā§ āĻĢā§āĻ˛āĻžāĻ° āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻžāĻ āĻāĻ°ā§āĻā§ā§ˇ
āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻŋ āĻ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻ¸ā§āĻĒāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻ¯ā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¯ā§ āĻā§āĻ¨āĻ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻļāĻžāĻāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¤āĻŋāĻ¨āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ gitlab-ci.yml āĻĢāĻžāĻāĻ˛ āĻāĻŦāĻ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻā§āĻĒāĻ¨ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛.
āĻ āĻ¤āĻāĻŦ, āĻāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻāĻ°āĻā§āĻˇāĻŋāĻ¤ āĻļāĻžāĻāĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ¤āĻžāĻĻā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĻā§āĻĸāĻŧāĻāĻžāĻŦā§ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻŽāĻžāĻ˛āĻŋāĻ, āĻ āĻĨāĻŦāĻž āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻ¸ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨āĨ¤
13 āĻ°āĻŋāĻāĻŋāĻ āĻ
ā§āĻ¯āĻžāĻĒāĻ¸
āĻāĻ āĻŦā§āĻ¤āĻžāĻŽāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ gitlab/route-map.yml āĻāĻŦāĻ āĻāĻ¤ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻĨā§āĻ° āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨; āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻāĻŋ āĻā§āĻŦ āĻ¸āĻšāĻ āĻšāĻŦā§:
# Indices
- source: /content/(.+?)_index.(md|html)/
public: '1'
# Pages
- source: /content/(.+?).(md|html)/
public: '1/'
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž:
git add .gitlab/
git commit -m "Enable review apps"
āĻāĻŋāĻ āĻ§āĻžāĻā§āĻāĻž, āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨:
āĻ°āĻŋāĻāĻŋāĻ āĻ ā§āĻ¯āĻžāĻĒ āĻŦā§āĻ¤āĻžāĻŽā§āĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ
āĻāĻžāĻ āĻļā§āĻˇ!
āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸ā§āĻ¤ā§āĻ°:
- āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦā§:
https://gitlab.com/kvaps/docs.example.org - āĻāĻŋāĻāĻšāĻžāĻŦā§:
https://github.com/kvaps/docs.example.org
āĻāĻĒāĻ¨āĻžāĻ° āĻŽāĻ¨ā§āĻ¯ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻāĻŽāĻŋ āĻāĻļāĻž āĻāĻ°āĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻĒāĻāĻ¨ā§āĻĻ āĻāĻ°ā§āĻā§āĻ¨
āĻāĻ¤ā§āĻ¸: www.habr.com