GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So installieren Sie Jenkins auf dem neuesten Ubuntu in 5 Minuten

In diesem Artikel werden verschiedene Möglichkeiten zum Bereitstellen von Jenkins auf Ihrem Server behandelt. Verwenden Sie unseren aktuellen Leitfaden für die manuelle Installation oder den Start von Jenkins in Docker-Containern. Als Bonus zeigen wir Ihnen, wie Sie Jenkins mit CloudFormation bereitstellen. Stellen Sie Jenkins mithilfe unserer Anleitung in 5 Minuten auf Ihrem Server bereit.

Was ist Jenkins

Jenkins ist der beliebteste kostenlose Automatisierungsserver. Mit Jenkins können Sie nahezu alle Prozesse in Ihrem Unternehmen automatisieren. Aber der traditionelle Markt für Jenkins ist die Automatisierung der Softwareentwicklungsprozesse.

Vorteile von Jenkins:

  • In Java geschrieben, daher auf allen Plattformen lauffähig
  • Hat viele Plugins, die Ihnen helfen können, fast jedes Problem zu lösen, das Sie sich vorstellen können.
  • Hilft Entwicklern, Codeänderungen zu integrieren und immer einen stabilen Softwareaufbau zu produzieren

Jenkins manuell installieren

Der Installationsprozess ist einfach und unkompliziert. Es besteht aus mehreren einfachen Schritten:

  • Java-Installation.
  • Hinzufügen offizieller Jenkins-Repositories zu Ihrem Paketmanager.
  • Paketinstallation.
  • Firewall-Konfiguration.
  • Erste Jenkins-Konfiguration.

Machen wir sie nacheinander.

Java-Installation

Um Jenkins ausführen zu können, müssen Sie zuerst Java installieren.

Aktualisieren Sie zuerst den apt-Paketindex mit:

$ sudo apt update

Installieren Sie als Nächstes das standardmäßige Java OpenJDK-Paket mit diesem:

$ sudo apt install openjdk-8-jre

Überprüfen Sie die Installation mit diesem Befehl:

$ java -version

Hier die Ausgabe nach erfolgreicher Installation:

Wichtig :Sie sollten sehen, dass Java Version 1.8 hat.

Zum Zeitpunkt der Erstellung dieses Artikels verwendet Jenkins die Java 8-Version. Wenn Sie eine andere Version sehen, wechseln Sie zur richtigen:

$ sudo update-alternatives --config java

Jenkins-Repository hinzufügen

Standardmäßig ist Jenkins nicht in den Ubuntu-Repositories enthalten und Sie müssen es hinzufügen.

Zuerst müssen wir den Repository-Schlüssel importieren:

$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

Der nächste Schritt besteht darin, die Repository-Adresse an die Repository-Liste des Servers anzuhängen:

$ sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
    /etc/apt/sources.list.d/jenkins.list'

Sobald dies erledigt ist, müssen wir die Informationen über die Software aktualisieren, die wir aus dem neuen Repository verwenden können:

$ sudo apt-get update

Installation des Jenkins-Pakets

Da wir das Repository auf dem neuesten Stand haben, führen wir den folgenden Befehl aus:

$ sudo apt-get -y install jenkins

Wenn Sie diesen Befehl ausführen, werden Sie aufgefordert, den Download und die Installation zu bestätigen.

Standardmäßig startet Jenkins nach dem Installationsvorgang. Wenn nicht, verwenden Sie den folgenden Befehl, um dies manuell zu tun:

$ sudo systemctl start jenkins

Lassen Sie den Status des Jenkins-Dienstes überprüfen:

$ sudo systemctl status jenkins

Bei erfolgreicher Ausführung des obigen Befehls sollten Sie eine solche Ausgabe erhalten:

Firewall-Konfiguration

Standardmäßig wird Jenkins auf Port 8080 ausgeführt , also öffnen wir es, damit Jenkins kommunizieren kann.

Führen Sie den folgenden Befehl aus, wenn Sie die standardmäßige UFW-Firewall verwenden:

$ sudo ufw allow 8080

Verwenden Sie den folgenden Befehl, um zu überprüfen, ob der Datenverkehr jetzt zulässig ist:

$ sudo ufw status

Die Ausgabe des obigen Befehls sollte wie folgt aussehen:

Wenn ufw inaktiv ist und Sie es aktivieren möchten, sind hier die Befehle:

$ sudo systemctl enable ufw

$ sudo systemctl start ufw

$ sudo ufw enable

Jetzt können Sie unter http://localhost:8080 auf Jenkins zugreifen .

Das Initialpasswort ist hier verfügbar:

$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Jenkins im Docker-Container starten

Um Jenkins in einem Docker-Container zu starten, muss Docker installiert sein. Der vollständige Installationsvorgang wird in der offiziellen Docker-Dokumentation beschrieben, daher stellen wir hier die erforderlichen Befehle bereit:

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common


$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get update

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

Sobald Docker erfolgreich installiert ist, können Sie den Docker-Container ausführen.

Jenkins-Docker-Image ziehen

Ziehen Sie die Jenkins mit dem folgenden Befehl aus dem öffentlichen Repository:

$ sudo docker pull jenkins/jenkins

Führen Sie den folgenden Befehl aus, um den Jenkins-Docker-Container zu starten:

$ sudo docker run -p 8080:8080 -d --name=jenkins-master jenkins/jenkins

Wenn Sie die folgende Fehlermeldung erhalten:

docker: Error response from daemon: driver failed programming external connectivity on endpoint jenkins-master
(627574f0c75a8e4598abf0acfc2700caf53775a9dc34073fdbfb69cd408a9a36):
Error starting userland proxy: listen tcp 0.0.0.0:8080: bind: address already in use.
ERRO[0000] error waiting for container: context canceled

Das bedeutet, dass Sie versuchen, Jenkins im Docker-Container auf demselben Port zu starten, den das systemweite Jenkins verwendet.

Starten Sie es einfach auf Port 8082 :

$ sudo docker rm jenkins-master

$ sudo docker run -p 8082:8080 -d --name=jenkins-master jenkins/jenkins

Dieser Befehl führt zum Öffnen des Jenkins-Docker-Containers auf Port 8082 :

Erste Jenkins-Konfiguration

Um Jenkins zu konfigurieren, öffnen Sie einen Browser und navigieren Sie zu der tatsächlichen IP-Adresse oder dem Domänennamen, auf dem Sie Jenkins ausführen:http://ip_address_or_domain:8080 .

Jenkins-Passwort

Sie sehen die Seite mit dem Speicherort des anfänglichen Jenkins-Passworts:

Hier ist es:

$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Jenkins-Plugins

Auf dem nächsten Bildschirm müssen Sie Plugins für die Erstinstallation auswählen. Wenn Sie noch nicht wissen, welche Plugins Sie einrichten sollen, verwenden Sie die „Vorgeschlagene Plugins installieren“. " Möglichkeit.

Jenkins-Admin-Benutzer

Sobald die Installation abgeschlossen ist, werden Sie aufgefordert, den ersten Jenkins-Administratorbenutzer zu erstellen.

Nachdem Sie die Benutzerdaten erfolgreich eingegeben haben, werden Sie zur Seite mit der Instanzkonfiguration weitergeleitet, um die URL für die Jenkins-Instanz zu bestätigen.

Um auf das Haupt-Dashboard von Jenkins zuzugreifen, klicken Sie auf „Start using Jenkins“. " Taste. Diese Aktion bringt Sie zur Hauptschnittstelle von Jenkins:

Installieren Sie Jenkins mit CloudFormation

Im Artikel „CloudFormation Tutorial – How To Automate EC2 Instance In 5 Mins“ wurde beschrieben, wie Sie CloudFormation und Cloud-Init-Metadaten verwenden, um die Softwareinstallation in EC2-Instances zu automatisieren.

Hier stellen wir eine Vorlage bereit, die den Jenkins-Server hinter dem Nginx-Proxyserver bereitstellt.

Achtung :Die folgende CloudFormation-Vorlage erstellt einen Jenkins-Server in einem öffentlichen VPC-Subnetz, der uneingeschränkten Zugriff auf Ihr AWS-Konto hat. Wenn Sie den Jenkins-Zugriff einschränken möchten, ändern Sie bitte die JenkinsPolicy oder das Remote-Instance-Profil vom Jenkins-Server.

Hier ist die CloudFormation-Vorlage (GitHub-Quellen):

AWSTemplateFormatVersion: 2010-09-09
Description: >-
    This CloudFormation stack will deploy Jenkins on Ubuntu 20.04
    in us-east-1 region.    
Parameters:
    JenkinsInstanceType:
        Description: EC2 instance type for Jenkins EC2 instance
        Type: String
        Default: t2.small
        ConstraintDescription: must be a valid Jenkins EC2 instance type.
    KeyName:
        Description: >-
                        The EC2 Key Pair to allow SSH access to Jenkins EC2 instance
        Type: 'AWS::EC2::KeyPair::KeyName'
        ConstraintDescription: must be the name of an existing EC2 KeyPair.
    VpcId:
        Description: The VPC Id where the Jenkins EC2 instance will be launched.
        Type: 'AWS::EC2::VPC::Id'
        ConstraintDescription: must be the ID of an existing VPC.
    YourIPRange:
        Description: >-
            CIDR block of the network from where you will connect to the Jenkins
            server using HTTP, HTTPS and SSH            
        Type: String
        MinLength: '9'
        MaxLength: '18'
        AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})'
        Default: 0.0.0.0/0
        ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
    PublicSubnet1:
        Description: >-
                        The public subnet where the Jenkins Jenkins EC2 instance will be launched.
        Type: 'AWS::EC2::Subnet::Id'
        ConstraintDescription: Must be a valid Public VPC Subnet.
    JenkinsInstanceAMI:
        Description: Ubuntu 20.04 EC2 instance AMI
        Type: String
        Default: ami-0885b1f6bd170450c

Resources:
    JenkinsAddress:
        Type: AWS::EC2::EIP
        Properties:
            Domain: vpc
    JenkinsAddressAssociaation:
        Type: AWS::EC2::EIPAssociation
        Properties:
            AllocationId: !GetAtt JenkinsAddress.AllocationId
            NetworkInterfaceId: !Ref JenkinsInterface
    JenkinsInterface:
        Type: AWS::EC2::NetworkInterface
        Properties:
            SubnetId: !Ref PublicSubnet1
            Description: Interface for controlling traffic such as Web
            GroupSet: 
                - !Ref JenkinsSecurityGroup
            SourceDestCheck: true
            Tags:
                -
                    Key: Network
                    Value: Web
    JenkinsServer:
        Type: 'AWS::EC2::Instance'
        CreationPolicy:
           ResourceSignal:
               Timeout: PT15M
        Metadata:
            Comment: 'Install Jenkins, nginx and the Jenkins CodeDeploy plugin'
            'AWS::CloudFormation::Init':
                configSets:
                    install_all:
                        - install_base
                        - install_nginx
                        - install_jenkins_repo
                        - install_jenkins
                        - jenkins_post_install
                install_base:
                    packages:
                        apt:
                            git: []
                            python3-pip: []
                            awscli: []
                    files:
                        /etc/cfn/cfn-hup.conf:
                            content:
                                !Sub |
                                    [main]
                                    stack=${AWS::StackName}
                                    region=${AWS::Region}
                            mode: "000400"
                            owner: "root"
                            group: "root"
                        /etc/cfn/hooks.d/cfn-auto-reloader.conf:
                            content:
                                !Sub |
                                    [cfn-auto-reloader-hook]
                                    triggers=post.update
                                    path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init
                                    action=/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource JenkinsServer --configsets install_all --region ${AWS::Region}
                                    runas=root
                            mode: "000400"
                            owner: "root"
                            group: "root"
                        /lib/systemd/system/cfn-hup.service:
                            content:
                                !Sub |
                                    [Unit]
                                    Description=cfn-hup daemon

                                    [Service]
                                    Type=simple
                                    ExecStart=/opt/aws/bin/cfn-hup
                                    Restart=always

                                    [Install]
                                    WantedBy=multi-user.target
                            mode: "000400"
                            owner: "root"
                            group: "root"
                    commands:
                        01_enable_cfn_hup:
                            command: systemctl enable cfn-hup.service > /dev/null 2>&1
                        02_start_cfn_hup:
                            command: systemctl start cfn-hup.service > /dev/null 2>&1

                install_nginx:
                    packages:
                        apt:
                            nginx: []
                            certbot: []
                            python3-certbot-nginx: []
                    files:
                        /etc/nginx/nginx.conf:
                            content:
                                !Sub |
                                    user  www-data;
                                    worker_processes  1;

                                    error_log  /var/log/nginx/error.log;
                                    pid        /var/run/nginx.pid;

                                    events {
                                        worker_connections  1024;
                                    }

                                    http {
                                        include       /etc/nginx/mime.types;
                                        default_type  application/octet-stream;
                                        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                                            '$status $body_bytes_sent "$http_referer" '
                                                            '"$http_user_agent" "$http_x_forwarded_for"';

                                        access_log  /var/log/nginx/access.log  main;
                                        sendfile        on;
                                        keepalive_timeout  65;
                                        include /etc/nginx/conf.d/*.conf;
                                        index   index.html index.htm;

                                        server {
                                            listen       80;
                                            server_name  _;
                                            location / {
                                                proxy_pass              http://127.0.0.1:8080;
                                                proxy_set_header        Host $host;
                                                proxy_set_header        X-Real-IP $remote_addr;
                                                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                                                proxy_connect_timeout   150;
                                                proxy_send_timeout      100;
                                                proxy_read_timeout      100;
                                                proxy_buffers           4 32k;
                                                client_max_body_size    8m;
                                                client_body_buffer_size 128k;
                                            }
                                            location /password.txt {
                                                alias              /web/initalpass.html;
                                            }
                                        }
                                    }
                            mode: '000644'
                            owner: root
                            group: root

                    services:
                        sysvinit:
                            nginx:
                                enabled: 'true'
                                ensureRunning: 'true'
                                files:
                                    - /etc/nginx/nginx.conf

                install_jenkins_repo:
                    commands:
                        01_download_repo_file:
                            command: echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list
                        02_import_repo_file:
                            command: wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | apt-key add - > /dev/null 2>&1
                        03_update_pkg_mngr:
                            command: apt-get update -y > /dev/null 2>&1

                install_jenkins:
                    packages:
                        apt:
                            jenkins: []
                    services:
                        sysvinit:
                            jenkins:
                                enabled: 'true'
                                ensureRunning: 'true'

                jenkins_post_install:
                    commands:
                        01_web_folder:
                            command: mkdir -p /web
                        02_import_repo_file:
                            command: while [ ! -f /var/lib/jenkins/secrets/initialAdminPassword ]; do sleep 10; done
                        03_copy_jenkins_password:
                            command: cp -Rf /var/lib/jenkins/secrets/initialAdminPassword /web/initalpass.html && chown www-data:www-data /web/initalpass.html
        Properties:
            KeyName: !Ref KeyName
            ImageId: !Ref JenkinsInstanceAMI
            NetworkInterfaces:
                -
                    NetworkInterfaceId: !Ref JenkinsInterface
                    DeviceIndex: '0'
            InstanceType: !Ref JenkinsInstanceType
            IamInstanceProfile: !Ref JenkinsInstanceProfile
            UserData:
                Fn::Base64:
                    !Sub |
                        #!/bin/bash -xe

                        apt-get update -y
                        apt-get install -y python-setuptools openjdk-8-jre
                        mkdir -p /opt/aws/bin
                        wget https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz
                        python2 -m easy_install --script-dir /opt/aws/bin aws-cfn-bootstrap-latest.tar.gz

                        echo "Executing config-sets"

                        /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} \
                            --resource JenkinsServer \
                            --configsets install_all \
                            --region ${AWS::Region}

                        /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} \
                            --resource JenkinsServer \
                            --region ${AWS::Region}
            Tags:
                -
                    Key: Name
                    Value: Jenkins Server

    JenkinsSecurityGroup:
        Type: 'AWS::EC2::SecurityGroup'
        Properties:
            GroupDescription: Enable SSH and HTTP access from specific CIDR block
            VpcId: !Ref VpcId
            SecurityGroupIngress:
                    -
                        IpProtocol: tcp
                        FromPort: 22
                        ToPort: 22
                        CidrIp: !Ref YourIPRange
                    -
                        IpProtocol: tcp
                        FromPort: 80
                        ToPort: 80
                        CidrIp: !Ref YourIPRange
                    -
                        IpProtocol: tcp
                        FromPort: 443
                        ToPort: 443
                        CidrIp: !Ref YourIPRange
            SecurityGroupEgress:
                    -
                        IpProtocol: tcp
                        FromPort: 0
                        ToPort: 65535
                        CidrIp: 0.0.0.0/0

    JenkinsRole:
        Type: 'AWS::IAM::Role'
        Properties:
            Path: /
            AssumeRolePolicyDocument:
                Statement:
                    -
                        Effect: Allow
                        Principal:
                            Service:
                                - ec2.amazonaws.com
                        Action:
                            - 'sts:AssumeRole'

    JenkinsInstanceProfile:
        Type: 'AWS::IAM::InstanceProfile'
        Properties:
            Path: /
            Roles:
                - !Ref JenkinsRole

    JenkinsPolicy:
        Type: 'AWS::IAM::Policy'
        Properties:
            PolicyName: JenkinsPolicy
            PolicyDocument:
                Version: 2012-10-17
                Statement:
                    -
                        Effect: Allow
                        Action:
                            - '*'
                        Resource: '*'
            Roles:
                - !Ref JenkinsRole

Outputs:
    JenkinsServerDNSName:
        Description: DNS Name of Jenkins Server
        Value: !GetAtt
            - JenkinsServer
            - PublicDnsName

Diese CloudFormation-Vorlage dient zum Bereitstellen von Jenkins hinter dem Nginx-Proxy in Ihrer AWS-Infrastruktur.

Diese Vorlage hat die folgenden Funktionen:

  • Sie bewegen sich, um das anfängliche Jenkins-Passwort zu erhalten: curl http://ec2-host/password.txt .
  • Sie können LetsEncrypt verwenden, um SSL-Zertifikate zu erstellen: sudo certbot --nginx -d jenkins.example.com .

Zusammenfassung

In diesem Artikel haben wir verschiedene Möglichkeiten zur Bereitstellung von Jenkins auf Ihrem Server behandelt. Jetzt sind Sie bereit für die manuelle Installation von Jenkins, das Starten von Jenkins im Docker-Container oder das Bereitstellen von Jenkins mithilfe der CloudFormation-Vorlage.

Bitte teilen Sie uns im Kommentarbereich unten mit, wenn Sie Fragen haben. Außerdem empfehlen wir Ihnen, andere Linux-bezogene Artikel in unserem Blog zu lesen.

Wir hoffen, dass Sie diesen Artikel nützlich finden! Wenn ja, helfen Sie uns bitte, es in der Welt zu verbreiten!


Ubuntu
  1. So installieren Sie die neueste Kodi-Version auf Ubuntu

  2. So installieren Sie die neueste Version von Handbrake unter Ubuntu

  3. So installieren Sie den neuesten GIMP 2.9-Entwicklungs-Build auf Ubuntu

  4. So installieren Sie das neueste PipeWire über PPA in Ubuntu 20.04, 21.04

  5. So installieren Sie das neueste KeePassXC 2.7.0 in Ubuntu 22.04 über PPA

So installieren Sie das neueste WildFly unter Ubuntu 20.04

So installieren Sie das neueste MySQL 8 unter Ubuntu 20.04

Wie installiere ich die neueste Version von GCC unter Ubuntu 20.04?

So installieren Sie das neueste PHPMyAdmin auf Ubuntu 18.04

So installieren Sie Jenkins unter Ubuntu 14.04

So installieren Sie das neueste ImageMagick auf Ubuntu 22.04