Jenkins Setup - aragorn/home GitHub Wiki
installation
- setup an Ubuntu Server
- JDK
- git
- install jenkins on ubuntu server
https://www.rosehosting.com/blog/install-jenkins-on-an-ubuntu-14-04-vps/ - setup ldap configuration
plugins
κΈ°λ³Έ plugin μ μΆκ°νμ¬ μ€μΉνλ νλ¬κ·ΈμΈ
- Git plugin
- Cron Column Plugin
- Grails plugin
- user build vars plugin
- inheritance-plugin
μ¬μ©ν κ²μΈμ§ μ¬λΆλ₯Ό μ λͺ¨λ₯΄κ² λ€...
- Build Pipeline Plugin ?
- Delivery Pipeline Plugin ?
HTTP Proxy μ€μ
- Jenkins κ΄λ¦¬ > νλ¬κ·ΈμΈ κ΄λ¦¬ > κ³ κΈ λ©λ΄μμ HTTP Proxy λ₯Ό μ€μ ν μ μλ€.
μλ², ν¬νΈ λ±μ μ§μ ν ν, νλ©΄μ κ°μ₯ μλ μ€λ₯Έμͺ½μ 보μ΄λ "μ§κΈ νμΈ" λ²νΌμ λλ₯΄λ©΄, μ λ°μ΄νΈ μ¬μ΄νΈλ‘λΆν° κ°±μ μ΄ κ°λ₯νλ€. μ¬κΈ°μμ μ€μ ν νλ‘μ μ€μ μ μ΄ν JDK, Grails μλμ€μΉ λ±μμλ μ¬μ©λλ€.
ldap setup
- μ¬λ΄ LDAP μ€μ κ°μ΄λλ₯Ό λ°λΌ μ€μ νλ©΄ Configure Global Security μ€μ μΌλ‘ λ‘κ·ΈμΈ κΈ°λ₯μ΄ μλνλ€.
git and credentials
- μ¬λ΄ github μμ source code λ₯Ό clone νκΈ° μν΄μλ μ κ·ΌκΆνμ μ»μ΄μΌ νλ€. μ΄λ₯Ό μν μ€μ λ°©λ²μ΄ μ¬λ¬κ°μ§κ° μμΌλ, jenkins κ° μ€μΉλ μλ²μμ ssh-keygen μΌλ‘ ssh public/private key λ₯Ό μμ±νκ³ , μ΄ public key λ₯Ό github repository μ μΆκ°νλ λ°©λ²μ μ¬μ©νλ€.
- jenkins κ° μ€μΉλ μλ²μμ ssh-keygen μ μ€ννλ€.
ubuntu server μμ μμ μ€μΉ κ°μ΄λμ λ°λΌ jenkins λ₯Ό μ€μΉνλ©΄, jenkins λΌλ κ³μ μ΄ μμ±λκ³ , νλλ ν λ¦¬κ° /var/lib/jenkins λ‘ μ§μ λλ€. su - jenkins λ‘ jenkins κ³μ μ κΆνμ μ»μ ν, ssh-keygen λͺ λ Ήμ μ€ννλ€. /var/lib/jenkins/.ssh/id_rsa.pub νμΌμ΄ μμ±λ κ²μ νμΈνλ€. - github repository μμ settings λ©λ΄μ λ€μ΄κ°λ©΄, Deploy keys λ₯Ό μΆκ°ν μ μλ€.
Add deploy key λ²νΌμ μ ννκ³ , title μλ jenkins@hostname μ λμ ꡬλΆκ°μ μ λ ₯νκ³ , Key μ λ°©κΈ μμ±ν id_rsa.pub μ κ°μ 볡μ¬νμ¬ λ£λλ€. - jenkins μΉμΈν°νμ΄μ€μ Jenkins > Credentials > Global credentials (unrestricted) λ©λ΄μμ Add Credentials λ₯Ό ν΅ν΄ μΈμ¦ μ 보λ₯Ό μ
λ ₯νλ€.
Kind λ SSH Username with private key, Scope μ Global, Username μ jenkins@hostname, Private Key λ From the Jenkins master ~/.ssh λ₯Ό μ ννλ€.
- jenkins κ° μ€μΉλ μλ²μμ ssh-keygen μ μ€ννλ€.
- jenkins μ item configure μμ μμμ μ€μ ν κ°λ€μ μ¬μ©νλ€.
μμ€μ½λ κ΄λ¦¬λ₯Ό Git μΌλ‘ μ νν ν, Repository URL, Credentials λ₯Ό μ€μ νλ€. μ΄ν λΉλ ν μ€νΈ κ³Όμ μμ μ μμ μΌλ‘ μμ€μ½λλ₯Ό κ°μ Έμ€λμ§ νμΈνλ€.
JDK, Grails Setup
- Jenkins κ΄λ¦¬ > μμ€ν μ€μ λ©λ΄μ μ€μ λ§μΌλ‘ JDK, Grails λ₯Ό μ€μΉν μ μλ€.
Maven Project Configuration
-
λ΄λΆ maven repository μ μ κ·Όνμ§ λͺ»νλ€λ μλ¬ λ©μμ§κ° λ°μν μ μλ€.
~/.m2/settings.xml μ λ¬Έμ λ‘ μΆμΈ‘νκ³ μ¬λ¬κ°μ§ μλλ₯Ό ν΄ λ³΄μμΌλ, μ€μ λ¬Έμ μ μμΈμ proxy μλ²μ μ κ·Όμ μ΄ λ¬Έμ μλ€. Build With Grails μ νλ‘νΌν° μ€μ μμ λ€μκ³Ό κ°μ΄ http.nonProxyHosts μ€μ μ μΆκ°νμ¬ λ΄λΆμλ²λ proxy μλ²λ₯Ό ν΅νμ§ μλλ‘ μ€μ νλ€.grails.env=sandbox https.proxyHost=proxy.mycompany.io https.proxyPort=3128 http.proxyHost=proxy.mycompany.io http.proxyPort=3128 http.nonProxyHosts=localhost|127.0.0.0/8|192.168.0.0/16|10.0.0.0/8|172.16.0.0/12|*.mycompany.io|*.companycorp.com|*.mycompany.net|*.mycompany.com
JVM Options By Environment Variables
- JVM μ€ν μ΅μ μ μΆκ°νκΈ° μν΄ νκ²½λ³μλ₯Ό μ€μ ν νμκ° μλ€. μλ₯Ό λ€μ΄ target μ war λ‘ νμ¬ λΉλλ₯Ό μ§ννλ λμ€, λ©λͺ¨λ¦¬ λΆμ‘±μΌλ‘ λΉλκ° μ€ν¨νλ κ²½μ°κ° λ°μν μ μλ€. Grails Build μ€μ μμλ JVM μ΅μ μ λ³κ²½νκΈ° μν μ€μ μ μ 곡νμ§ μλ κ²μΌλ‘ 보μΈλ€.
- Environment Injector Plugin μ μ€μΉνλ©΄, Build Configure μμ 'Inject environment variables to the build process' νλͺ©μ΄ μΆκ°λλ€. μ΄ μ€μ μμ μλμ κ°μ μ΅μ
μ μΆκ°ν μ μλ€.
JAVA_OPTS=-server -noverify -Xms2G -Xmx6G -XX:+UseParallelGC
codenarc and violations plugin
Grails μμ codenarc plugin μ BuildConfig.groovy μ μ μ©νκ³ , Jenkins μμ Violations νλ¬κ·ΈμΈμ μ€μΉνλ©΄, codenarc μ μ μ λΆμ κ²°κ³Όλ₯Ό jenkins μμ λ°λ‘ νμΈν μ μλ€.
violations νλ¬κ·ΈμΈ ννμ΄μ§λ λ¬Έμμμ μΉμ ν μ€μ λ°©λ²μ μλ €μ£Όμ§ μμμ μ€μ κ³Όμ μ΄ κΉλ€λ‘λ€λ©΄ κΉλ€λ‘λ€.
- jenkins μμ violations plugin μ μ€μΉν ν, Project configuration μμ Violations Report λ₯Ό μμ±ν μ μλ€. 'λΉλ ν μ‘°μΉ' νλͺ©μμ 'Report Violations' νλͺ©μ μ ννλ©΄ λλ€. Freestyle project λΏλ§ μλλΌ, Inheritance project μ νμλ μ΄ μ€μ μ μΆκ°ν μ μλ€.
- codenarc λ₯Ό μ¬μ©νλ κ²½μ°, XML filename pattern μΌλ‘
**/CodeNarc-Report.xml
μ κ°μ κ°μ μ λ ₯νλ©΄ λλ€. λΉλκ° μ±κ³΅νλ©΄, ν΄λΉ λΉλλ₯Ό μμΈμ‘°ννλ νλ©΄μ μΌμͺ½ λ©λ΄μViolations
λΌλ λ©λ΄κ° μΆκ°λ κ²μ νμΈν μ μλ€. μ΄ λ©λ΄λ₯Ό μ ννλ©΄, λΆμ 리ν¬νΈλ₯Ό μ΄ν΄λ³Ό μ μλ€. - Grails μ κ²½μ°, multi-module project λ₯Ό μ¬μ©νλ κ²½μ°κ° λ§λ€. μ΄ κ²½μ°, 리ν¬νΈ μμ± ν κ° νμΌμ μμΈ λ¦¬ν¬νΈλ₯Ό μ‘°νν μ μλ νμμ΄ λ°μν μ μλ€. XML κΈ°λ°μ 리ν¬νΈμ μμ€μ½λ μ°κ²°μ νμ§ λͺ»ν΄μ λνλλ νμμΈλ°, μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ Project configuration μμ
Faux Project Path
λΌλ κ°μ μ μ ν μ λ ₯νμ¬μΌ νλ€. μ΄ κ°μ μ΄λ»κ² μ λ ₯ν΄μΌ νλμ§ λ¬Έμμμ μ μ€λͺ νμ§ μλλ°, μ΄ κ°μ jenkins μ workspace + project directory κ²½λ‘λ₯Ό λ체νλ κ°μ΄λ©°, μ λκ²½λ‘λ₯Ό μ λ ₯ν΄μΌλ§ νλ€.- https://github.com/jenkinsci/violations-plugin/blob/master/src/main/java/hudson/plugins/violations/ViolationsCollector.java
μ΄ μ½λμ private void doType(), findFiles(workspace, name) λ©μλλ₯Ό μ°Έκ³ νλ©΄ λλ€. Faux Project Path κ° μ€μ λ κ²½μ°, workspace κ° μ΄ μ€μ κ°μΌλ‘ λ체λλ€.
- https://github.com/jenkinsci/violations-plugin/blob/master/src/main/java/hudson/plugins/violations/ViolationsCollector.java
- μ¬λ΄ CI μλ²μμ μ¬μ©ν Faux Project Path μ€μ κ°μ μλμ κ°λ€.
/var/lib/jenkins/workspace/sandbox.grails2.common.codenarc/common
- /var/lib/jenkins - μ ν¨μ€ νλλ ν 리 κ²½λ‘μ΄λ©°, ubuntu μλ²μ κΈ°λ³Έ μ€μ κ°μ΄λ€.
- workspace - μ ν¨μ€μμ μ¬μ©νλ μν¬μ€νμ΄μ€ κ²½λ‘
- sandbox.grails2.common.codenarc - μ ν¨μ€μμ μ€μ ν Project μ μ΄λ¦
- common - Grails μ module μ΄λ¦
common/grails-app/, common/src/ κ³Ό κ°μ κ²½λ‘μ μ€μ μμ€μ½λκ° μμΉνλ€.
Slave Instances
slave λ Έλλ₯Ό μΆκ°λ‘ ꡬμ±νλ€.
-
http://systemscitizen.com/2014/05/02/ubuntu-jenkins-slave-using-ssh/
-
μλ‘μ΄ VM μΈμ€ν΄μ€λ₯Ό μμ±νλ€.
- slave node μλ jenkins λ₯Ό apt-get μΌλ‘ μ€μΉνμ§ μλλ€.
- JDK λ₯Ό μ€μΉνλ€.
-
/etc/group, /etc/passwd μ λ§μ§λ§ κ·Έλ£Ή, κ³μ μ GID, UID λ₯Ό νμΈνλ€.
- μ΄λ² μλ²μ κ²½μ°, ntp group μ΄ GID 111, UID 106 μ΄λ€.
- jenkin λ₯Ό μ€μΉνλ κ²½μ°, λ€μκ³Ό κ°μ κ³μ μ΄ λ§λ€μ΄μ§λ€.
jenkins:x:107:112:Jenkins,,,:/var/lib/jenkins:/bin/bash
-
sudo groupadd -g 112 jenkins
-
sudo useradd -u 107 -g 112 -c Jenkins -m -d /var/lib/jenkins -s /bin/bash jenkins
-
su - jenkins
-
.ssh/authorized_keys μ master λ Έλ jenkins κ³μ μ ssh public key λ₯Ό 볡μ¬ν΄μ λ£λλ€.
-
master node μ jenkins κ³μ μμ slave node λ‘ ssh μ°κ²°λλμ§ νμΈνλ€. μΈμ¦ μμ΄ μ°κ²°λμ΄μΌ νλ€.
-
master node μ μ ν¨μ€ μΉμΈν°νμ΄μ€μμ slave node λ₯Ό ꡬμ±νλ€.
- Credential μ€μ μ μ£Όμν΄μΌ νλ€. Credential μ€μ μ μμ±ν λ, Username μ§μ μ μ£Όμν΄μΌ νλ€.
Kind λ SSH Username with private key, Scope μ Global, Username μ jenkins, Private Key λ From the Jenkins master ~/.ssh λ₯Ό μ ννλ€. Username μ jenkins@hostname μΌλ‘ μ§μ νλ©΄ master node μμ slave node λ‘ μ°κ²°λμ§ μκ² λλ€.
- Credential μ€μ μ μ£Όμν΄μΌ νλ€. Credential μ€μ μ μμ±ν λ, Username μ§μ μ μ£Όμν΄μΌ νλ€.
-
slave node μ°κ²° ν, λμμ μ€νν job μ μ λ±μ μ€μ ν ν, job μ μ€ννλ€.
- slave node μ git μ΄ μ€μΉλμ΄ μμ§ μλ€λ©΄, μλ¬κ° λ°μν μ μλ€.
sudo apt-get install git --yes
λ‘ git μ μ€μΉνλ€. - jenkins μμ μ¬μ©ν JDK, Grails λ±μ΄ slave node μμ μλμΌλ‘ μ€μΉλλ€.
- slave node μ git μ΄ μ€μΉλμ΄ μμ§ μλ€λ©΄, μλ¬κ° λ°μν μ μλ€.
Grails and Jenkins
- κ°μμλ²μ λ©λͺ¨λ¦¬λ₯Ό 8GB λ‘ ν λΉν κ²½μ°, Grails Build μμ μ 4κ° μ΄μ μ€ννλ©΄, λ©λͺ¨λ¦¬ λΆμ‘±μΌλ‘ μμ μ΄ μ μμ μΌλ‘ μ€νλμ§ μλλ€. Grails Build κ³Όμ μμ Java νλ‘μΈμ€κ° RSS 2.5GB μ΄μ μ¬μ©νλ μνλ₯Ό μ’ μ’ νμΈν μ μλ€. 8GB μλ² κΈ°μ€μΌλ‘ μ΅λ 3κ° μμ μ λμμ μ€ννλλ‘ μ€μ νλ€.
- best practice to estimate java heap size
- μλμ κ°μ΄ μ΅μ heap size λ₯Ό μ€μ΄λ©΄, μ€ν λμ€ μ΅λ λ©λͺ¨λ¦¬κ° 1.6GB μ λλ‘ μ€μ΄λ λ€.
JAVA_OPTS=-server -noverify -Xms512M -Xmx4G -XX:+UseParallelGC
- java heap size μ μ μ ν μ€μ κ°μ μμλ΄κΈ° μν΄ μΆ©λΆν ν μ€νΈκ° νμνλ€.