Jenkins
2019-07-23-Jenkins
Jenkins
Jenkin是什么?
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建, 部署, 自动化, 满足任何项目的需要, Jenkins是一个独立的基于Java的程序, 可以立即运行, 包含Windows,Mac OS X和其他类Unix操作系统. ## Jenkins的特点: 持续集成和持续交付作为一个可扩展的自动化服务器, Jenkins可以用作简单的CI服务器, 或者变成任何项目的连续交付中心. Jenkins可以通过其网页界面轻松设置和配置, 其中包括即时错误检查和内置帮助. 通过更新中心中的1000多个插件, Jenkins集成了持续集成和持续交付工具链中几乎所有的工具. Jenkins 可以通过其插件架构进行扩展, 从而为 Jenkins 可以做的事提供几乎无限的可能性. Jenkins可以轻松地在多台机器上分配工作,帮助更快速地跨多个平台推动构建,测试和部署. ## Jenkins部署: ### 选用Ubuntu进行部署 + 建议所有操作在root下部署 + 关于Ubuntu设置永久DNS的方法:
1
2$ vim /etc/network/interfaces # dns-nameserver 192.168.137.2
$ vim /etc/systemd/resolved.conf # [Resolve] DNS=DNS
Ubuntu的相关配置:
192.168.37.10: jenkins/SVN; 192.168.37.12: 测试机; 192.168.37.14: 生产环境 #### 下载git
1
2
3
4
5
6
7
8
9
10
11
12
13
14$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
libz-dev libssl-dev
$ wget -O v2.22.0.tar.gz https://github.com/git/git/archive/v2.22.0.tar.gz
$ tar -xzvf git-v2.22.0.tar.gz
$ cd git-1.7.2.2
$ make prefix=/usr/local/git all
$ sudo make prefix=/usr/local/git install
$ vim /etc/profie
PATH=$PATH:/usr/local/bin
$ source /etc/profile
$ export PATH
搭建SVN(svn://IP/repos) 192.168.37.10
1 | |
安装Java 192.168.37.10
1 | |
安装apache-tomcat(java -jar jenkins.war) 192.168.37.10
1 | |
搭建私有镜像仓库与构建LNMP基础镜像
创建nginx php镜像
#### 创建文件(测试环境的配置)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
vim /etc/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries": ["192.168.37.10:5000"]
}
FROM centsos:6
MAINTAINER anyu967
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel && \
yumclaean all
ADD nginx-1.12.tar.gz /tmp
RUN cd /tmp/nginx-1.12 && ./configure --prefix=/usr/local/nginx && make -j 2 && \
make install && rm -rf /tmp/nginx-1.12.1
COPY nginx.cong /usr/local/nginx/conf
EXPOSED 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off:"]
FROM centsos:6
MAINTAINER anyu967
RUN yum install -y gcc gcc-c++ gd-devel libxml2-devel \
libcurl-devel libjpeg-devel libpng-devel openssl-devel && \
yum claean all
ADD php-5.6.31.tar.gz /tmp
RUN cd /tmp/php-5.6.31 && \
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysql --with-mysqli \
--with--openssl --with-zlib --with-curl --with-gd \
--with--jpeg-dir --with-png-dir --with-iconv \
--enable-fpm --enable-zip --enable-mbstring && \
make -j 4 && make install && \
cp /usr/local/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.cong && \
sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && \
chmod +x /etc/init.d/php-fpm && \
rm -rf /tmp/php-5.6.31
COPY php.ini /usr/local/php/etc
EXPOSED 9000
CMD /etc/init.d/php-fpm start && tail -F /var/log/messages
docker build -t 192.168.37.10:5000/lnmp-php:base .
docker push 192.168.37.10:5000/lnmp-php:base
location ~ \.php$ {
root html;
fastcgi_pass php-cgi:9000;
fastcgi_param SCRIPT_FILENAME scripts$fastcgi_script_name;
include fastcgi_params;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15|-- /home/anyue/lnmp
|-- Dockerfile
| |-- nginx
| |-- php
|-- config
| |-- prod.html
| |-- prod.tar.gz
| |-- test.html
| |-- test.tar.gz
|-- deploy.sh
|-- docker-compose.yml
|-- mysql_data
|-- push_images.sh
|-- revision.svn
|-- wwwrootdeploy.sh
1
2
3
4
5
6
7
8
9#!/bin/bash
REVISION=$1
WORK_ENV=test
echo $REVISION >./revision.svn
cd Dockerfile
docker build --build-arg work_env=$WORK_ENV -t lnmp-nginx:laste -f nginx ../ # tag
docker build --build-arg work_env=$WORK_ENV -t lnmp-php:laste -f php ../
docker-compose down
docker-compose up -dDocker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27version: "3"
service:
nginx:
image: lnmp_nginx:latest
ports:
- 80:80
links:
- php: php-cgi
depends_on:
- php
- mysql
php:
image: lnmp-php:latest
links:
- mysql: mysql-db
mysql:
image: mysql:5.6
ports:
- 3306:3306
volumes:
- ./mysql_data:/var/lib/mysql
command: --character-set-server=utf8
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: user123nginx && php
1
2
3
4
5
6
7
8
9
10
11
12
13FROM 192.168.37.10:5000/lnmp-nginx:base
MAINTAINER anyue
ARG work_env
ADD wwwroot /usr/local/nginx/html
ADD config/${work_env}.tar.gz /usr/local/nginx/html
EXPOSE 80
FROM 192.168.37.10:5000/lnmp-php:base
MAINTAINER anyue
ARG work_env
ADD wwwroot /usr/local/nginx/html
ADD config/${work_env}.tar.gz /usr/local/nginx/html
EXPOSE 9000push_image.sh
#### 创建文件(生产环境的配置)1
2
3
4
5
6
7
8
9#!/bin/bash
IMAGE_REPOS=192.168.37.10:5000
REVISION=$(cat revision.svn)
WORK_ENV=prod
cd Dockerfile
docker build --build-arg work_env=$WORK_ENV -t $IMAGE_REPOS/lnmp-nginx:$REVISION -f nginx ../
docker build --build-arg work_env=$WORK_ENV -t $IMAGE_REPOS/lnmp-php:$REVISION -f php ../
docker push $IMAGE_REPOS/lnmp-nginx:$REVISION
docker push $IMAGE_REPOS/lnmp-php:$REVISION1
2
3
4|-- deploy.sh
|-- docker-compose.yml
|-- revision.svn
|-- roll-back.shdeploy.sh
1
2
3
4
5
6
7
8
9
10
11#!/bin/bash
REVISION=revison.svn
IMAGE_REPOS=http://192.168.37.10:5000/v2
LATEST_REVISION=$(curl $IMAGE_REPOS/lnmp-nginx/tags/list |grep -Po '(?<=")\d+(?=")' |awk 'BEGIN{max=0} {for(i=0;i<=NF;i++) if($i>max) max=$i}END{print max}')
sed -i -r '/:5000/s/[0-9]+$/'$LATEST_REVISION'/' docker-compose.yml
if ! grep "^$LATEST_REVISION " $REVISION &>/dev/null; then
sed -i -r '$s/([0-9]+).*/\1 Previous/' $REVISION
echo "$LATEST_REVISION Current" >>$REVISION
fi
docker-compose down
docker-compose up -ddocker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26version: '3'
services:
nginx:
image: 192.168.37.10:5000/lnmp-nginx:12
ports:
- 80:80
links:
- php: php-cgi
depends_on:
- php
php:
image: 192.168.37.10:5000/lnmp-php:12
links:
- mysql: mysql-db
mysql:
image: mysql:5.6
ports:
- 3306:3306
volumes:
- ./mysql_data:/var/lib/mysql
command: --character-set-server=utf8
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: user123roll-back.sh
## Jenkins配置 | Manage Jenkin | desc | | :———————— | :———————————————————- | | Configure System | Configure global setting and paths | | Configure Global Security | Secure Jenkins; define who is allowed access/use the system | | Global Tool Configuration | Configure tools, their location and automatic installers | | Manager Users | Create/delete/modify users that can log in to this Jenkins |1
2
3
4
5#!/bin/bash
PRE_REVISION=$(awk 'Previous/{revision=$1} END{print revision}' revision.svn)
sed -i -r '/:5000/s/[0-9]+$/'$PRE_REVISION'/' docker-compose.yml
docker-compose down
docker-compose up -d
解决乱码
1 | |
Jenkins使用
原理
Configure System(配置SSH)
Global Tool Configuration(配置相关工具路径)