рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЗрдирдХрд┐рдВрд╕ рддреИрдирд╛рдд рдХрд░реЗрдВ

рдзреНрдпрд╛рди рджреЗрдВ 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
Dockerfile

Docker рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░, рдХреБрдЫ рдкреИрдХреЗрдЬ рдЕрдпреНрдпреВрдм рдмрд┐рд▓реНрдбрд░ рдХреА рддрд░рд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рднреА рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ 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 рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдХреНрд╕рд░ "рдиреМрдХрд░реА" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗред "рдиреМрдХрд░реА", "рдХрд╛рд░реНрдп"), рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдпрд╛ рдЬреЗрдирдХрд┐рдВрд╕ рдореЗрдВ рд╕реАрдЖрдИ / рд╕реАрдбреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ "рдХрд╛рд░реНрдп" рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

All Articles