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 | |
搭建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 | |
deploy.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:$REVISION
创建文件(生产环境的配置)
1 | |
- deploy.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 -d - docker-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: user123 - roll-back.sh
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
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 | |
Jenkins使用
原理
Configure System(配置SSH)
Global Tool Configuration(配置相关工具路径)
Jenkins
https://anyu967.github.io/posts/9a7f448e.html