Jenkinsin asentaminen CentOS 7:ään
Jenkins on suosittu avoimen lähdekoodin CI (Continuous Integration) -työkalu, jota käytetään laajasti projektien kehittämiseen, käyttöönottoon ja automatisointiin. Tämä artikkeli tulee
On monia tapoja automatisoida laatikon asennus- ja konfigurointiprosessi. Jostain syystä koko järjestelmämme koostuu tässä vaiheessa vain yhdestä laatikosta, täyden SCM (Software Configuration Management) -infrastruktuurin perustaminen on ylivoimaista. Shell-skriptit ovat yksi vaihtoehto, mutta voisimme myös käyttää SCM:n kevennettyä versiota, joka on saatavilla muutamissa työkaluissa. Chef on yksi suosituimmista vaihtoehdoista ja "chef-solo" on Chefin erillinen konfigurointitila, jossa emme vaadi ylimääräistä solmua toimiakseen "kokkipalvelimena". Se tarvitsee vain URL-osoitteen tai polun tarball-pakettiin, joka sisältää kokin keittokirjoja. Verrattuna shell-skripteihin tämäntyyppinen lähestymistapa on selkeämpi ja tehokkaampi heti, ja se on myös hyvä johdatus SCM- tai IaC-prosessien (Infrastructure as Code) aloittamiseen.
Kokin "keittokirjan" sisällä olevissa "resepteissä" on rubiinipohjainen DSL, joka kuvaa "resurssien" olevan tietyssä tilassa solmussa. Jatketaan läpikulkua tutustuaksesi muutamaan Chef-konseptiin, jotka soveltuvat myös kokki-sooloon. Tavoitteenamme on perustaa Ubuntu-solmu, joka käyttää Python/Django-verkkosovellusta Gunicornilla ja NGINX:llä.
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.
(Kaikki tästä eteenpäin, ellei toisin mainita, suoritetaan koneellamme, jota kutsutaan myös "Chef Workstationiksi")
Keittiömestarin keittokirjat ovat uudelleenkäytettäviä yksiköitä, jotka sisältävät kaiken tarvittavan konfigurointiskenaarion tukemiseen. Keittokirjat voivat sisältää useita "reseptejä", ja "reseptit" koostuvat enimmäkseen resurssikuvioista. default.rb
on oletuksena resepti, joka ajetaan kun keittokirja viitataan jossakin run-listan . Erilaiset reseptit mahdollistavat huolenaiheiden erottamisen. Tässä opetusohjelmassa lisäämme kuitenkin kaikki resurssiilmoitukset yhteen pääreseptitiedostoon, joka on default.rb
.
Luo kansio nimeltä "my-chef-projekti" ja luo sen sisään kansio nimeltä "keittokirjat". Alkaen ./my-chef-project/cookbooks/
, suorita:
$ chef generate cookbook my-cookbook
Hakemistorakenne näyttää nyt tältä:
.
└── 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
Ensimmäinen askel solmumme määrittämisessä on tunnistaa, mitä paketteja sovelluksemme tarvitsee. Solmumme on valittu Ubuntuksi, joten voimme luottaa APT-paketinhallintaan riippuvuuksien keräämisessä. Käyttöjärjestelmäjakelun tarjoamien pakettien asentaminen on sitten pala kakkua:
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'
Nämä ovat melko itsestäänselviä. Ensimmäinen rivi päivittää apt-arkiston ja seuraavat rivit asentavat kyseiset paketit.
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.
Kun olemme lisänneet tarvittavat paketit, meidän on luotava ei-etuoikeutettu Linux-käyttäjä, joka omistaa sovelluksen lähdekoodin.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Huomaa, että salasana on varjohajautusmuoto, jota käytetään Linuxissa. Se voidaan johtaa OpenSSL:n avulla:
$ openssl passwd -1 -salt alilbitof mypassword
Sisällytetään nyt Django-sovelluksen lähdekoodi keittokirjaamme. Aseta lähdekoodi sisään ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Luo ./my-chef-project/cookbooks/my-cookbook/files/default
hakemisto, jos sitä ei ole olemassa.
Ohjeet näiden tiedostojen kopioimiseksi solmumme etäsijaintiin kuvataan remote_directory- resurssilla:
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-pakettien asentamiseksi requirements.txt
sovellukseen voimme käyttää execute- resurssia mielivaltaisen komennon suorittamiseen. Tässä tapauksessa meidän on suoritettava pip install -komento sen päälle:
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
Nyt on aika valmistella Gunicorn WSGI HTTP Server NGINX käänteisenä välityspalvelimenamme. Nginxiä käytetään myös käsittelemään kaikkia Djangon staattisia resursseja.
Gunicornin kiinnittämiseen palveluksi Ubuntuun voidaan käyttää Systemdia. Systemd_unit resurssi sisältyy Chef sitten version 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
Nyt meidän on sisällytettävä standardi NGINX-välityspalvelinkokoonpano tähän Gunicorn-palvelimeen alla olevan kuvan mukaisesti. Tämä katkelma voi mennä ./my-cookbook/templates/nginx.conf.erb
. Luo mallihakemisto, jos sitä ei ole olemassa.
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.
Kopioida tänä config sivustoille-käytössä kansio solmu, käytä mallin resurssi Chef.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Määritykset aktivoidaan nginxissä yleensä luomalla symbolilinkki, joka osoittaa konfiguraatioon osoitteessa sites-available
nginxin sites-enabled
kansiossa. Symlinkit voidaan ilmoittaa kokkien keittokirjoissa alla olevan linkin avulla:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
ja poistaaksesi oletusasetusten symbolin:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
Ja lopuksi nginx-palvelun käynnistämiseksi:
service 'nginx' do
action :enable
action :start
end
Kokin suorituslistat ovat järjestetty luettelo keittokirjan rooleista tai resepteistä, jotka suoritetaan järjestyksessä solmussa. Meillä on yksi keittokirja "my-cookbook" ja sen sisällä "oletus" resepti, joka meidän on suoritettava Ubuntu-laatikossa, joten projektihakemistossamme ( ./my-chef-project/runlist.json
) olevan runlist.json-tiedoston pitäisi näyttää tältä:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Keittokirjamme Chef-soololle on valmis tarjottavaksi. On aika hankkia Ubuntu 18.04 -kone ja asentaa siihen 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'
Menee takaisin meidän Chef työasema , meidän tarvitsee tehdä, on laittaa keittokirjoja kansion sisällä tarrapallon, siirto, joka tarrapallon yhdessä runlist.json
kauko solmuun me varauksia yläpuolelle ja ajaa kokki-soolo komennolla:
(Alla oleva komento on suoritettava solmun tai "kokkiasiakkaan" sisällä, ei Chef Workstationissa.)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Tai tässä yksikerroksinen versio (joka suoritetaan ./my-chef-project/
CWD: ltä Chef Workstationissa):
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'
Se siitä! Katso, kuinka vakiotulostus täyttyy Chef-toiminnalla, joka yrittää lähentää solmuasi keittokirjoissa määrittämäsi kanssa. Chef-solo asentaa kaikki tarvittavat helmet kaikkiin keittokirjoihin. Jos chef-solo-komento onnistuu, meillä on toimiva Django-sovellus, joka toimii nginxin takana Ubuntu-laatikossa. Siirry verkkotunnukseen/IP-osoitteeseen testataksesi sitä.
Note: Remember that in django you may need to set this domain/ip in the
ALLOWED_HOSTS
list insettings.py
.
Aina kun teemme muutoksia projektihakemistomme sisältöön (resepteihin, malleihin tai sovelluksen lähdekoodiin jne.), suorita yllä oleva yksilinjainen projektihakemistosta.
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.
Jos tarkastelet viimeistä chef-solo-komentoa tarkasti, huomaa, että sen --recipe-url
on tarkoitus ottaa URL-osoite. Tämä tarkoittaa, että sinulla voi olla työnkulku, jossa CI rakentaa chef-solo-tarballisi, lataa sen jonnekin ja määrittää solmun ottamaan siitä säännöllisesti.
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 on suosittu avoimen lähdekoodin CI (Continuous Integration) -työkalu, jota käytetään laajasti projektien kehittämiseen, käyttöönottoon ja automatisointiin. Tämä artikkeli tulee
Käytätkö erilaista järjestelmää? Johdanto Continuous Integration on DevOps-ohjelmistokehityskäytäntö, jonka avulla kehittäjät voivat usein yhdistää
Käytätkö erilaista järjestelmää? Ansible on avoimen lähdekoodin työkalu tehtävien automatisointiin. Se hallitsee Linux- ja Windows-palvelimiesi kokoonpanoa. Se toimi
Käytätkö erilaista järjestelmää? GoCD on avoimen lähdekoodin jatkuva toimitus- ja automaatiojärjestelmä. Sen avulla voit mallintaa monimutkaisia työnkulkuja käyttämällä sen rinnakkaista an
Vaikka SaltStack on loistava työkalu toimintojen suorittamiseen useilla palvelimilla samanaikaisesti, se tukee myös isäntäkohtaisesti määritettyjä kokoonpanon esiasetuksia, jotka on tallennettu
Käytätkö erilaista järjestelmää? Ansible on avoimen lähdekoodin työkalu tehtävien automatisointiin. Se hallitsee Linux- ja Windows-palvelimiesi kokoonpanoa. Se toimi
Johdanto Drone on automatisoitu, jatkuva testaus- ja toimitusalusta, joka toimii omassa infrastruktuurissasi. Drone tukee mitä tahansa kieltä, palvelua o
Käytätkö erilaista järjestelmää? Foreman on ilmainen ja avoimen lähdekoodin työkalu, joka auttaa sinua määrittämään ja hallitsemaan fyysisiä ja virtuaalisia palvelimia. Forema
SaltStack tai Salt on suosittu avoimen lähdekoodin kokoonpanonhallintaratkaisu, jota voidaan käyttää etäsuorituksen, kokoonpanonhallinnan, koodin toteuttamiseen.
Johdanto Strider CD on avoimen lähdekoodin jatkuvan käyttöönoton alusta. Sovellus on kirjoitettu Node.js:ssä ja käyttää MongoDB:tä tallennustaustana. Askel
Johdanto Chocolatey tuo Windowsiin pakettien hallinnan, joka tekee ohjelmistojen ja riippuvuuksien hallinnasta helppoa Linuxissa. Voit nopeasti ja helposti
Mikä on Packer? Packer on HashiCorpin kehittämä palvelimen kuvantamistyökalu. Palvelimen kuvantaminen; tai vaihtoehtoisesti muuttumaton infrastruktuuri; on suosittu vaihtoehto
Käytätkö erilaista järjestelmää? Johdanto Continuous Integration on DevOps-ohjelmistokehityskäytäntö, jonka avulla kehittäjät voivat usein yhdistää
On monia tapoja automatisoida laatikon asennus- ja konfigurointiprosessi. Mistä tahansa syystä, jos koko järjestelmämme tässä vaiheessa koostuu vain
Käytätkö erilaista järjestelmää? Foreman on ilmainen ja avoimen lähdekoodin työkalu, joka auttaa sinua määrittämään ja hallitsemaan fyysisiä ja virtuaalisia palvelimia. Forema
SaltStack on python-pohjainen kokoonpanonhallintaohjelma, joka on optimoitu määritystiedostojen, käyttöönottojen ja kaiken muun automatisointiin.
Tekoäly ei ole tulevaisuudessa, se tässä nykyisyydessä Tässä blogissa Lue kuinka tekoälysovellukset ovat vaikuttaneet eri sektoreihin.
Oletko myös DDOS-hyökkäysten uhri ja hämmentynyt ehkäisymenetelmistä? Lue tämä artikkeli ratkaistaksesi kysymyksesi.
Olet ehkä kuullut, että hakkerit ansaitsevat paljon rahaa, mutta oletko koskaan miettinyt, kuinka he ansaitsevat tuollaista rahaa? keskustellaan.
Haluatko nähdä Googlen vallankumouksellisia keksintöjä ja kuinka nämä keksinnöt muuttivat jokaisen ihmisen elämää nykyään? Lue sitten blogia nähdäksesi Googlen keksinnöt.
Konsepti itseohjautuvista autoista lähteä tielle tekoälyn avulla on ollut haaveena jo jonkin aikaa. Mutta useista lupauksista huolimatta niitä ei näy missään. Lue tämä blogi saadaksesi lisätietoja…
Kun tiede kehittyy nopeasti ja ottaa haltuunsa suuren osan ponnisteluistamme, myös riskit altistaa itsemme selittämättömälle singulariteetille kasvavat. Lue, mitä singulaarisuus voisi tarkoittaa meille.
Tietojen säilytystavat ovat kehittyneet mahdollisesti Datan syntymästä lähtien. Tämä blogi käsittelee tiedon tallennuksen kehitystä infografian pohjalta.
Blogista saat tietää Big Data -arkkitehtuurin eri kerroksista ja niiden toiminnoista yksinkertaisimmalla tavalla.
Tässä digitaalisessa maailmassa kodin älylaitteista on tullut tärkeä osa elämää. Tässä on muutamia älykkäiden kodin laitteiden hämmästyttäviä etuja, joiden avulla ne tekevät elämästämme elämisen arvoista ja yksinkertaisempaa.
Apple julkaisi äskettäin macOS Catalina 10.15.4 -lisäpäivityksen ongelmien korjaamiseksi, mutta näyttää siltä, että päivitys aiheuttaa lisää ongelmia, jotka johtavat mac-koneiden tiilikaamiseen. Lue tämä artikkeli saadaksesi lisätietoja