рдзреНрдпрд╛рди рджреЗрдВ perev ред: рдпрд╣ рдкреНрд░реАрдкреНрд▓реЗ рдХреЗ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдмреНрд▓реЙрдЧ рдХреЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ рдХрд┐ рдЖрдк рдЬреЗрдирдХрд┐рдВрд╕ рдЬреИрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реАрдЖрдИ / рд╕реАрдбреА рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдореЗрдВ, рд╣рдо "рд╕рдм рдХреБрдЫ рдХреЛрдб рдХреА рддрд░рд╣ рд╣реИ" рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рди рдХреЗрд╡рд▓ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ, рдЬреЗрдирдХрд┐рдВрд╕ рдХрд╛рдо рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЬреЗрдирдХрд┐рдВрд╕ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдФрд░ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рди рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдФрд░ рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдкреНрд▓рдЧ-рдЗрди, рдПрдХреНрд╕реЗрд╕, рдХрд╛рдо рдФрд░ рдХрдИ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИредрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ:- рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдЬреЗрдирдХреАрдВрд╕ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реЛ рдЧрдП рд╣реИрдВ?
- рдХреНрдпрд╛ рд╣рдо рдмрд╛рд░-рдмрд╛рд░ рд╕рд░реНрд╡рд░ рдФрд░ рдиреМрдХрд░реА рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
- рдХреНрдпрд╛ рдЬреЗрдирдХрд┐рдВрд╕ рдЕрдкрдбреЗрдЯ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рджрд░реНрдж рд╣реИ?
- рдХреНрдпрд╛ рд╣рдо рдЕрдкрдиреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
- рдХреНрдпрд╛ рд╣рдо рдлрдХрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЗрдирдХреАрдВрд╕ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрд╣рд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдкрд░рд┐рдЪрдп
рдЖрдорддреМрд░ рдкрд░, "DevOps рдЯреВрд▓реНрд╕" рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╕рдордп рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╣реИ CI / CD рд╕рд┐рд╕реНрдЯрдоред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬреЗрдирдХрд┐рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╣рд░ рджрд┐рди рд╕реИрдХрдбрд╝реЛрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджрд╕рд┐рдпреЛрдВ рд╣рдЬрд╝рд╛рд░реЛрдВ рдмрд┐рд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВред рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬреЛ рд╣рдо рдЬреЗрдирдХрд┐рдВрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдЕрдиреНрдп CI / CD рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ рдпрд╛ рдЬрд┐рдирдХреА рд╕реАрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред
рд╣рдо рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдЬреЙрдм рдФрд░ рдкреНрд▓рдЧ-рдЗрди рд╕рд╣рд┐рдд рдХреЛрдб рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЗрдирдХрд┐рдВрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЬреЗрдирдХрд┐рдВрд╕ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рдерд╛, рд╕рд╛рде рд╣реА рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛ редрдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рд╣реЛрдЧреАрдЬреЗрдирдХреАрдВрд╕ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛
рд╣рдо AWS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдФрд░ рдЕрдиреНрдп рд╣реИрд╢ рдЯреВрд▓реНрд╕ рдЬреИрд╕реЗ рдкреИрдХрд░ рдФрд░ рд╡реЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ редрдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдордиреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЬреЗрдирдХрд┐рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдкреАрд╡реАрд╕реА , рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ , рдЬреЛ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХреА рдЧрдИ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдирд╣реАрдВ рд╣реИредрдпрд╣рд╛рдВ, рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдИрд╕реА 2 рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕, рдПрд╕рдПрд╕рдПрд▓ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ, рдмреИрд▓реЗрдВрд╕рд░, рдХреНрд▓рд╛рдЙрдбрдлреНрд░рдВрдЯ рдЖрджрд┐ред OS рдЪрд┐рддреНрд░ ( AMI ) рдкреИрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдФрд░ рд╡реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реИред{
"variables": {
"aws_access_key": "{{vault `packer/aws_access_key_id` `key`}}",
"aws_secret_key": "{{vault `packer/aws_secret_access_key` `key`}}",
"aws_region": "{{vault `packer/aws_region` `key`}}",
"vault_token": "{{env `VAULT_TOKEN`}}"
},
"builders": [{
"access_key": "{{ user `aws_access_key` }}",
"secret_key": "{{ user `aws_secret_key` }}",
"region": "{{ user `aws_region` }}",
"type": "amazon-ebs",
"communicator": "ssh",
"ssh_username": "ubuntu",
"instance_type": "c5.xlarge",
"security_group_id": "sg-12345",
"iam_instance_profile": "packer-role-profile",
"ami_name": "packer-jenkins-master-{{timestamp}}",
"ami_description": "Jenkins master image",
"launch_block_device_mappings": [{
"device_name": "/dev/sda1",
"volume_size": 50,
"volume_type": "gp2",
"delete_on_termination": true
}],
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "ubuntu/images/*ubuntu-bionic-18.04-amd64-server-*",
"root-device-type": "ebs"
},
"owners": ["099720109477"],
"most_recent": true
}
}],
"provisioners": [{
"type": "shell",
"environment_vars": ["VAULT_TOKEN={{ user `vault_token` }}"],
"scripts": ["packer_bootstrap.sh"]
}]
}
рдкреИрдХрд░ рдореЗрдВ OS рдЫрд╡рд┐ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИредрдмрджрд▓реЗ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ packer_bootstrap.sh
рдореЗрдВ рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░, рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ рдФрд░ рд╡реЙрд▓реНрдЯреЗрдирд╡ рдпрд╛ рдбреЗрдЯрд╛рдбреЙрдЧ-рдПрдЬреЗрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЗрд╕ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рдо рдЯреЗрд░рд╛рдлреЙрд░реНрдо, рдХреНрд▓рд╛рдЙрдбрдлреЙрд░реНрдо, рдкреБрд▓реБрдореА рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Ansible рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЬреЗрдирдХреАрдВрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдВрддрд░рд┐рдХ рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЗрдирдХрд┐рдВрд╕ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬреАрдердм рд╣реБрдХ рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдмрд╛рд╣рд░реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо GitHub рдХреЗ рд╕рд╛рде рдЬреЗрдирдХрд┐рдВрд╕ рдПрдХреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рд╕рд░реНрд╡рд░ рд▓рд┐рдВрдХ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрдкреА тАЛтАЛрдкрддреЗ , URL рдпрд╛ рдЯреЛрдХрди, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдлреЗрдж рд╕реВрдЪреА ), рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдЕрдиреБрдордд URL рдФрд░ рдЯреЛрдХрди рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВредрдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╣реЗрд░рдлреЗрд░ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдХрдЯреНрдареЗ рдУрдПрд╕ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдПрдХ рддреИрдпрд╛рд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реИ, рдЬреЛ рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдЧреБрдкреНрдд рд╕реНрдЯреЛрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
рдЬреЗрдирдХрд┐рдиреНрд╕ рдФрд░ рдЙрд╕рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдЕрдЧрд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдо рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рдЬреЗрдирдХрд┐рдиреНрд╕ рдФрд░ рдЙрд╕рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╣рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдХреЛрдб рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рд╣реЛрдирд╛ рдерд╛редрдФрд░ рдпрд╣рд╛рдВ рдбреЙрдХрд░ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рддреИрдпрд╛рд░ рдкреВрд░реНрд╡ - рд╕реНрдерд╛рдкрд┐рдд рдбреЙрдХрд░ рдЫрд╡рд┐ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредFROM jenkins/jenkins:2.215
ENV CASC_JENKINS_CONFIG /jenkins_configs
USER root
RUN apt update && \
apt install -y python3 python3-pip && \
pip3 install awscli jenkins-job-builder jjb-reactive-choice-param --no-cache-dir
USER jenkins
VOLUME /jenkins_configs
VOLUME /var/jenkins_home
COPY plugins.txt /usr/share/jenkins/ref/
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt
DockerfileDocker рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░, рдХреБрдЫ рдкреИрдХреЗрдЬ рдЕрдпреНрдпреВрдм рдмрд┐рд▓реНрдбрд░ рдХреА рддрд░рд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рднреА рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ plugins.txt
редJenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
рдЖрдк рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ https://our-jenkins-url/script
рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдХрд░ рдЬреЗрдирдХрд┐рдиреНрд╕ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВplugins.txt
ред рдЕрдВрдд рдореЗрдВ, рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдЬреЛ рдбреЙрдХрд░ рдореЗрдВ рдЬреЗрдирдХрд┐рдиреНрд╕ рдХреЛ рдЪрд▓рд╛рдПрдЧрд╛редversion: "3"
services:
jenkins:
build: .
container_name: jenkins
restart: always
ports:
- "50000:50000"
- "8080:8080"
volumes:
- ./configs/:/jenkins_configs/:ro
- ./jenkins_home/:/var/jenkins_home/:rw
environment:
- VAULT_TOKEN
- GITHUB_TOKEN
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- JAVA_OPTS=-Xms4G -Xmx8G -Xloggc:/var/jenkins_home/gc-%t.log -XX:NumberOfGCLogFiles=5 -XX:+UseGCLogFileRotation -XX:GCLogFileSize=20m -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCCause -XX:+PrintTenuringDistribution -XX:+PrintReferenceGC -XX:+PrintAdaptiveSizePolicy -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -XX:+UseStringDeduplication -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1
volumes:
configs:
driver: local
jenkins_home:
driver: local
рд╣рдо рд╡реЙрд▓реНрдЯ рд╕реЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЙрд▓реНрдЯреЗрдирд╡ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВредрдХреБрдЫ рдЬрд╛рд╡рд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╣рдореЗрдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдФрд░ рд╕рдВрд╕рд╛рдзрди рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХреАред рдпрд╣ рд▓реЗрдЦ рдЬреЗрдирдХрд┐рдВрд╕ рдХреЛ рдЯреНрдпреВрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИредрдФрд░ рд╣рд╛рдВ, рдЕрдм рд╣рдо рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЬреЗрдирдХрд┐рдиреНрд╕ рдХреА рдПрдХ рдкреНрд░рддрд┐ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реИредрдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЗрдирдХрд┐рдВрд╕ рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдПрдХ рд╕рд╛рдл рд╕реНрдерд╛рдкрдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдареЗрд╕ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╝реЗрдВред
рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬреЗрдирдХрд┐рдиреНрд╕ рдХреЛ рдХреЛрдб (JCaSC) рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЛрдб ( JCasC ) рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЗрдирдХрд┐рдВрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╛рдордХ рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реИ , рдЬреЛ рдЖрдкрдХреЛ рдорд╛рдирд╡-рдкрдардиреАрдп рдкрд╛рда рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредрдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдПрдХреНрд╕реЗрд╕, рдкреНрд▓рдЧ рдЗрди рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдПрдЬреЗрдВрдЯ, рдЯреИрдм рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ YAML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ 5 рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:- рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ (рд╕рд┐рд╕реНрдЯрдо рд░рд╣рд╕реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди)
- рдЬреЗрдирдХрд┐рдВрд╕ (рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдХреНрд▓рд╛рдЙрдб рд╕реЗрдЯрд┐рдВрдЧ, рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ, рдПрдЬреЗрдВрдЯ рд╡рд┐рд╡рд░рдг, рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдЯреИрдм)
- рд╕реБрд░рдХреНрд╖рд╛ (рд╡реИрд╢реНрд╡рд┐рдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЬреИрд╕реЗ рдЕрдиреБрдордд рд╕реНрдХреНрд░рд┐рдкреНрдЯ)
- рдЙрдкрдХрд░рдг (рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдг рдЬреИрд╕реЗ рдЧрд┐рдЯ, рд▓реБрднрд╛рдирд╛ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕)
- рдЕрд╡рд░реНрдЧреАрдХреГрдд (рдЕрдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрд▓реИрдХ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг)

рдкреНрд▓рдЧрдЗрди рдореМрдЬреВрджрд╛ рдЬреЗрдирдХреАрдВрд╕ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИредрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд▓рдЧрдЗрди рд╡рд┐рднрд┐рдиреНрди рдЧреБрдкреНрдд рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ , рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо рд╕рд┐рд░реНрдл рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗредcredentials:
system:
domainCredentials:
- credentials:
- usernamePassword:
description: "AWS credentials"
id: "aws-creds"
password: ${AWS_SECRET_ACCESS_KEY}
scope: GLOBAL
username: ${AWS_ACCESS_KEY_ID}
- string:
description: "Vault token"
id: "vault-token"
scope: GLOBAL
secret: ${VAULT_TOKEN}
...
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рд╣рд╕реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрд╣рдо AWS рдореЗрдВ рдПрдЬреЗрдВрдЯреЛрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП Amazon EC2 рдкреНрд▓рдЧрдЗрди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рдФрд░ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣рдореЗрдВ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдВрдЪ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредjenkins:
authorizationStrategy:
projectMatrix:
permissions:
- "Overall/Administer:ivan.a@example.org"
- "Credentials/View:petr.d@example.org"
...
clouds:
- amazonEC2:
cloudName: "AWS"
privateKey: ${EC2_PRIVATE_KEY}
region: "${AWS_REGION}"
templates:
- ami: "ami-12345678"
amiType:
unixData:
sshPort: "22"
connectionStrategy: PRIVATE_IP
deleteRootOnTermination: true
description: "jenkins_agent"
idleTerminationMinutes: "20"
instanceCapStr: "100"
minimumNumberOfInstances: 0
mode: EXCLUSIVE
numExecutors: 1
remoteAdmin: "jenkins"
remoteFS: "/home/jenkins"
securityGroups: "sg-12345678"
subnetId: "subnet-12345678"
type: C52xlarge
...
рдПрдЬреЗрдВрдЯреЛрдВ рдФрд░ рдПрдХреНрд╕реЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд▓рдЧрдЗрди рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдЬреЗрдирдХрд┐рдВрд╕ рд╕реНрдерд╛рдиреАрдп рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдмрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╡реЗ рдЬреЗрдирдХреАрдВрд╕ рдХреА рдмрд┐рдХреНрд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХреЗрдВредрдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ, рдпрд╣ рдЫреЛрдЯреЗ, рдЕрд░реНрдерд╛рддреН - рдиреМрдХрд░реА рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓рд╛ рдмрдирд╛ рд╣реБрдЖ рд╣реИред
рд╣рдо рдлреНрд░реАрд╕реНрдЯрд╛рдЗрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреЙрдм рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдЬреЗрдирдХрд┐рдВрд╕ рдореЗрдВ рдлреНрд░реАрд╕реНрдЯрд╛рдЗрд▓ рдиреМрдХрд░рд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:- рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рдХреВрдж рдЧрдпрд╛ рдФрд░ рдЖрдЧреЗ рдмрдврд╝ рдЧрдпрд╛)
- рд╕реАрдзреЗ REST API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- рдЬреЙрдм рдбреАрдПрд╕рдПрд▓ рдпрд╛ рдЬреЗрдЬреЗрдмреА рдЖрд╡рд░рдг рдЬреИрд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЬреЗрдирдХрд┐рдВрд╕ рдЬреЙрдм рдмрд┐рд▓реНрдбрд░ (JJB) рдЖрдкрдХреЛ YAML рдпрд╛ JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рднреА рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕рд╢рд░реНрдд рдЧрд┐рдЯ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо JJB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ CI / CD рдЯреВрд▓ рдХреЗ рд▓рд┐рдП CI / CD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред.
тФЬтФАтФА config.ini
тФЬтФАтФА jobs
тФВ тФЬтФАтФА Job1.yaml
тФВ | ...
тФВ тФФтФАтФА Job2.yaml
тФФтФАтФА scripts
тФЬтФАтФА job1.sh
| ...
тФФтФАтФА job2.sh
рдпрд╣ рдХреИрд╕реЗ (рд╕рд░рд▓реАрдХреГрдд) рдПрдлрдПрд╕ рдкрд░ рдиреМрдХрд░реА рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рджрд┐рдЦрддрд╛ рд╣реИ- job:
name: Job1
project-type: freestyle
auth-token: mytoken
disabled: false
concurrent: false
node: jenkins_agent
triggers:
- timed: '0 3 * * *'
builders:
- shell:
!include-raw: ../scripts/job1.sh
рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╛рдо рджрд┐рдЦрддрд╛ рд╣реИ Job1.yaml
, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрджрдо рд╣реИредjob1.sh
JJBрдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рднреА рд╕рд░рд▓ рд▓рдЧрддреА рд╣реИред$ cat config.ini
[job_builder]
ignore_cache=True
exclude=jobs/Job2
[jenkins]
url=https://jenkins.example.org
user=some_user
password=some_password
$ jenkins-jobs --conf config.ini test -r jobs/
$ jenkins-jobs --conf config.ini update -r jobs/
рдирдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ By By Commandjenkins-jobs update
, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдирдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрдп рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрдВ рдмрд╕ рдПрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЬреЙрдм (рд╕реАрдб рдЬреЙрдм) рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЬреЛ рдЬреЗрдирдХреАрдВрд╕ рдореЗрдВ рдЬреЗрдЬреЗрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрджрд▓рд╛рд╡ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗредрдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЬреЗрдЬреЗрдмреА "рд╕рд┐рд▓реНрд╡рд░ рдмреБрд▓реЗрдЯ" рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдореИрдХреНрд░реЛ рд╕рдкреЛрд░реНрдЯ рд╕рд╣рд┐рдд рдХреЛрдб рдореЗрдВ рдиреМрдХрд░реА рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд▓рдЪреАрд▓рд╛ рдЙрдкрдХрд░рдг рд╣реИ редрд╕рд╛рд░рд╛рдВрд╢
рдЕрдм рдЬрдм рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪ рдЪреБрдХреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣реВрдБрдЧрд╛ рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреВрдЫреЗ рдЧрдП рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢реНрди рдХрд╛ рдЬрд╡рд╛рдм "рд╣рд╛рдВ" рджреЗ рд╕рдХрддреЗ рд╣реИрдВредрдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдХреБрдЫ рддрдХрдиреАрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдпрд╛ рдЬреЗрдирдХрд┐рдВрд╕ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рддрд▓реНрд▓реАрди рдирд╣реАрдВ рдХрд┐рдпрд╛ , рд╣рдо рд╕рд┐рд░реНрдл рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИредPS рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдХреНрд╕рд░ "рдиреМрдХрд░реА" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗред "рдиреМрдХрд░реА", "рдХрд╛рд░реНрдп"), рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдпрд╛ рдЬреЗрдирдХрд┐рдВрд╕ рдореЗрдВ рд╕реАрдЖрдИ / рд╕реАрдбреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ "рдХрд╛рд░реНрдп" рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред