Kako namestiti Jenkins na CentOS 7
Jenkins je priljubljeno odprtokodno orodje CI (Continuous Integration), ki se pogosto uporablja za razvoj projektov, uvajanje in avtomatizacijo. Ta članek bo
Obstaja veliko načinov za avtomatizacijo postopka nastavitve in konfiguracije škatle. Iz kakršnega koli razloga, če je naš celoten sistem na tej točki sestavljen samo iz ene škatle, je nastavitev celotne infrastrukture SCM (Upravljanje konfiguracije programske opreme) pretirana. Skripti lupine so ena od možnosti, vendar bi lahko uporabili tudi zmanjšano različico SCM, ki je na voljo v nekaterih orodjih. Chef je ena izmed priljubljenih možnosti in "chef-solo" je Chefov samostojni konfiguracijski način, kjer ne potrebujemo dodatnega vozlišča, da deluje kot "chef-server". Vse, kar potrebuje, je URL ali pot do paketa tarball, ki vsebuje kuharske knjige. V primerjavi z lupinskimi skripti je ta vrsta pristopa bolj deklarativno in učinkovitejša in je tudi dober uvod za začetek s procesi SCM ali IaC (infrastruktura kot koda).
"Recepti" v kuharski "kuharski knjigi" imajo DSL, ki temelji na rubinu, ki opisuje, da so "viri" v določenem stanju na vozlišču. Nadaljujmo s sprehodom, da se seznanimo z nekaj koncepti Chef, ki veljajo tudi za chef-solo. Naš cilj je vzpostaviti vozlišče Ubuntu, ki izvaja spletno aplikacijo Python/Django z uporabo Gunicorn in 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.
(Vse od te točke naprej, razen če ni določeno drugače, se izvaja na našem stroju, imenovanem tudi »Chef Workstation«)
Kuharske knjige v chefu so enote za večkratno uporabo, ki vsebujejo vse, kar je potrebno za podporo scenariju konfiguracije. Kuharske knjige lahko vsebujejo več "receptov", "recepti" pa so večinoma sestavljeni iz vzorcev virov. default.rb
je privzeti recept, ki se bo zagnal, ko bo kuharska knjiga navedena na seznamu izvajanja . Različni recepti omogočajo ločevanje skrbi. Za to vadnico pa bomo vse deklaracije virov dodali v eno glavno datoteko recepta, to je default.rb
.
Ustvarite mapo z imenom "my-chef-project" in v njej ustvarite mapo z imenom "cookbooks". Od ./my-chef-project/cookbooks/
, zaženite:
$ chef generate cookbook my-cookbook
Naša struktura imenika bo zdaj videti takole:
.
└── 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
Prvi korak pri nastavitvi našega vozlišča je ugotoviti, katere pakete zahteva naša aplikacija. Naše vozlišče je izbrano kot Ubuntu, zato se lahko zanesemo na upravitelja paketov APT, da zbere odvisnosti. Namestitev paketov, ki jih zagotavlja distribucija OS, je potem kos pogače:
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'
Te so precej samoumevne. Prva vrstica bo posodobila repozitorij apt, naslednje vrstice pa bodo namestile te pakete.
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.
Ko končamo z dodajanjem zahtevanih paketov, moramo ustvariti neprivilegiranega uporabnika Linuxa, ki bo lastnik izvorne kode aplikacije.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Upoštevajte, da je geslo senčni format hash, ki se uporablja v Linuxu. Izvede se lahko z uporabo OpenSSL:
$ openssl passwd -1 -salt alilbitof mypassword
Zdaj pa v našo kuharsko knjigo vključimo izvorno kodo aplikacije Django. Postavite izvorno kodo v ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Ustvari ./my-chef-project/cookbooks/my-cookbook/files/default
imenik, če ne obstaja.
Navodila za kopiranje teh datotek na oddaljeno lokacijo v našem vozlišču so opisana z uporabo vira 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
Za namestitev paketov python v requirements.txt
, lahko uporabimo execute vir za zagon poljubnega ukaza. V tem primeru moramo nad njim izvesti ukaz pip install:
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
Zdaj je čas, da pripravite strežnik Gunicorn WSGI HTTP z NGINX kot našim povratnim proxyjem. Nginx se uporablja tudi za obdelavo vseh statičnih sredstev iz Djanga.
Za priključitev Gunicorn kot storitve na Ubuntu lahko uporabite Systemd. Vir systemd_unit je vključen v Chef od različice 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
Zdaj moramo v ta strežnik Gunicorn vključiti standardno konfiguracijo proxyja NGINX, kot je prikazano spodaj. Ta delček lahko gre v ./my-cookbook/templates/nginx.conf.erb
. Ustvarite imenik predlog, če ne obstaja.
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.
Če želite kopirati to konfiguracijo v mapo z omogočenimi spletnimi mesti na vozlišču, uporabite vir predloge iz Chefa.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Aktiviranje konfiguracij v nginxu se običajno izvede z ustvarjanjem simbolne povezave, ki kaže na konfiguracijo na sites-available
v sites-enabled
mapi nginx . Simbolne povezave je mogoče deklarirati v kuharskih kuharskih knjigah z virom povezave, kot je prikazano spodaj:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
in za brisanje privzete simbolne povezave konfiguracije:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
In končno, da zaženete storitev nginx:
service 'nginx' do
action :enable
action :start
end
Run-listi v chef so urejen seznam vlog ali receptov v kuharski knjigi, ki se bodo izvajali v zaporedju na vozlišču. Imamo eno kuharsko knjigo "my-cookbook" in "privzeti" recept v njej, ki ju moramo izvesti v polju Ubuntu, zato bi moral runlist.json v našem imeniku projekta ( ./my-chef-project/runlist.json
) izgledati takole:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Naša kuharska knjiga za Chef solo je pripravljena za postrežbo. Čas je, da zagotovite stroj Ubuntu 18.04 in nanj namestite 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'
Če se vrnemo na našo delovno postajo Chef , vse, kar moramo storiti, je, da mapo kuharskih knjig vstavimo v tarball, prenesemo ta arhiv skupaj z runlist.json
na oddaljeno vozlišče, ki smo ga določili zgoraj, in zaženemo ukaz chef-solo:
(Spodnji ukaz je treba zagnati znotraj vozlišča ali 'chef client' in ne Chef Workstation)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Ali pa tukaj je ena vrstica (ki se izvaja iz ./my-chef-project/
CWD na Chef Workstation):
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'
To je to! Oglejte si, kako se standardni izhod polni z dejavnostjo Chef, ki poskuša zbližati vaše vozlišče s tem, kar ste navedli v kuharskih knjigah. Chef-solo bo namestil vse dragulje, potrebne za vse kuharske knjige. Če je ukaz chef-solo uspešen, bomo imeli delujočo aplikacijo Django, ki se izvaja za nginxom v polju Ubuntu. Pomaknite se do domene/IP, da jo preizkusite.
Note: Remember that in django you may need to set this domain/ip in the
ALLOWED_HOSTS
list insettings.py
.
Kadar koli spremenimo vsebino našega projektnega imenika (recepti, predloge ali izvorna koda aplikacije itd.), preprosto zaženite zgornjo eno vrstico iz imenika projekta.
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.
Če natančno pogledate zadnji ukaz chef-solo, opazite, da --recipe-url
naj bi prevzel URL. To pomeni, da lahko imate delovni tok, v katerem bo CI zgradil vašo arhivsko datoteko chef-solo, jo naložil nekam in konfiguriral vaše vozlišče, da se iz njega občasno povleče.
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 je priljubljeno odprtokodno orodje CI (Continuous Integration), ki se pogosto uporablja za razvoj projektov, uvajanje in avtomatizacijo. Ta članek bo
Uporaba drugega sistema? Uvod Neprekinjena integracija je praksa razvoja programske opreme DevOps, ki razvijalcem omogoča pogosto združevanje
Uporaba drugega sistema? Ansible je odprtokodno orodje za avtomatizacijo opravil. Upravlja konfiguracijo vaših strežnikov Linux in Windows. Deluje
Uporaba drugega sistema? GoCD je odprtokodni sistem za neprekinjeno dostavo in avtomatizacijo. Omogoča vam modeliranje zapletenih delovnih tokov z uporabo njegovega vzporednega an
Čeprav je SaltStack odlično orodje za hkratno izvajanje operacij na več strežnikih, podpira tudi prednastavitve konfiguracije, določene za posamezne gostitelje, shranjene v
Uporaba drugega sistema? Ansible je odprtokodno orodje za avtomatizacijo opravil. Upravlja konfiguracijo vaših strežnikov Linux in Windows. Deluje
Uvod Drone je avtomatizirana platforma za stalno testiranje in dostavo, ki deluje na vaši lastni infrastrukturi. Drone podpira kateri koli jezik, storitev o
Kaj je balansirnik obremenitve Uravnavalniki obremenitve sedijo pred vašo aplikacijo in razporejajo dohodni promet po več primerkih vaše aplikacije. Fo
Uporaba drugega sistema? Foreman je brezplačno in odprtokodno orodje, ki vam pomaga pri konfiguraciji in upravljanju fizičnih in virtualnih strežnikov. Forema
SaltStack ali Salt je priljubljena odprtokodna rešitev za upravljanje konfiguracije, ki se lahko uporablja za izvajanje oddaljenega izvajanja, upravljanja konfiguracije, cod
Uvod Strider CD je odprtokodna platforma za neprekinjeno uvajanje. Aplikacija je napisana v Node.js in uporablja MongoDB kot ozadje za shranjevanje. Korak
Uvod Chocolatey prinaša upravljanje paketov, ki olajša upravljanje programske opreme in odvisnosti v sistemu Windows. Lahko hitro in enostavno
Kaj je Packer? Packer je orodje za slikanje strežnikov, ki ga je razvil HashiCorp. Strežniško slikanje; ali pa nespremenljiva infrastruktura; je priljubljena alternativa
Uporaba drugega sistema? Uvod Neprekinjena integracija je praksa razvoja programske opreme DevOps, ki razvijalcem omogoča pogosto združevanje
Obstaja veliko načinov za avtomatizacijo postopka nastavitve in konfiguracije škatle. Iz kakršnega koli razloga, če je naš celoten sistem na tej točki sestavljen iz samo
Uporaba drugega sistema? Foreman je brezplačno in odprtokodno orodje, ki vam pomaga pri konfiguraciji in upravljanju fizičnih in virtualnih strežnikov. Forema
SaltStack je program za upravljanje konfiguracije, ki temelji na pythonu, ki je optimiziran za avtomatizacijo konfiguracijskih datotek, razmestitev in vsega drugega.
Umetna inteligenca ni v prihodnosti, tukaj je prav v sedanjosti. V tem blogu preberite, kako so aplikacije umetne inteligence vplivale na različne sektorje.
Ste tudi vi žrtev DDOS napadov in ste zmedeni glede načinov preprečevanja? Preberite ta članek, če želite rešiti svoja vprašanja.
Morda ste že slišali, da hekerji zaslužijo veliko denarja, a ste se kdaj vprašali, kako zaslužijo takšen denar? razpravljajmo.
Ali želite videti revolucionarne izume Googla in kako so ti izumi danes spremenili življenje vsakega človeka? Nato preberite v blogu in si oglejte Googlove izume.
Koncept samovozečih avtomobilov, ki zapeljejo na ceste s pomočjo umetne inteligence, so sanje, ki jih imamo že nekaj časa. A kljub številnim obljubam jih ni nikjer. Preberite ta blog, če želite izvedeti več…
Ker se znanost hitro razvija in prevzame veliko naših prizadevanj, se povečuje tudi tveganje, da se podvržemo nerazložljivi singularnosti. Preberite, kaj bi za nas lahko pomenila singularnost.
Metode shranjevanja podatkov so se lahko razvijale od rojstva podatkov. Ta blog pokriva razvoj shranjevanja podatkov na podlagi infografike.
Preberite blog, če želite na najpreprostejši način spoznati različne plasti v arhitekturi velikih podatkov in njihove funkcionalnosti.
V tem digitalno vodenem svetu so pametne naprave za dom postale ključni del življenja. Tukaj je nekaj neverjetnih prednosti pametnih naprav za dom o tem, kako naredijo naše življenje vredno življenja in poenostavijo.
Pred kratkim je Apple izdal macOS Catalina 10.15.4 dopolnilno posodobitev za odpravo težav, vendar se zdi, da posodobitev povzroča več težav, ki vodijo do opečenja računalnikov Mac. Preberite ta članek, če želite izvedeti več