āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻžāĻāĻž āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻžāĻĻā§āĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻāĻŦāĻ/āĻ āĻĨāĻŦāĻž āĻŽāĻžāĻā§āĻ¨ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻžāĻ˛ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻ¤ā§ āĻĻā§āĻ°ā§āĻ¤ āĻ¤āĻžāĻĻā§āĻ° āĻĒāĻŖā§āĻ¯ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻŋ āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ gitlab-runner, gitlab-ci āĻāĻŦāĻ maven-plugin āĻ¸ā§āĻ āĻāĻĒ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤
āĻĒā§āĻ°ā§āĻŦāĻļāĻ°ā§āĻ¤:
- āĻāĻŽāĻāĻŋāĻāĻ¨ āĻāĻŦāĻ āĻāĻŋāĻĒāĻŋāĻāĻŋ āĻā§āĻā§āĻ˛āĻŋāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻ¸āĻā§āĻāĻ¯āĻŧāĻ¸ā§āĻĨāĻžāĻ¨āĨ¤
- āĻĒāĻžāĻŦāĻ˛āĻŋāĻ CI āĻāĻžāĻ°ā§āĻ¯āĻā§āĻ˛āĻŋāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĨ¤
- āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻ¤ā§ āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ (āĻ°āĻŋāĻ˛āĻŋāĻ/āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻ) āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻž āĻšāĻā§āĻā§āĨ¤
- āĻŽā§āĻ¯āĻžāĻā§āĻ¨ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻžāĻ˛ā§ āĻĒā§āĻ°āĻāĻžāĻļāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĨ¤
- āĻāĻāĻžāĻ§āĻŋāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻļāĻŋāĻ˛ā§āĻĒāĻāĻ°ā§āĻŽ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĨ¤
- āĻ¸āĻ°āĻ˛āĻ¤āĻž āĻāĻŦāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¸āĻšāĻ.
āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻ
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¤āĻĨā§āĻ¯ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ pom.xml āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻ˛ āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¤āĻĨā§āĻ¯
- āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻāĻāĻ¸āĻāĻ¸ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋ āĻšā§āĻ¸ā§āĻāĻŋāĻ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻŽāĻžāĻā§āĻ¨ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻžāĻ˛ā§ āĻ¨āĻŋāĻĻāĻ°ā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻāĻāĻāĻŋ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§googolplex , āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ¸āĻ āĻŋāĻ āĻāĻžāĻ¯āĻŧāĻāĻžāĻ¯āĻŧ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻŦāĨ¤ - āĻ āĻĒā§āĻ°āĻžāĻ-āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻāĻ°ā§āĻ¨
āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻāĻŋāĻ°āĻž āĻāĻŦāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻā§āĻ˛āĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻŋāĻāĻŋāĻ āĻļā§āĻ°ā§ āĻāĻ°ā§āĻ¨ (āĻāĻ°ā§ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯, āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻĒāĻĄāĻŧā§āĻ¨āĻāĻāĻāĻŋ āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻāĻŋāĻ°āĻž āĻāĻŋāĻāĻŋāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ ) āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋ āĻā§āĻ˛āĻžāĻ° āĻĒāĻ°ā§, JIRA āĻ˛āĻāĻāĻ¨/āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻĒā§āĻ¯āĻŧāĻžāĻ° (āĻāĻ° āĻĒāĻ°ā§ āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻ ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§ āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻ¨ā§āĻā§āĻ¸āĻžāĻ¸ā§ āĻļāĻŋāĻ˛ā§āĻĒāĻāĻ°ā§āĻŽ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§āĨ¤ - āĻāĻ°āĻ, āĻāĻāĻāĻŋ GPG āĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻā§āĻŦ āĻļā§āĻˇā§āĻāĻāĻžāĻŦā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻ°ā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻāĻžāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻŋāĻāĻžāĻ āĻĻā§āĻā§āĻ¨.
āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ āĻ¸āĻžāĻāĻ¨ āĻāĻ¨ āĻāĻ°āĻ¤ā§ GnuPG āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻā§āĻā§ - āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ GPG āĻā§ (gnupg/gnupg2) āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ Linux āĻāĻ¨āĻ¸ā§āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§
RNG-āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻāĻ¨āĻā§āĻ°āĻĒāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§āĨ¤ āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ, āĻā§ āĻā§āĻ¨āĻžāĻ°ā§āĻļāĻ¨ āĻā§āĻŦ āĻĻā§āĻ°ā§āĻ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ - āĻ¸ā§āĻā§āĻ°ā§āĻ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻĒāĻžāĻŦāĻ˛āĻŋāĻ GPG āĻā§
http://keys.gnupg.net http://pool.sks-keyservers.net http://keyserver.ubuntu.com
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻā§āĻā§
- āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻŦāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻļāĻŋāĻ˛ā§āĻĒāĻāĻ°ā§āĻŽ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤ āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§ āĻ¸āĻšāĻ āĻāĻŦāĻ āĻāĻāĻŋāĻ˛ āĻŦāĻ˛ā§āĻāĻŋ -
āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ - āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§ āĻ¯āĻžāĻ¨ -> āĻ¸ā§āĻāĻŋāĻāĻ¸ -> āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ -> āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻļāĻžāĻāĻžāĨ¤ āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻŽā§āĻā§ āĻĢā§āĻ˛āĻŋ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ°āĻā§āĻˇāĻŖāĻžāĻŦā§āĻā§āĻˇāĻŖāĻāĻžāĻ°ā§ āĻā§āĻŽāĻŋāĻāĻž āĻ¸āĻš āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻļ āĻāĻŦāĻ āĻŽāĻžāĻ°ā§āĻ āĻāĻ°āĻžāĻ° āĻ āĻ§āĻŋāĻāĻžāĻ° āĻ¸āĻš āĻāĻ¯āĻŧāĻžāĻāĻ˛ā§āĻĄāĻāĻžāĻ°ā§āĻĄ * āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻāĻāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¯ā§āĻ āĻāĻ°āĻŋāĨ¤ āĻāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻāĻŋ āĻāĻ āĻĒā§āĻ°āĻā§āĻā§āĻ āĻāĻŦāĻ āĻ¯ā§ āĻā§āĻ°ā§āĻĒā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻ āĻĒā§āĻ°ā§āĻā§āĻā§āĻā§āĻ° āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻāĻ¤ āĻāĻāĻ¯āĻŧā§āĻ° āĻ¸āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ āĻāĻ°āĻŦā§ā§ˇ
- āĻ¯āĻĻāĻŋ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ°āĻā§āĻˇāĻŖāĻžāĻŦā§āĻā§āĻˇāĻŖāĻāĻžāĻ°ā§ āĻĨāĻžāĻā§, āĻ¤āĻŦā§ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻšāĻŦā§ āĻ¨ā§āĻ¤āĻŋāĻāĻ¤āĻāĻžāĻŦā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻāĻ°āĻžāĨ¤
āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§ āĻ¯āĻžāĻ¨ -> āĻ¸ā§āĻāĻŋāĻāĻ¸ -> āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ -> āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨āĻ¤āĻž, āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯, āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻāĻŦāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨āĻ¤āĻž āĻ¸ā§āĻ āĻāĻ°ā§āĻ¨ āĻŦā§āĻ¸āĻ°āĻāĻžāĻ°ā§.
āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ā§āĻ° āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻāĻā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻžāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĻāĻŋ āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻžāĻ° āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻā§āĨ¤ āĻ āĻŋāĻ āĻāĻā§, āĻāĻ¸āĻ˛ā§ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻ˛āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻ¤āĻĨā§āĻ¯ āĻĻā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻ° āĻ¸ā§āĻŦāĻžāĻ°ā§āĻĨā§ āĻ¨āĻ¯āĻŧāĨ¤ - āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻāĻ ā§āĻ° āĻāĻ°āĻž
āĻĒā§āĻ°āĻā§āĻā§āĻā§ āĻ¯āĻžāĻ¨ -> āĻ¸ā§āĻāĻŋāĻāĻ¸ -> āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋ -> āĻĒā§āĻļ āĻ°ā§āĻ˛āĻ¸ āĻāĻŦāĻ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ āĻāĻŽāĻŋāĻāĻ° āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻž āĻ¸ā§āĻ āĻāĻ°ā§āĻ¨, āĻ˛ā§āĻāĻ āĻāĻāĻāĻ¨ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻŽāĻŋ āĻ¸ā§āĻāĻŋāĻ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļāĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻāĻŽāĻŋāĻ , āĻāĻŦāĻ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŦāĻŋāĻšā§āĻ¨ āĻāĻŽāĻŋāĻ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻā§āĻ¯āĻžāĻ¨ āĻāĻ°ā§āĻ¨āĨ¤ - āĻāĻ° āĻĒāĻ°ā§, āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§
āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§ āĻ¯āĻžāĻ¨ -> āĻ¸ā§āĻāĻŋāĻāĻ¸ -> CI / CD -> āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻ°āĻŋāĻāĻžāĻ°-āĻā§āĻā§āĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻāĻ āĻā§āĻā§āĻ¨āĻāĻŋ āĻ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻ°ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§ āĻ¯ā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻā§āĻ°ā§āĻĒā§ āĻ¯āĻžāĻ¨ -> āĻ¸ā§āĻāĻŋāĻāĻ¸ -> CI / CD -> āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨DEPLOY_TOKEN
āĻŽāĻžāĻ¨āĻāĻŋāĻ¤ā§ āĻā§āĻ°āĻŋāĻāĻžāĻ°-āĻā§āĻā§āĻ¨ āĻ¸āĻšāĨ¤
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻžāĻ¨āĻžāĻ°
āĻāĻ āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻ¨ā§āĻāĻŋāĻ (āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ) āĻāĻŦāĻ āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ (āĻļā§āĻ¯āĻŧāĻžāĻ°āĻĄ) āĻ°āĻžāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĄāĻŋāĻĒā§āĻ˛ā§āĻ¯āĻŧā§ āĻāĻžāĻ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§āĨ¤
āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ°āĻžāĻ¨āĻžāĻ°
āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻ°āĻžāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ, āĻāĻžāĻ°āĻŖ āĻĒā§āĻ°āĻĨāĻŽāĻ¤ āĻāĻāĻŋ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ, āĻĻā§āĻ°ā§āĻ¤, āĻ¸āĻ¸ā§āĻ¤āĻžāĨ¤
āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻŋ 1 CPU, 2 GB RAM, 20 GB HDD āĻ¸āĻš Linux VDS āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻāĻŋāĨ¤ āĻāĻ¸ā§āĻ¯ā§ āĻŽā§āĻ˛ā§āĻ¯ ~ 3000âŊ āĻĒā§āĻ°āĻ¤āĻŋ āĻŦāĻāĻ°āĨ¤
āĻāĻŽāĻžāĻ° āĻ°āĻžāĻ¨āĻžāĻ°
āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻŋ VDS 4 CPU, 4 GB RAM, 50 GB SSD āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤ āĻāĻāĻŋāĻ° āĻĻāĻžāĻŽ ~11000âŊ āĻāĻŦāĻ āĻāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻ¨āĻ āĻāĻĢāĻ¸ā§āĻ¸ āĻšāĻ¯āĻŧāĻ¨āĻŋā§ˇ
āĻāĻŽāĻžāĻ° āĻŽā§āĻ 7 āĻāĻŋ āĻŽā§āĻļāĻŋāĻ¨ āĻāĻā§āĨ¤ āĻāĻ°ā§āĻŦāĻžāĻ¤ā§ 5āĻāĻŋ āĻāĻŦāĻ āĻāĻšā§āĻ°ā§ 2āĻāĻŋāĨ¤
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻā§. āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻŦāĨ¤
āĻāĻŽāĻ°āĻž SSH āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻ¯āĻžāĻ āĻāĻŦāĻ java, git, maven, gnupg2 āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŋāĨ¤
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻā§āĻā§
- āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻ°ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
runner
sudo groupadd runner
- āĻŽā§āĻ¯āĻžāĻā§āĻ¨ āĻā§āĻ¯āĻžāĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻā§āĻ°ā§āĻĒ āĻ
āĻ§āĻŋāĻāĻžāĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°ā§āĻ¨
runner
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻāĻ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻāĻāĻžāĻ§āĻŋāĻ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻ¨āĻž āĻāĻ°ā§āĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻāĻŋ āĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤mkdir -p /usr/cache/.m2/repository chown -R :runner /usr/cache chmod -R 770 /usr/cache
- āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
gitlab-deployer
āĻāĻŦāĻ āĻā§āĻ°ā§āĻĒā§ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨runner
useradd -m -d /home/gitlab-deployer gitlab-deployer usermod -a -G runner gitlab-deployer
- āĻĢāĻžāĻāĻ˛ā§ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
/etc/ssh/sshd_config
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ˛āĻžāĻāĻ¨AllowUsers root@* [email protected]
- āĻ°āĻŋāĻŦā§āĻ āĻāĻ°ā§āĻ¨
sshd
systemctl restart sshd
- āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¸ā§āĻ āĻāĻ°ā§āĻ¨
gitlab-deployer
(āĻāĻāĻŋ āĻ¸āĻšāĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻšā§āĻ¸ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻž āĻ°āĻ¯āĻŧā§āĻā§)passwd gitlab-deployer
- āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨ (āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ x86-64)
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 sudo chmod +x /usr/local/bin/gitlab-runner ln -s /usr/local/bin/gitlab-runner /etc/alternatives/gitlab-runner ln -s /etc/alternatives/gitlab-runner /usr/bin/gitlab-runner
- gitlab.com -> deploy-project -> Settings -> CI/CD -> Runners -> Specific Runners āĻ āĻ¯āĻžāĻ¨ āĻāĻŦāĻ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°ā§āĻļāĻ¨ āĻā§āĻā§āĻ¨ āĻāĻĒāĻŋ āĻāĻ°ā§āĻ¨
āĻĒāĻ°ā§āĻĻāĻž
- āĻ°āĻžāĻ¨āĻžāĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨
gitlab-runner register --config /etc/gitlab-runner/gitlab-deployer-config.toml
āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž
Runtime platform arch=amd64 os=linux pid=17594 revision=3001a600 version=11.10.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.com/
Please enter the gitlab-ci token for this runner:
REGISTRATION_TOKEN
Please enter the gitlab-ci description for this runner:
[ih1174328.vds.myihor.ru]: Deploy Runner
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
Registering runner... succeeded runner=ZvKdjJhx
Please enter the executor: docker-ssh, parallels, virtualbox, docker-ssh+machine, kubernetes, docker, ssh, docker+machine, shell:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
- āĻ°āĻžāĻ¨āĻžāĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŋāĻ¤ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨āĨ¤ gitlab.com-āĻ āĻ¯āĻžāĻ¨ -> deploy-project -> Settings -> CI/CD -> Runners -> Specific Runners -> Runners āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯
āĻĒāĻ°ā§āĻĻāĻž
- āĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻ˛āĻžāĻĻāĻž āĻ¸ā§āĻŦāĻž
/etc/systemd/system/gitlab-deployer.service
[Unit] Description=GitLab Deploy Runner After=syslog.target network.target ConditionFileIsExecutable=/usr/local/bin/gitlab-runner [Service] StartLimitInterval=5 StartLimitBurst=10 ExecStart=/usr/local/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-deployer" "--config" "/etc/gitlab-runner/gitlab-deployer-config.toml" "--service" "gitlab-deployer" "--syslog" "--user" "gitlab-deployer" Restart=always RestartSec=120 [Install] WantedBy=multi-user.target
- āĻāĻŽāĻ°āĻž āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŋāĨ¤
systemctl enable gitlab-deployer.service systemctl start gitlab-deployer.service systemctl status gitlab-deployer.service
- āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻ˛āĻā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻĻāĻžāĻšāĻ°āĻŖ
GPG āĻā§ āĻĒā§āĻ°āĻāĻ¨ā§āĻŽ
-
āĻāĻāĻ āĻŽā§āĻļāĻŋāĻ¨ āĻĨā§āĻā§ āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ āĻ§ā§āĻ¨ā§ ssh āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¯āĻžāĻ
gitlab-deployer
(āĻāĻāĻŋ GPG āĻā§ āĻĒā§āĻ°āĻāĻ¨ā§āĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ)ssh [email protected]
-
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻ¤ā§āĻ¤āĻ° āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻāĻāĻŋ āĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋāĨ¤ āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻ¨āĻžāĻŽ āĻāĻŦāĻ āĻāĻŽā§āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻāĻŋāĨ¤
āĻā§āĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤ āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ āĻāĻ āĻā§ āĻĻāĻŋāĻ¯āĻŧā§ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻāĻ°āĻž āĻšāĻŦā§āĨ¤gpg --gen-key
-
āĻā§āĻ
gpg --list-keys -a /home/gitlab-deployer/.gnupg/pubring.gpg ---------------------------------------- pub 4096R/00000000 2019-04-19 uid Petruha Petrov <[email protected]> sub 4096R/11111111 2019-04-19
-
āĻā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻā§ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻž āĻšāĻā§āĻā§
gpg --keyserver keys.gnupg.net --send-key 00000000 gpg: sending key 00000000 to hkp server keys.gnupg.net
āĻŽāĻžāĻā§āĻ¨ āĻ¸ā§āĻāĻāĻĒ
- āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ
āĻ§ā§āĻ¨ā§ āĻ¯āĻžāĻ¨
gitlab-deployer
su gitlab-deployer
- āĻŽā§āĻ¯āĻžāĻā§āĻ¨ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻļā§āĻ° āĻ¸āĻžāĻĨā§ āĻ˛āĻŋāĻā§āĻ āĻāĻ°ā§āĻ¨ (āĻā§āĻ¨ āĻā§āĻ˛ āĻāĻ°āĻŦā§āĻ¨ āĻ¨āĻž)
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻāĻ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻāĻāĻžāĻ§āĻŋāĻ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻ¨āĻž āĻāĻ°ā§āĻ¨ āĻ¤āĻŦā§ āĻāĻ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻāĻŋ āĻāĻĄāĻŧāĻžāĻ¨ā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤mkdir -p ~/.m2/repository ln -s /usr/cache/.m2/repository /home/gitlab-deployer/.m2/repository
- āĻāĻāĻāĻŋ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
mvn --encrypt-master-password password {hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}
- ~/.m2/settings-security.xml āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
<settingsSecurity> <master>{hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}</master> </settingsSecurity>
- āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻĨā§āĻā§ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻž āĻšāĻā§āĻā§
mvn --encrypt-password SONATYPE_PASSWORD {98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}
- ~/.m2/settings.xml āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
<settings> <profiles> <profile> <id>env</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <gpg.passphrase>GPG_SECRET_KEY_PASSPHRASE</gpg.passphrase> </properties> </profile> </profiles> <servers> <server> <id>sonatype</id> <username>SONATYPE_USERNAME</username> <password>{98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}</password> </server> </servers> </settings>
āĻā§āĻĨāĻžāĻ¯āĻŧ,
GPG_SECRET_KEY_PASSPHRASE - GPG āĻā§ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ
SONATYPE_USERNAME - āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻ˛āĻāĻāĻ¨
āĻāĻāĻŋ āĻ°āĻžāĻ¨āĻžāĻ° āĻ¸ā§āĻāĻāĻĒ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻāĻžāĻā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻļā§āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ°āĻžāĻ¨āĻžāĻ°
GPG āĻā§ āĻĒā§āĻ°āĻāĻ¨ā§āĻŽ
-
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ GPG āĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻāĻ°āĻ¤ā§, gnupg āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨āĨ¤
yum install -y gnupg
-
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻ¤ā§āĻ¤āĻ° āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻāĻāĻŋ āĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋāĨ¤ āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻ¨āĻžāĻŽ āĻāĻŦāĻ āĻāĻŽā§āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻāĻŋāĨ¤ āĻā§āĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤
gpg --gen-key
-
āĻŽā§āĻ˛ āĻ¤āĻĨā§āĻ¯ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°ā§āĻ¨
gpg --list-keys -a pub rsa3072 2019-04-24 [SC] [expires: 2021-04-23] 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 uid [ultimate] tttemp <[email protected]> sub rsa3072 2019-04-24 [E] [expires: none]
-
āĻā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻā§ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻž āĻšāĻā§āĻā§
gpg --keyserver keys.gnupg.net --send-key 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 gpg: sending key 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 to hkp server keys.gnupg.net
-
āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻā§ āĻĒāĻžāĻā§āĻā§āĻ¨
gpg --export-secret-keys --armor 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 -----BEGIN PGP PRIVATE KEY BLOCK----- lQWGBFzAqp8BDADN41CPwJ/gQwiKEbyA902DKw/WSB1AvZQvV/ZFV77xGeG4K7k5 ... =2Wd2 -----END PGP PRIVATE KEY BLOCK-----
-
āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸ā§āĻāĻŋāĻāĻ¸ -> āĻ¸ā§āĻāĻŋāĻāĻ¸ -> CI / CD -> āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻ¯āĻžāĻ¨ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§āĻ¨
GPG_SECRET_KEY
āĻŽāĻžāĻā§āĻ¨ āĻ¸ā§āĻāĻāĻĒ
- āĻāĻāĻāĻŋ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
mvn --encrypt-master-password password {hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}
- āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸ā§āĻāĻŋāĻāĻ¸ -> āĻ¸ā§āĻāĻŋāĻāĻ¸ -> CI / CD -> āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¯āĻžāĻ¨ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§āĻ¨
SETTINGS_SECURITY_XML
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ˛āĻžāĻāĻ¨:<settingsSecurity> <master>{hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=}</master> </settingsSecurity>
- āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻĨā§āĻā§ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻž āĻšāĻā§āĻā§
mvn --encrypt-password SONATYPE_PASSWORD {98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}
- āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸ā§āĻāĻŋāĻāĻ¸ -> āĻ¸ā§āĻāĻŋāĻāĻ¸ -> CI / CD -> āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¯āĻžāĻ¨ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§āĻ¨
SETTINGS_XML
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ˛āĻžāĻāĻ¨:<settings> <profiles> <profile> <id>env</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <gpg.passphrase>GPG_SECRET_KEY_PASSPHRASE</gpg.passphrase> </properties> </profile> </profiles> <servers> <server> <id>sonatype</id> <username>sonatype_username</username> <password>{98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J}</password> </server> </servers> </settings>
āĻā§āĻĨāĻžāĻ¯āĻŧ,
GPG_SECRET_KEY_PASSPHRASE - GPG āĻā§ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ
SONATYPE_USERNAME - āĻ¸ā§āĻ¨āĻžāĻāĻžāĻāĻĒ āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻ˛āĻāĻāĻ¨
āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨
-
āĻāĻŽāĻ°āĻž āĻāĻžāĻāĻž āĻāĻ° āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¸āĻžāĻĨā§ āĻĄāĻŋāĻĒā§āĻ˛ā§āĻ¯āĻŧ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻ¸āĻšāĻ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋāĨ¤ āĻ¨ā§āĻā§ āĻāĻ˛āĻĒāĻžāĻāĻ¨ āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ.
FROM java:8u111-jdk-alpine RUN apk add gnupg maven git --update-cache --repository http://dl-4.alpinelinux.org/alpine/edge/community/ --allow-untrusted && mkdir ~/.m2/
-
āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ§āĻžāĻ°āĻ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ
docker build -t registry.gitlab.com/group/deploy .
-
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻāĻŦāĻ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ āĻŽāĻ§ā§āĻ¯ā§ āĻ§āĻžāĻ°āĻ āĻ˛ā§āĻĄ.
docker login -u USER -p PASSWORD registry.gitlab.com docker push registry.gitlab.com/group/deploy
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ
āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨
āĻĄāĻŋāĻĒā§āĻ˛ā§āĻ¯āĻŧ āĻĒā§āĻ°āĻā§āĻā§āĻā§āĻ° āĻ°ā§āĻā§ .gitlab-ci.yml āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĻā§āĻāĻŋ āĻĒāĻžāĻ°āĻ¸ā§āĻĒāĻ°āĻŋāĻ āĻāĻāĻā§āĻāĻŋāĻ¯āĻŧāĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĨ¤ āĻ¯āĻĨāĻžāĻā§āĻ°āĻŽā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ°āĻžāĻ¨āĻžāĻ° āĻŦāĻž āĻļā§āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ°āĻžāĻ¨āĻžāĻ°āĨ¤
gitlab-ci.yml
stages:
- deploy
Specific Runner:
extends: .java_deploy_template
# ĐĐ°Đ´Đ°ŅĐ° ĐąŅĐ´ĐĩŅ вŅĐŋĐžĐģĐŊŅŅŅŅŅ ĐŊĐ° ваŅĐĩĐŧ shell-ŅĐ°ĐŊĐŊĐĩŅĐĩ
tags:
- deploy
Shared Runner:
extends: .java_deploy_template
# ĐĐ°Đ´Đ°ŅĐ° ĐąŅĐ´ĐĩŅ вŅĐŋĐžĐģĐŊŅŅŅŅŅ ĐŊĐ° ĐŋŅĐąĐģиŅĐŊĐžĐŧ docker-ŅĐ°ĐŊĐŊĐĩŅĐĩ
tags:
- docker
# ĐĐąŅаС иС ŅаСдĐĩĐģĐ° GitLab Runner -> Shared Runner -> Docker
image: registry.gitlab.com/group/deploy-project:latest
before_script:
# ĐĐŧĐŋĐžŅŅиŅŅĐĩĐŧ GPG ĐēĐģŅŅ
- printf "${GPG_SECRET_KEY}" | gpg --batch --import
# ĐĄĐžŅ
ŅĐ°ĐŊŅĐĩĐŧ maven ĐēĐžĐŊŅиĐŗŅŅĐ°ŅиŅ
- printf "${SETTINGS_SECURITY_XML}" > ~/.m2/settings-security.xml
- printf "${SETTINGS_XML}" > ~/.m2/settings.xml
.java_deploy_template:
stage: deploy
# ĐĐ°Đ´Đ°ŅĐ° ŅŅайОŅĐ°ĐĩŅ ĐŋĐž ŅŅиĐŗĐŗĐĩŅŅ, ĐĩŅĐģи ĐŋĐĩŅĐĩĐ´Đ°ĐŊĐ° ĐŋĐĩŅĐĩĐŧĐĩĐŊĐŊĐ°Ņ DEPLOY ŅĐž СĐŊĐ°ŅĐĩĐŊиĐĩĐŧ java
only:
variables:
- $DEPLOY == "java"
variables:
# ĐžŅĐēĐģŅŅĐ°ĐĩĐŧ ĐēĐģĐžĐŊиŅОваĐŊиĐĩ ŅĐĩĐēŅŅĐĩĐŗĐž ĐŋŅĐžĐĩĐēŅĐ°
GIT_STRATEGY: none
script:
# ĐŅĐĩĐ´ĐžŅŅавĐģŅĐĩĐŧ вОСĐŧĐžĐļĐŊĐžŅŅŅ Ņ
ŅĐ°ĐŊĐĩĐŊиŅ ĐŋĐ°ŅĐžĐģŅ в ĐŊĐĩСаŅиŅŅОваĐŊĐŊĐžĐŧ видĐĩ
- git config --global credential.helper store
# ĐĄĐžŅ
ŅĐ°ĐŊŅĐĩĐŧ вŅĐĩĐŧĐĩĐŊĐŊŅĐĩ ĐēŅĐĩĐ´Ņ ĐŋĐžĐģŅСОваŅĐĩĐģŅ gitlab-ci-token
# ĐĸĐžĐēĐĩĐŊ ŅайОŅĐ°ĐĩŅ Đ´ĐģŅ вŅĐĩŅ
ĐŋŅĐąĐģиŅĐŊŅŅ
ĐŋŅĐžĐĩĐēŅОв gitlab.com и Đ´ĐģŅ ĐŋŅĐžĐĩĐēŅОв ĐŗŅŅĐŋĐŋŅ
- echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com" >> ~/.git-credentials
# ĐĐžĐģĐŊĐžŅŅŅŅ ŅиŅŅиĐŧ ŅĐĩĐēŅŅŅŅ диŅĐĩĐēŅĐžŅиŅ
- rm -rf .* *
# ĐĐģĐžĐŊиŅŅĐĩĐŧ ĐŋŅĐžĐĩĐēŅ ĐēĐžŅĐžŅŅĐš, ĐąŅĐ´ĐĩĐŧ Đ´ĐĩĐŋĐģОиŅŅ в Sonatype Nexus
- git clone ${DEPLOY_CI_REPOSITORY_URL} .
# ĐĐĩŅĐĩĐēĐģŅŅĐ°ĐĩĐŧŅŅ ĐŊĐ° ĐŊŅĐļĐŊŅĐš ĐēĐžĐŧĐŧиŅ
- git checkout ${DEPLOY_CI_COMMIT_SHA} -f
# ĐŅĐģи Ņ
ĐžŅŅ ОдиĐŊ pom.xml ŅОдĐĩŅĐļиŅ ĐŋĐ°ŅĐ°ĐŧĐĩŅŅ autoReleaseAfterClose ваĐģиĐŧ ŅйОŅĐēŅ.
# Đ ĐŋŅĐžŅивĐŊĐžĐŧ ŅĐģŅŅĐ°Đĩ ĐĩŅŅŅ ŅиŅĐē СаĐģиŅŅ ŅŅŅŅĐĩ Đ°ŅŅĐĩŅĐ°ĐēŅŅ в maven central
- >
for pom in $(find . -name pom.xml); do
if [[ $(grep -q autoReleaseAfterClose "$pom" && echo $?) == 0 ]]; then
echo "File $pom contains prohibited setting: <autoReleaseAfterClose>";
exit 1;
fi;
done
# ĐŅĐģи ĐŋĐ°ŅĐ°ĐŧĐĩŅŅ DEPLOY_CI_COMMIT_TAG ĐŋŅŅŅОК, ŅĐž ĐŋŅиĐŊŅдиŅĐĩĐģŅĐŊĐž ŅŅавиĐŧ SNAPSHOT-вĐĩŅŅиŅ
- >
if [[ "${DEPLOY_CI_COMMIT_TAG}" != "" ]]; then
mvn versions:set -DnewVersion=${DEPLOY_CI_COMMIT_TAG}
else
VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
if [[ "${VERSION}" == *-SNAPSHOT ]]; then
mvn versions:set -DnewVersion=${VERSION}
else
mvn versions:set -DnewVersion=${VERSION}-SNAPSHOT
fi
fi
# ĐĐ°ĐŋŅŅĐēĐ°ĐĩĐŧ СадаŅŅ ĐŊĐ° ŅйОŅĐēŅ и Đ´ĐĩĐŋĐģОК Đ°ŅŅĐĩŅĐ°ĐēŅОв
- mvn clean deploy -DskipTests=true
āĻāĻžāĻāĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ
āĻāĻžāĻāĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¯ā§āĻā§āĻ˛āĻŋ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻĨāĻž, āĻāĻĒāĻ¨āĻžāĻā§ āĻ°āĻŋāĻ˛āĻŋāĻ āĻāĻŦāĻ āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ 2āĻāĻŋ āĻĒāĻĻāĻā§āĻˇā§āĻĒ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ā§ˇ
gitlab-ci.yml
stages:
- build
- test
- verify
- deploy
<...>
Release:
extends: .trigger_deploy
# ĐĐ°ĐŋŅŅĐēĐ°ŅŅ СадаŅŅ ŅĐžĐģŅĐēĐž Đŋo ŅĐĩĐŗŅ.
only:
- tags
Snapshot:
extends: .trigger_deploy
# ĐĐ°ĐŋŅŅĐēĐ°ĐĩĐŧ СадаŅŅ ĐŊĐ° ĐŋŅĐąĐģиĐēĐ°ŅиŅ SNAPSHOT вĐĩŅŅии вŅŅŅĐŊŅŅ
when: manual
# ĐĐĩ СаĐŋŅŅĐēĐ°ŅŅ СадаŅŅ, ĐĩŅĐģи ĐŋŅĐžŅŅавĐģĐĩĐŊ ŅĐĩĐŗ.
except:
- tags
.trigger_deploy:
stage: deploy
variables:
# ĐŅĐēĐģŅŅĐ°ĐĩĐŧ ĐēĐģĐžĐŊиŅОваĐŊиĐĩ ŅĐĩĐēŅŅĐĩĐŗĐž ĐŋŅĐžĐĩĐēŅĐ°
GIT_STRATEGY: none
# ĐĄŅŅĐģĐēĐ° ĐŊĐ° ŅŅиĐŗĐŗĐĩŅ deploy-СадаŅи
URL: "https://gitlab.com/api/v4/projects/<deploy project ID>/trigger/pipeline"
# ĐĐĩŅĐĩĐŧĐĩĐŊĐŊŅĐĩ deploy-СадаŅи
POST_DATA: "
token=${DEPLOY_TOKEN}&
ref=master&
variables[DEPLOY]=${DEPLOY}&
variables[DEPLOY_CI_REPOSITORY_URL]=${CI_REPOSITORY_URL}&
variables[DEPLOY_CI_PROJECT_NAME]=${CI_PROJECT_NAME}&
variables[DEPLOY_CI_COMMIT_SHA]=${CI_COMMIT_SHA}&
variables[DEPLOY_CI_COMMIT_TAG]=${CI_COMMIT_TAG}
"
script:
# ĐĐĩ иŅĐŋĐžĐģŅСŅŅ cURL, ŅĐ°Đē ĐēĐ°Đē Ņ ŅĐģĐ°ĐŗĐ°Đŧи --fail --show-error
# ĐžĐŊ ĐŊĐĩ вŅвОдиŅ ŅĐĩĐģĐž ĐžŅвĐĩŅĐ°, ĐĩŅĐģи HTTP ĐēОд 400 и йОĐģĐĩĐĩ
- wget --content-on-error -qO- ${URL} --post-data ${POST_DATA}
āĻāĻ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§, āĻāĻŽāĻŋ āĻāĻāĻā§ āĻāĻāĻŋāĻ¯āĻŧā§ āĻāĻŋāĻ¯āĻŧā§ āĻāĻžāĻāĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻāĻ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤
āĻāĻ°ā§ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖ
āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻāĻŋ
common.yml
stages:
- build
- test
- verify
- deploy
variables:
SONAR_ARGS: "
-Dsonar.gitlab.commit_sha=${CI_COMMIT_SHA}
-Dsonar.gitlab.ref_name=${CI_COMMIT_REF_NAME}
"
.build_java_project:
stage: build
tags:
- touchbit-shell
variables:
SKIP_TEST: "false"
script:
- mvn clean
- mvn package -DskipTests=${SKIP_TEST}
artifacts:
when: always
expire_in: 30 day
paths:
- "*/target/reports"
.build_sphinx_doc:
stage: build
tags:
- touchbit-shell
variables:
DOCKERFILE: .indirect/docs/Dockerfile
script:
- docker build --no-cache -t ${CI_PROJECT_NAME}/doc -f ${DOCKERFILE} .
.junit_module_test_run:
stage: test
tags:
- touchbit-shell
variables:
MODULE: ""
script:
- cd ${MODULE}
- mvn test
artifacts:
when: always
expire_in: 30 day
paths:
- "*/target/reports"
.junit_test_run:
stage: test
tags:
- touchbit-shell
script:
- mvn test
artifacts:
when: always
expire_in: 30 day
paths:
- "*/target/reports"
.sonar_review:
stage: verify
tags:
- touchbit-shell
dependencies: []
script:
- >
if [ "$CI_BUILD_REF_NAME" == "master" ]; then
mvn compile sonar:sonar -Dsonar.login=$SONAR_LOGIN $SONAR_ARGS
else
mvn compile sonar:sonar -Dsonar.login=$SONAR_LOGIN $SONAR_ARGS -Dsonar.analysis.mode=preview
fi
.trigger_deploy:
stage: deploy
tags:
- touchbit-shell
variables:
URL: "https://gitlab.com/api/v4/projects/10345765/trigger/pipeline"
POST_DATA: "
token=${DEPLOY_TOKEN}&
ref=master&
variables[DEPLOY]=${DEPLOY}&
variables[DEPLOY_CI_REPOSITORY_URL]=${CI_REPOSITORY_URL}&
variables[DEPLOY_CI_PROJECT_NAME]=${CI_PROJECT_NAME}&
variables[DEPLOY_CI_COMMIT_SHA]=${CI_COMMIT_SHA}&
variables[DEPLOY_CI_COMMIT_TAG]=${CI_COMMIT_TAG}
"
script:
- wget --content-on-error -qO- ${URL} --post-data ${POST_DATA}
.trigger_release_deploy:
extends: .trigger_deploy
only:
- tags
.trigger_snapshot_deploy:
extends: .trigger_deploy
when: manual
except:
- tags
āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻžāĻāĻž āĻĒā§āĻ°āĻā§āĻā§āĻā§, .gitlab-ci.yml āĻā§āĻŦ āĻāĻŽāĻĒā§āĻ¯āĻžāĻā§āĻ āĻĻā§āĻāĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻāĻžāĻ°ā§āĻŦā§āĻ¸ āĻ¨āĻ¯āĻŧ
gitlab-ci.yml
include: https://gitlab.com/TouchBIT/gitlab-ci/raw/master/common.yml
Shields4J:
extends: .build_java_project
Sphinx doc:
extends: .build_sphinx_doc
variables:
DOCKERFILE: .docs/Dockerfile
Sonar review:
extends: .sonar_review
dependencies:
- Shields4J
Release:
extends: .trigger_release_deploy
Snapshot:
extends: .trigger_snapshot_deploy
pom.xml āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨
āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻŽāĻšāĻžāĻ¨ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ. nexus-staging-maven-plugin
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻāĻžāĻ¨ āĻŦāĻž org.sonatype.oss:oss-parent āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°ā§āĻā§āĻā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻāĻŋāĻāĻžāĻŦāĻ āĻšāĻŋāĻ¸ā§āĻŦā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻ¨āĻž āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
maven-install-plugin
āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻŽāĻĄāĻŋāĻāĻ˛ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĨ¤
āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻŦ āĻĻāĻ°āĻāĻžāĻ°ā§, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻā§āĻāĻ¸āĻžāĻŽāĨ¤
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>install-project</id>
<!-- ĐŅĐģи Ņ ваŅ ĐŧĐŊĐžĐŗĐžĐŧОдŅĐģŅĐŊŅĐš ĐŋŅĐžĐĩĐēŅ Ņ Đ´ĐĩĐŋĐģĐžĐĩĐŧ ŅОдиŅĐĩĐģŅŅĐēĐžĐŗĐž ĐŋĐžĐŧиĐēĐ° -->
<phase>install</phase>
<!-- Đ¯Đ˛ĐŊĐž ŅĐēаСŅваĐĩĐŧ ŅĐ°ĐšĐģŅ Đ´ĐģŅ ĐģĐžĐēĐ°ĐģŅĐŊОК ŅŅŅĐ°ĐŊОвĐēи -->
<configuration>
<file>target/${project.artifactId}-${project.version}.jar</file>
```target/${project.artifactId}-${project.version}-sources.jar</sources>
<pomFile>dependency-reduced-pom.xml</pomFile>
<!-- ĐŅиĐŊŅдиŅĐĩĐģŅĐŊĐžĐĩ ОйĐŊОвĐģĐĩĐŊиĐĩ ĐŧĐĩŅĐ°Đ´Đ°ĐŊĐŊŅŅ
ĐŋŅĐžĐĩĐēŅĐ° -->
<updateReleaseInfo>true</updateReleaseInfo>
<!-- ĐĐžĐŊŅŅĐžĐģŅĐŊŅĐĩ ŅŅĐŧĐŧŅ Đ´ĐģŅ ĐŋŅОвĐĩŅĐēи ŅĐĩĐģĐžŅŅĐŊĐžŅŅи -->
<createChecksum>true</createChecksum>
</configuration>
</execution>
</executions>
</plugin>
maven-javadoc-āĻĒā§āĻ˛āĻžāĻāĻāĻ¨
āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻāĻžāĻĄā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻā§āĻā§āĨ¤
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<!-- ĐĐĩĐŊĐĩŅĐ°ŅиŅ javadoc Đ´ĐžĐģĐļĐŊĐ° ĐąŅŅŅ ĐŋĐžŅĐģĐĩ ŅаСŅ ĐŗĐĩĐŊĐĩŅĐ°Ņии ŅĐĩŅŅŅŅОв -->
<phase>prepare-package</phase>
<configuration>
<!-- ĐŅĐĩĐŊŅ ĐŋĐžĐŧĐžĐŗĐ°ĐĩŅ в ĐŋŅĐąĐģиŅĐŊŅŅ
ĐŋŅĐžĐĩĐēŅĐ°Ņ
-->
<failOnError>true</failOnError>
<failOnWarnings>true</failOnWarnings>
<!-- ĐŖйиŅĐ°ĐĩŅ ĐžŅийĐēŅ ĐŋОиŅĐēĐ° Đ´ĐžĐēŅĐŧĐĩĐŊŅĐ°Ņии в target диŅĐĩĐēŅĐžŅии -->
<detectOfflineLinks>false</detectOfflineLinks>
</configuration>
</execution>
</executions>
</plugin>
āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻŽāĻĄāĻŋāĻāĻ˛ āĻĨāĻžāĻā§ āĻ¯āĻžāĻ¤ā§ āĻāĻžāĻāĻž āĻĨāĻžāĻā§ āĻ¨āĻž (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻŽā§āĻĒāĻĻ)
āĻ
āĻĨāĻŦāĻž āĻāĻĒāĻ¨āĻŋ āĻ¨ā§āĻ¤āĻŋāĻāĻ¤āĻāĻžāĻŦā§ javadoc āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¨āĻž, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻ¤ā§ maven-jar-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>empty-javadoc-jar</id>
<phase>generate-resources</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>javadoc</classifier>
<classesDirectory>${basedir}/javadoc</classesDirectory>
</configuration>
</execution>
</executions>
</plugin>
maven-gpg-āĻĒā§āĻ˛āĻžāĻāĻāĻ¨
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<!-- ХйОŅĐēĐ° ĐąŅĐ´ĐĩŅ ĐŋĐ°Đ´Đ°ŅŅ, ĐĩŅĐģи ĐžŅŅŅŅŅŅвŅĐĩŅ GPG ĐēĐģŅŅ -->
<!-- ĐОдĐŋиŅŅваĐĩĐŧ Đ°ŅŅĐĩŅĐ°ĐēŅŅ ŅĐžĐģŅĐēĐž ĐŊĐ° ŅаСĐĩ deploy -->
<phase>deploy</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
āĻ¨ā§āĻā§āĻ¸āĻžāĻ¸-āĻ¸ā§āĻā§āĻāĻŋāĻ-āĻŽāĻžāĻā§āĻ¨-āĻĒā§āĻ˛āĻžāĻāĻāĻ¨
āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨:
<project>
<!-- ... -->
<build>
<plugins>
<!-- ... -->
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<serverId>sonatype</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<!-- ĐĐąĐŊОвĐģŅĐĩĐŧ ĐŧĐĩŅĐ°Đ´Đ°ĐŊĐŊŅĐĩ, ŅŅОйŅ ĐŋĐžĐŧĐĩŅиŅŅ Đ°ŅŅĐĩŅĐ°ĐēŅ ĐēĐ°Đē release -->
<!-- ĐĐĩ вĐģиŅĐĩŅ ĐŊĐ° snapshot вĐĩŅŅии -->
<updateReleaseInfo>true</updateReleaseInfo>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<!-- ĐŅĐēĐģŅŅĐ°ĐĩĐŧ ĐŋĐģĐ°ĐŗиĐŊ -->
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<distributionManagement>
<snapshotRepository>
<id>sonatype</id>
<name>Nexus Snapshot Repository</name>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>sonatype</id>
<name>Nexus Release Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ āĻŽāĻžāĻ˛ā§āĻāĻŋ-āĻŽāĻĄāĻŋāĻāĻ˛ āĻĒā§āĻ°āĻā§āĻā§āĻ āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŽāĻĄāĻŋāĻāĻ˛ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ āĻŽāĻĄāĻŋāĻāĻ˛ā§āĻ° pom.xml-āĻ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ nexus-staging-maven-plugin
āĻĒāĻ¤āĻžāĻāĻž āĻ¸āĻš skipNexusStagingDeployMojo
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<configuration>
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
</configuration>
</plugin>
</plugins>
</build>
āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻ/āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ
<repositories>
<repository>
<id>SonatypeNexus</id>
<url>https://oss.sonatype.org/content/groups/staging/</url>
<!-- ĐĐĩ ĐŊĐ°Đ´Đž ŅĐēаСŅваŅŅ ŅĐģĐ°Đŗи snapshot/release Đ´ĐģŅ ŅĐĩĐŋОСиŅĐžŅиŅ -->
</repository>
</repositories>
āĻāĻ°ā§ pluses
- āĻ¨ā§āĻā§āĻ¸āĻžāĻ¸ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ˛āĻā§āĻˇā§āĻ¯āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻā§āĻŦ āĻ¸āĻŽā§āĻĻā§āĻ§ āĻ¤āĻžāĻ˛āĻŋāĻāĻž (
mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin
). - āĻŽāĻžāĻā§āĻ¨ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻžāĻ˛ā§ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄāĻ¯ā§āĻā§āĻ¯āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻ°āĻŋāĻ˛āĻŋāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž
āĻĢāĻ˛
āĻāĻāĻāĻŋ āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¨ā§āĻā§āĻ¸āĻžāĻ¸ā§ āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ
āĻ¯āĻāĻ¨ āĻāĻ āĻāĻžāĻ¸ā§āĻāĻāĻŋ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻāĻ¨ āĻĄāĻŋāĻĒā§āĻ˛ā§āĻ¯āĻŧ āĻĒā§āĻ°āĻā§āĻā§āĻā§āĻ° āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻāĻžāĻ¸ā§āĻāĻāĻŋ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻšāĻ¯āĻŧ (
āĻā§āĻ°āĻĒ āĻāĻ°āĻž āĻ˛āĻ
Running with gitlab-runner 11.10.0 (3001a600)
on Deploy runner JSKWyxUw
Using Shell executor...
Running on ih1174328.vds.myihor.ru...
Skipping Git repository setup
Skipping Git checkout
Skipping Git submodules setup
$ rm -rf .* *
$ git config --global credential.helper store
$ echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com" >> ~/.git-credentials
$ git clone ${DEPLOY_CI_REPOSITORY_URL} .
Cloning into 'shields4j'...
$ git checkout ${DEPLOY_CI_COMMIT_SHA}
Note: checking out '850f86aa317194395c5387790da1350e437125a7'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 850f86a... skip deploy test-core
$ for pom in $(find . -name pom.xml); do # collapsed multi-line command
$ if [[ "${DEPLOY_CI_COMMIT_TAG}" != "" ]]; then # collapsed multi-line command
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 4 modules...
[INFO] Installing Nexus Staging features:
[INFO] ... total of 4 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] Shields4J [pom]
[INFO] test-core [jar]
[INFO] Shields4J client [jar]
[INFO] TestNG listener [jar]
[INFO]
[INFO] --------------< org.touchbit.shields4j:shields4j-parent >---------------
[INFO] Building Shields4J 1.0.0 [1/4]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.5:set (default-cli) @ shields4j-parent ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: /home/gitlab-deployer/JSKWyxUw/0/TouchBIT/deploy/shields4j
[INFO] Processing change of org.touchbit.shields4j:shields4j-parent:1.0.0 -> 1.0.0-SNAPSHOT
[INFO] Processing org.touchbit.shields4j:shields4j-parent
[INFO] Updating project org.touchbit.shields4j:shields4j-parent
[INFO] from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO]
[INFO] Processing org.touchbit.shields4j:client
[INFO] Updating parent org.touchbit.shields4j:shields4j-parent
[INFO] from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO] Updating dependency org.touchbit.shields4j:test-core
[INFO] from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO]
[INFO] Processing org.touchbit.shields4j:test-core
[INFO] Updating parent org.touchbit.shields4j:shields4j-parent
[INFO] from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO]
[INFO] Processing org.touchbit.shields4j:testng
[INFO] Updating parent org.touchbit.shields4j:shields4j-parent
[INFO] from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO] Updating dependency org.touchbit.shields4j:client
[INFO] from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO] Updating dependency org.touchbit.shields4j:test-core
[INFO] from version 1.0.0 to 1.0.0-SNAPSHOT
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Shields4J 1.0.0 .................................... SUCCESS [ 0.992 s]
[INFO] test-core .......................................... SKIPPED
[INFO] Shields4J client ................................... SKIPPED
[INFO] TestNG listener 1.0.0 .............................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.483 s
[INFO] Finished at: 2019-04-21T02:40:42+03:00
[INFO] ------------------------------------------------------------------------
$ mvn clean deploy -DskipTests=${SKIP_TESTS}
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 4 modules...
[INFO] Installing Nexus Staging features:
[INFO] ... total of 4 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] Shields4J [pom]
[INFO] test-core [jar]
[INFO] Shields4J client [jar]
[INFO] TestNG listener [jar]
[INFO]
[INFO] --------------< org.touchbit.shields4j:shields4j-parent >---------------
[INFO] Building Shields4J 1.0.0-SNAPSHOT [1/4]
[INFO] --------------------------------[ pom ]---------------------------------
...
DELETED
...
[INFO] * Bulk deploy of locally gathered snapshot artifacts finished.
[INFO] Remote deploy finished with success.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Shields4J 1.0.0-SNAPSHOT ........................... SUCCESS [ 2.375 s]
[INFO] test-core .......................................... SUCCESS [ 3.929 s]
[INFO] Shields4J client ................................... SUCCESS [ 3.815 s]
[INFO] TestNG listener 1.0.0-SNAPSHOT ..................... SUCCESS [ 36.134 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 47.629 s
[INFO] Finished at: 2019-04-21T02:41:32+03:00
[INFO] ------------------------------------------------------------------------
āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ¨ā§āĻā§āĻ¸āĻžāĻ¸ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ˛ā§āĻĄ āĻšāĻ¯āĻŧ
āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¸āĻžāĻāĻā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§āĻā§ āĻ¸āĻ°āĻžāĻ¨ā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĒā§āĻ°āĻāĻžāĻļāĻ¨āĻž
āĻ¯āĻāĻ¨ āĻā§āĻ¯āĻžāĻ āĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻĄāĻŋāĻĒā§āĻ˛ā§āĻ¯āĻŧ āĻĒā§āĻ°āĻā§āĻā§āĻā§āĻ° āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻāĻžāĻ¸ā§āĻāĻāĻŋ āĻ¨ā§āĻā§āĻ¸āĻžāĻ¸ā§ āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻšāĻ¯āĻŧ (
āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻžāĻ˛ā§ āĻ āĻāĻļ āĻšāĻ˛ āĻŦāĻ¨ā§āĻ§ āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¨ā§āĻā§āĻ¸āĻžāĻ¸ā§ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ°ā§āĨ¤
[INFO] Performing remote staging...
[INFO]
[INFO] * Remote staging into staging profile ID "9043b43f77dcc9"
[INFO] * Created staging repository with ID "orgtouchbit-1037".
[INFO] * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1037
[INFO] * Uploading locally staged artifacts to profile org.touchbit
[INFO] * Upload of locally staged artifacts finished.
[INFO] * Closing staging repository with ID "orgtouchbit-1037".
Waiting for operation to complete...
.........
[INFO] Remote staged 1 repositories, finished with success.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Shields4J 1.0.0 .................................... SUCCESS [ 9.603 s]
[INFO] test-core .......................................... SUCCESS [ 3.419 s]
[INFO] Shields4J client ................................... SUCCESS [ 9.793 s]
[INFO] TestNG listener 1.0.0 .............................. SUCCESS [01:23 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:47 min
[INFO] Finished at: 2019-04-21T04:05:46+03:00
[INFO] ------------------------------------------------------------------------
āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻāĻŋāĻā§ āĻā§āĻ˛ āĻšāĻ¯āĻŧā§ āĻ¯āĻžāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻžāĻāĻāĻŋ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻŦā§
[INFO] Performing remote staging...
[INFO]
[INFO] * Remote staging into staging profile ID "9043b43f77dcc9"
[INFO] * Created staging repository with ID "orgtouchbit-1038".
[INFO] * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1038
[INFO] * Uploading locally staged artifacts to profile org.touchbit
[INFO] * Upload of locally staged artifacts finished.
[INFO] * Closing staging repository with ID "orgtouchbit-1038".
Waiting for operation to complete...
.......
[ERROR] Rule failure while trying to close staging repository with ID "orgtouchbit-1039".
[ERROR]
[ERROR] Nexus Staging Rules Failure Report
[ERROR] ==================================
[ERROR]
[ERROR] Repository "orgtouchbit-1039" failures
[ERROR] Rule "signature-staging" failures
[ERROR] * No public key: Key with id: (1f42b618d1cbe1b5) was not able to be located on <a href=http://keys.gnupg.net:11371/>http://keys.gnupg.net:11371/</a>. Upload your public key and try the operation again.
...
[ERROR] Cleaning up local stage directory after a Rule failure during close of staging repositories: [orgtouchbit-1039]
[ERROR] * Deleting context 9043b43f77dcc9.properties
[ERROR] Cleaning up remote stage repositories after a Rule failure during close of staging repositories: [orgtouchbit-1039]
[ERROR] * Dropping failed staging repository with ID "orgtouchbit-1039" (Rule failure during close of staging repositories: [orgtouchbit-1039]).
[ERROR] Remote staging finished with a failure: Staging rules failure!
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Shields4J 1.0.0 .................................... SUCCESS [ 4.073 s]
[INFO] test-core .......................................... SUCCESS [ 2.788 s]
[INFO] Shields4J client ................................... SUCCESS [ 3.962 s]
[INFO] TestNG listener 1.0.0 .............................. FAILURE [01:07 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻŦāĻ˛ āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻ āĻĨāĻŦāĻž āĻāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻŽā§āĻā§ āĻĻāĻŋāĻ¨ āĻŦāĻž āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§āĻ¨.
āĻŽā§āĻā§āĻ¤āĻŋāĻ° āĻĒāĻ°, āĻāĻŋāĻā§ āĻ¸āĻŽāĻ¯āĻŧ āĻĒāĻ°ā§, āĻ¨āĻŋāĻĻāĻ°ā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻāĻŋāĻ¤āĻ°ā§ āĻĨāĻžāĻāĻŦā§
āĻ āĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸āĻā§āĻ
āĻāĻāĻŋ āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻāĻĻā§āĻāĻžāĻāĻ¨ āĻāĻŋāĻ˛ āĻ¯ā§ āĻŽā§āĻ¯āĻžāĻā§āĻ¨ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻā§ āĻāĻ°ā§āĨ¤
āĻāĻŽāĻžāĻā§ robots.txt āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻāĻŽāĻžāĻ° āĻĒā§āĻ°āĻžāĻ¨ā§ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĻā§ āĻ¸ā§āĻāĻŋāĻ¤ āĻāĻ°ā§āĻā§āĨ¤
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻāĻŽāĻ°āĻž āĻ¯āĻž āĻāĻā§
- āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻāĻžāĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻ¤ā§ āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ CI āĻāĻžāĻ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
- āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦāĻžāĻāĻ°ā§āĻ° āĻšāĻ¸ā§āĻ¤āĻā§āĻˇā§āĻĒ āĻĨā§āĻā§ āĻŦāĻŋāĻā§āĻāĻŋāĻ¨ā§āĻ¨ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŽāĻžāĻ˛āĻŋāĻ āĻāĻŦāĻ āĻ°āĻā§āĻˇāĻŖāĻžāĻŦā§āĻā§āĻˇāĻŖāĻāĻžāĻ°ā§ āĻā§āĻŽāĻŋāĻāĻž āĻ¸āĻš āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
- āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ "āĻšāĻ" āĻā§āĻ¯āĻžāĻļā§ āĻ¸āĻš āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ°āĻžāĻ¨āĻžāĻ°ā§ˇ
- āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻ¤ā§ āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻ/āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻžāĨ¤
- āĻŽā§āĻ¯āĻžāĻā§āĻ¨ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻžāĻ˛ā§ āĻĒā§āĻ°āĻāĻžāĻļāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĨ¤
- āĻŽāĻžāĻā§āĻ¨ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻžāĻ˛ā§ "āĻāĻžāĻāĻāĻž" āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĒā§āĻ°āĻāĻžāĻļāĻ¨āĻžāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻ¸ā§āĻ°āĻā§āĻˇāĻžāĨ¤
- "āĻā§āĻ˛āĻŋāĻā§" āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¤ā§āĻ°āĻŋ āĻāĻŦāĻ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§āĻ¨āĨ¤
- āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻ/āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĨ¤
- āĻāĻžāĻāĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ/āĻĒāĻ°ā§āĻā§āĻˇāĻž/āĻĒā§āĻ°āĻāĻžāĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨āĨ¤
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻ¤āĻ¤āĻāĻž āĻāĻāĻŋāĻ˛ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻ¨āĻ¯āĻŧ āĻ¯āĻ¤āĻāĻž āĻĒā§āĻ°āĻĨāĻŽ āĻ¨āĻāĻ°ā§ āĻŽāĻ¨ā§ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ¯āĻŧā§āĻāĻŦāĻžāĻ° āĻāĻžāĻ°ā§āĻ¨āĻāĻŋ āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ¤ā§ CI āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻ¯āĻĨā§āĻˇā§āĻ, āĻāĻŦāĻ āĻāĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻāĻāĻāĻ¨ āĻ āĻĒā§āĻļāĻžāĻĻāĻžāĻ° āĻĨā§āĻā§ āĻ āĻ¨ā§āĻ āĻĻā§āĻ°ā§āĨ¤ āĻ¤āĻžāĻāĻžāĻĄāĻŧāĻž, āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻā§āĻŦ āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻĒāĻĻāĻā§āĻˇā§āĻĒ āĻ¨āĻŋāĻ¤ā§ āĻāĻ¯āĻŧ āĻĒāĻžāĻŦā§āĻ¨ āĻ¨āĻžāĨ¤ āĻ°āĻžāĻ¸ā§āĻ¤āĻžāĻāĻŋ āĻšāĻžāĻāĻāĻžāĻ° āĻ˛ā§āĻā§āĻ° āĻ§āĻžāĻĒā§āĻ° āĻ¨ā§āĻā§ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ (āĻāĻŽāĻžāĻ° āĻŽāĻ¨ā§ āĻ¨ā§āĻ āĻā§ āĻāĻāĻž āĻŦāĻ˛ā§āĻāĻŋāĻ˛ :)
āĻāĻŽāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻā§āĻļāĻŋ āĻšāĻŦā§.
āĻĒāĻ°ā§āĻ° āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻĻā§āĻāĻžāĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§āĻāĻŋāĻ¤āĻžāĻŽā§āĻ˛āĻāĻāĻžāĻŦā§ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻā§āĻ¸ā§āĻ āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ GitLab CI āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ (āĻĄāĻāĻžāĻ°-āĻāĻŽā§āĻĒā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§) āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻļā§āĻ˛ āĻ°āĻžāĻ¨āĻžāĻ° āĻĨāĻžāĻā§āĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com