Πώς να εγκαταστήσετε το Jenkins στο CentOS 7
Το Jenkins είναι ένα δημοφιλές εργαλείο ανοιχτού κώδικα CI (Continuous Integration) που χρησιμοποιείται ευρέως για την ανάπτυξη, την ανάπτυξη και την αυτοματοποίηση έργων. Αυτό το άρθρο θα
Υπάρχουν πολλοί τρόποι αυτοματοποίησης της διαδικασίας ρύθμισης και διαμόρφωσης ενός κουτιού. Για οποιονδήποτε λόγο, εάν ολόκληρο το σύστημά μας σε αυτό το σημείο αποτελείται από ένα μόνο κουτί, η εγκατάσταση μιας πλήρους υποδομής SCM (Διαχείριση διαμόρφωσης παραμέτρων λογισμικού) είναι υπερβολική. Τα σενάρια Shell είναι μια επιλογή, αλλά θα μπορούσαμε επίσης να χρησιμοποιήσουμε μια απογυμνωμένη έκδοση του SCM που είναι διαθέσιμη σε μερικά από τα εργαλεία εκεί έξω. Το Chef είναι μια από τις δημοφιλείς επιλογές και το "chef-solo" είναι η αυτόνομη λειτουργία διαμόρφωσης του Chef, όπου δεν χρειαζόμαστε έναν επιπλέον κόμβο για να λειτουργήσει ως "chef-server". Το μόνο που χρειάζεται είναι μια διεύθυνση URL ή μια διαδρομή προς ένα πακέτο tarball που περιέχει βιβλία μαγειρικής σεφ. Σε σύγκριση με τα σενάρια κελύφους, αυτός ο τύπος προσέγγισης είναι πιο δηλωτικός και αποτελεσματικός εκ των υστέρων και είναι επίσης μια καλή εισαγωγή για να ξεκινήσετε με τις διαδικασίες SCM ή IaC (Υποδομή ως κώδικας).
Οι «συνταγές» μέσα σε ένα «βιβλίο μαγειρικής» σεφ έχουν ένα DSL με βάση το ρουμπίνι που περιγράφει ότι οι «πόροι» βρίσκονται σε μια συγκεκριμένη κατάσταση σε έναν κόμβο. Ας προχωρήσουμε σε μια περιήγηση για να εξοικειωθούμε με μερικές έννοιες του Chef που ισχύουν και για τον chef-solo. Στόχος μας είναι να δημιουργήσουμε έναν κόμβο Ubuntu που θα τρέχει μια εφαρμογή ιστού Python/Django χρησιμοποιώντας Gunicorn και NGINX.
Note: We do not necessarily require ChefDK to be installed on our "Chef workstation" (our machine), although with it, we can use 'chef generate' commands to start-off with a directory structure for creating cookbooks, recipes and more. In this article, we will assume ChefDK is installed on our workstation. Commands were run using the version 4.7.26-1 of ChefDK.
(Όλα από αυτό το σημείο και μετά, εκτός εάν ορίζεται διαφορετικά, θα εκτελούνται στο μηχάνημά μας, που αναφέρεται επίσης ως «Σταθμός εργασίας σεφ»)
Τα βιβλία μαγειρικής στον σεφ είναι μια επαναχρησιμοποιήσιμη μονάδα που περιέχει όλα όσα χρειάζονται για την υποστήριξη ενός σεναρίου διαμόρφωσης. Τα βιβλία μαγειρικής μπορούν να περιέχουν πολλές «συνταγές» και οι «συνταγές» αποτελούνται κυρίως από μοτίβα πόρων. default.rb
είναι η προεπιλεγμένη συνταγή που θα εκτελεστεί όταν το βιβλίο μαγειρικής αναφέρεται σε μια λίστα εκτέλεσης . Διαφορετικές συνταγές επιτρέπουν τον διαχωρισμό των ανησυχιών. Για αυτό το σεμινάριο, ωστόσο, θα προσθέσουμε όλες τις δηλώσεις πόρων σε ένα κύριο αρχείο συνταγής, το οποίο είναι το default.rb
.
Δημιουργήστε ένα φάκελο με το όνομα "my-chef-project" και δημιουργήστε ένα φάκελο μέσα σε αυτόν που ονομάζεται "cookbooks". Από ./my-chef-project/cookbooks/
, τρέξτε:
$ chef generate cookbook my-cookbook
Η δομή του καταλόγου μας θα μοιάζει τώρα με αυτό:
.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
Το πρώτο βήμα για τη ρύθμιση του κόμβου μας είναι να προσδιορίσουμε ποια πακέτα απαιτούνται από την εφαρμογή μας. Ο κόμβος μας έχει επιλεγεί ως Ubuntu, επομένως μπορούμε να βασιστούμε στον διαχειριστή πακέτων APT για τη συγκέντρωση των εξαρτήσεων. Η εγκατάσταση των πακέτων που παρέχονται από τη διανομή του λειτουργικού συστήματος είναι τότε ένα παιχνιδιάρικο:
apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'
Αυτά είναι λίγο πολύ αυτονόητα. Η πρώτη γραμμή θα ενημερώσει το αποθετήριο apt και οι ακόλουθες γραμμές θα εγκαταστήσουν αυτά τα πακέτα.
Note: The packages following 'nginx' are needed for compiling some of the python dependencies through pip. These may differ based on your python/django project dependencies specified in
requirements.txt
. You can use a trial and error method to determine these packages that you need to include in your cookbook. To do that, perform a manualsudo pip install -r requirements.txt
(Note: This installs packages system wide!) on a freshly instantiated ubuntu machine to see if it runs successfully. If not, the stderr should give you hints on what packages are missing.
Μόλις ολοκληρώσουμε την προσθήκη των απαιτούμενων πακέτων, πρέπει να δημιουργήσουμε έναν μη προνομιούχο χρήστη Linux που θα έχει τον πηγαίο κώδικα της εφαρμογής.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Σημειώστε ότι ο κωδικός πρόσβασης είναι μια σκιώδης μορφή κατακερματισμού που χρησιμοποιείται στο Linux. Μπορεί να προκύψει χρησιμοποιώντας OpenSSL:
$ openssl passwd -1 -salt alilbitof mypassword
Τώρα ας συμπεριλάβουμε τον πηγαίο κώδικα της εφαρμογής Django στο βιβλίο μαγειρικής μας. Τοποθετήστε τον πηγαίο κώδικα μέσα ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Δημιουργήστε τον ./my-chef-project/cookbooks/my-cookbook/files/default
κατάλογο εάν δεν υπάρχει.
Οι οδηγίες για την αντιγραφή αυτών των αρχείων σε μια απομακρυσμένη θέση στον κόμβο μας περιγράφονται χρησιμοποιώντας τον πόρο remote_directory :
remote_directory '/home/bob/myapp' do
source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
owner 'bob'
group 'users'
mode '0755'
action :create
end
Για να εγκαταστήσουμε τα πακέτα python στο requirements.txt
, μπορούμε να χρησιμοποιήσουμε τον πόρο execute για να εκτελέσουμε μια αυθαίρετη εντολή. Σε αυτήν την περίπτωση, πρέπει να εκτελέσουμε την εντολή εγκατάστασης pip πάνω από αυτό:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
Note: Bear in mind that this is going to execute as the root user and the python libraries will be installed system-wide. If our node is designated to exclusively run this one single python app, then it isn't much of a problem. Despite that, a better option to keep things clean and sane is to find and use a community cookbook that manages python installations or 'virtualenvs'. (or at the very least, write a series of execute blocks to replicate this). Using virtualenvs in python ensures that any python based system tools or other python projects will not be affected
Τώρα ήρθε η ώρα να προετοιμάσουμε τον Gunicorn WSGI HTTP Server με το NGINX ως αντίστροφο διακομιστή μεσολάβησης. Το Nginx χρησιμοποιείται επίσης για τη διαχείριση όλων των στατικών στοιχείων από το Django.
Για να ενεργοποιήσετε το Gunicorn ως υπηρεσία στο Ubuntu, μπορεί να χρησιμοποιηθεί το Systemd. Ο πόρος systemd_unit περιλαμβάνεται στο Chef από την έκδοση 12.11.
systemd_unit 'gunicorn.service' do
content({
Unit: {
Description: 'Django on Gunicorn',
After: 'network.target',
},
Service: {
ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
User: 'bob',
Group: 'www-data',
WorkingDirectory: '/home/bob/myapp'
Restart: 'always',
},
Install: {
WantedBy: 'multi-user.target',
}
})
action [:create, :enable, :start]
end
Τώρα πρέπει να συμπεριλάβουμε μια τυπική διαμόρφωση διακομιστή μεσολάβησης NGINX σε αυτόν τον διακομιστή Gunicorn όπως φαίνεται παρακάτω. Αυτό το απόσπασμα μπορεί να μεταβεί στο ./my-cookbook/templates/nginx.conf.erb
. Δημιουργήστε τον κατάλογο προτύπων εάν δεν υπάρχει.
Note: Chef's templates support embedded ruby files that can contain variables, ruby expressions and statements. Although this file has the 'erb' extension, we did not use any of the ruby statements or expressions. Also, for the sake of simplicity, we only have a non HTTPS nginx config here (gentle reminder; please do not do this in production!)
server {
listen 80;
server_name http://example.com/;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bob/myapp/myapp/static;
}
location / {
include proxy_params;
proxy_pass http://localhost:8080/;
}
}
Note: There is also an alternative and a better config, where, for instance the Gunicorn server is bound to a unix domain socket instead of a TCP loopback connection. It's worth exploring that for performance reasons.
Για να αντιγράψετε αυτήν τη διαμόρφωση σε φάκελο με δυνατότητα τοποθεσιών στον κόμβο, χρησιμοποιήστε τον πόρο προτύπου από τον Σεφ.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Η ενεργοποίηση των ρυθμίσεων στο nginx γίνεται συνήθως με τη δημιουργία ενός συμβολικού συνδέσμου που δείχνει sites-available
τη ρύθμιση παραμέτρων στο sites-enabled
φάκελο του nginx . Οι συμβολικοί σύνδεσμοι μπορούν να δηλωθούν σε βιβλία μαγειρικής σεφ με τον πόρο συνδέσμου όπως φαίνεται παρακάτω:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
και για να διαγράψετε τον προεπιλεγμένο συμβολικό σύνδεσμο διαμόρφωσης:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
Και τέλος, για να ενεργοποιήσετε την υπηρεσία nginx:
service 'nginx' do
action :enable
action :start
end
Οι λίστες εκτέλεσης στον σεφ είναι μια ταξινομημένη λίστα ρόλων ή συνταγών σε ένα βιβλίο μαγειρικής που θα εκτελεστούν με τη σειρά στον κόμβο. Έχουμε ένα βιβλίο μαγειρικής "my-cookbook" και την "προεπιλεγμένη" συνταγή μέσα σε αυτό που πρέπει να εκτελέσουμε στο πλαίσιο του Ubuntu, επομένως το runlist.json στον κατάλογο του έργου μας ( ./my-chef-project/runlist.json
) θα πρέπει να μοιάζει με αυτό:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Το βιβλίο μαγειρικής μας για μόνος σεφ είναι έτοιμο για σερβίρισμα. Ήρθε η ώρα να παρέχετε ένα μηχάνημα Ubuntu 18.04 και να εγκαταστήσετε το ChefDK σε αυτό:
$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'
Επιστρέφοντας στον σταθμό εργασίας Chef μας , το μόνο που χρειάζεται να κάνουμε είναι να βάλουμε το φάκελο των βιβλίων μαγειρικής μέσα σε ένα tarball, να μεταφέρουμε αυτό το tarball μαζί με το runlist.json
στον απομακρυσμένο κόμβο που παρέχουμε παραπάνω και να εκτελέσουμε την εντολή chef-solo:
(Η παρακάτω εντολή πρέπει να εκτελεστεί μέσα στον κόμβο ή στον «σεφ πελάτη» και όχι στον σταθμό εργασίας του Chef)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Ή εδώ είναι ένα one-liner (για εκτέλεση από το ./my-chef-project/
CWD στο σταθμό εργασίας Chef):
tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'
Αυτό είναι! Παρακολουθήστε την τυπική έξοδο να γεμίζει με τη δραστηριότητα του σεφ που προσπαθεί να συγκλίνει τον κόμβο σας σε αυτό που έχετε καθορίσει στα βιβλία μαγειρικής. Ο Chef-solo θα εγκαταστήσει όλα τα πετράδια που απαιτούνται για όλα τα βιβλία μαγειρικής. Εάν η εντολή chef-solo είναι επιτυχής, θα έχουμε μια λειτουργική εφαρμογή Django που θα τρέχει πίσω από το nginx στο πλαίσιο του Ubuntu. Μεταβείτε στον τομέα/IP για να το δοκιμάσετε.
Note: Remember that in django you may need to set this domain/ip in the
ALLOWED_HOSTS
list insettings.py
.
Κάθε φορά που κάνουμε μια αλλαγή στο περιεχόμενο του καταλόγου του έργου μας (συνταγές, πρότυπα ή τον πηγαίο κώδικα της εφαρμογής κ.λπ.), απλώς εκτελέστε το παραπάνω one-liner από τον κατάλογο του έργου.
Tip: If the cookbook is version controlled with git (as it should), one good recommendation is to set git hooks to run this one-liner.
Αν κοιτάξετε προσεκτικά την τελευταία εντολή σόλο σεφ, παρατηρήστε ότι --recipe-url
προορίζεται για λήψη μιας διεύθυνσης URL. Αυτό σημαίνει ότι μπορείτε να έχετε μια ροή εργασιών όπου ένας CI θα δημιουργήσει το tarball του σεφ-solo σας, θα το ανεβάσει κάπου και θα διαμορφώσει τον κόμβο σας ώστε να τραβάει από αυτό περιοδικά.
Tip: Use curl to pull the changed tarball periodically as a cronjob.
curl -z $file
will honorIf-Modified-Since
headers and will only download the tar ball if the remote file has been changed since the timestamp on the existing local$file
.
Το Jenkins είναι ένα δημοφιλές εργαλείο ανοιχτού κώδικα CI (Continuous Integration) που χρησιμοποιείται ευρέως για την ανάπτυξη, την ανάπτυξη και την αυτοματοποίηση έργων. Αυτό το άρθρο θα
Χρησιμοποιώντας ένα διαφορετικό σύστημα; Εισαγωγή Η συνεχής ενοποίηση είναι μια πρακτική ανάπτυξης λογισμικού DevOps που επιτρέπει στους προγραμματιστές να συγχωνεύουν συχνά
Χρησιμοποιώντας ένα διαφορετικό σύστημα; Το Ansible είναι ένα εργαλείο ανοιχτού κώδικα για την αυτοματοποίηση εργασιών. Διαχειρίζεται τη διαμόρφωση των διακομιστών σας Linux και Windows. Λειτουργεί
Χρησιμοποιώντας ένα διαφορετικό σύστημα; Το GoCD είναι ένα σύστημα συνεχούς παράδοσης και αυτοματισμού ανοιχτού κώδικα. Σας επιτρέπει να μοντελοποιείτε σύνθετες ροές εργασίας χρησιμοποιώντας το παράλληλό του an
Ενώ το SaltStack είναι ένα εξαιρετικό εργαλείο για την εκτέλεση λειτουργιών σε πολλούς διακομιστές ταυτόχρονα, υποστηρίζει επίσης προκαθορισμένες ρυθμίσεις παραμέτρων ανά κεντρικό υπολογιστή που είναι αποθηκευμένες σε
Χρησιμοποιώντας ένα διαφορετικό σύστημα; Το Ansible είναι ένα εργαλείο ανοιχτού κώδικα για την αυτοματοποίηση εργασιών. Διαχειρίζεται τη διαμόρφωση των διακομιστών σας Linux και Windows. Λειτουργεί
Εισαγωγή Το Drone είναι μια αυτοματοποιημένη, συνεχής πλατφόρμα δοκιμών και παράδοσης που λειτουργεί στη δική σας υποδομή. Το Drone υποστηρίζει οποιαδήποτε γλώσσα, υπηρεσία o
Τι είναι το Load Balancer Οι Load Balancer κάθονται μπροστά από την εφαρμογή σας και διανέμουν την εισερχόμενη κίνηση σε πολλές περιπτώσεις της εφαρμογής σας. Fo
Χρησιμοποιώντας ένα διαφορετικό σύστημα; Το Foreman είναι ένα δωρεάν και ανοιχτού κώδικα εργαλείο που σας βοηθά με τη διαμόρφωση και τη διαχείριση φυσικών και εικονικών διακομιστών. Forema
Το SaltStack, ή Salt, είναι μια δημοφιλής λύση διαχείρισης διαμόρφωσης ανοιχτού κώδικα που μπορεί να χρησιμοποιηθεί για την υλοποίηση απομακρυσμένης εκτέλεσης, διαχείρισης παραμέτρων, κωδικού
Εισαγωγή Το Strider CD είναι μια πλατφόρμα συνεχούς ανάπτυξης ανοιχτού κώδικα. Η εφαρμογή είναι γραμμένη στο Node.js και χρησιμοποιεί το MongoDB ως backend αποθήκευσης. Δρασκελιά
Εισαγωγή Το Chocolatey φέρνει τη διαχείριση πακέτων που διευκολύνει τη διαχείριση λογισμικού και εξαρτήσεων στο Linux, στα Windows. Μπορείτε εύκολα και γρήγορα
Τι είναι το Packer; Το Packer είναι ένα εργαλείο απεικόνισης διακομιστή που αναπτύχθηκε από τη HashiCorp. Απεικόνιση διακομιστή? ή εναλλακτικά, αμετάβλητη υποδομή. είναι μια δημοφιλής εναλλακτική
Χρησιμοποιώντας ένα διαφορετικό σύστημα; Εισαγωγή Η συνεχής ενοποίηση είναι μια πρακτική ανάπτυξης λογισμικού DevOps που επιτρέπει στους προγραμματιστές να συγχωνεύουν συχνά
Υπάρχουν πολλοί τρόποι αυτοματοποίησης της διαδικασίας ρύθμισης και διαμόρφωσης ενός κουτιού. Για οποιονδήποτε λόγο, εάν ολόκληρο το σύστημά μας σε αυτό το σημείο αποτελείται από ακριβώς
Χρησιμοποιώντας ένα διαφορετικό σύστημα; Το Foreman είναι ένα δωρεάν και ανοιχτού κώδικα εργαλείο που σας βοηθά με τη διαμόρφωση και τη διαχείριση φυσικών και εικονικών διακομιστών. Forema
Το SaltStack είναι ένα πρόγραμμα διαχείρισης ρυθμίσεων που βασίζεται σε python και είναι βελτιστοποιημένο για την αυτοματοποίηση αρχείων διαμόρφωσης, αναπτύξεις και οτιδήποτε άλλο
Η Τεχνητή Νοημοσύνη δεν είναι στο μέλλον, είναι εδώ ακριβώς στο παρόν Σε αυτό το blog Διαβάστε πώς οι εφαρμογές Τεχνητής Νοημοσύνης έχουν επηρεάσει διάφορους τομείς.
Είστε επίσης θύμα των επιθέσεων DDOS και έχετε μπερδευτεί σχετικά με τις μεθόδους πρόληψης; Διαβάστε αυτό το άρθρο για να λύσετε τις απορίες σας.
Μπορεί να έχετε ακούσει ότι οι χάκερ κερδίζουν πολλά χρήματα, αλλά έχετε αναρωτηθεί ποτέ πώς κερδίζουν τέτοια χρήματα; ας συζητήσουμε.
Θέλετε να δείτε επαναστατικές εφευρέσεις της Google και πώς αυτές οι εφευρέσεις άλλαξαν τη ζωή κάθε ανθρώπου σήμερα; Στη συνέχεια, διαβάστε στο blog για να δείτε τις εφευρέσεις της Google.
Η ιδέα των αυτοκινούμενων αυτοκινήτων να βγαίνουν στους δρόμους με τη βοήθεια της τεχνητής νοημοσύνης είναι ένα όνειρο που έχουμε εδώ και καιρό. Όμως, παρά τις πολλές υποσχέσεις, δεν φαίνονται πουθενά. Διαβάστε αυτό το blog για να μάθετε περισσότερα…
Καθώς η Επιστήμη εξελίσσεται με γρήγορους ρυθμούς, αναλαμβάνοντας πολλές από τις προσπάθειές μας, αυξάνονται και οι κίνδυνοι να υποβάλλουμε τον εαυτό μας σε μια ανεξήγητη Ιδιότητα. Διαβάστε τι σημαίνει η μοναδικότητα για εμάς.
Οι μέθοδοι αποθήκευσης των δεδομένων εξελίσσονται μπορεί να είναι από τη γέννηση των Δεδομένων. Αυτό το ιστολόγιο καλύπτει την εξέλιξη της αποθήκευσης δεδομένων με βάση ένα infographic.
Διαβάστε το ιστολόγιο για να μάθετε διαφορετικά επίπεδα στην Αρχιτεκτονική Μεγάλων Δεδομένων και τις λειτουργίες τους με τον απλούστερο τρόπο.
Σε αυτόν τον ψηφιακό κόσμο, οι έξυπνες οικιακές συσκευές έχουν γίνει κρίσιμο μέρος της ζωής. Ακολουθούν μερικά εκπληκτικά οφέλη των έξυπνων οικιακών συσκευών σχετικά με το πώς κάνουν τη ζωή μας να αξίζει και να απλοποιείται.
Πρόσφατα, η Apple κυκλοφόρησε το macOS Catalina 10.15.4 μια συμπληρωματική ενημέρωση για την επιδιόρθωση προβλημάτων, αλλά φαίνεται ότι η ενημέρωση προκαλεί περισσότερα προβλήματα που οδηγούν σε bricking των μηχανών mac. Διαβάστε αυτό το άρθρο για να μάθετε περισσότερα