DevOps常用软件 jenkins
1. 安装docker-ce及docker-compose
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get -y update
sudo apt-get -y install docker-ce docker-compose
注:这里所安装的ubuntu软件仓库中的docker-compose版本其实比较低了,会导致出现docker login失败以及harbor无法安装等问题,如果有这些需求,建议直接下载官网的二进制包进行安装docker-compose 安装地址
2. 安装启动jenkins
- 拉取Jenkins镜像
docker pull jenkins/jenkins:lts
- 创建docker-compose.yml文件
version: '3'
services:
jenkins:
container_name: 'jenkins'
image: jenkins/jenkins:lts
restart: always
user: jenkins:994
ports:
- "10001:8080"
- "50001:50000"
- "10051:10051"
volumes:
- /home/jenkins/data:/var/jenkins_home
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
- 创建并启动启动jenkins容器
# 这里 -d 参数指以后台daemon方式启动 docker-compose -f docker-compose.yml up -d
- 完成后建议安装插件(除推荐安装插件以外)
- gitlab
- role base
- ldap
- WMI Windows Agents
- Dashboard View
- AnsiColor
- thinbackup
- Build With Parameters
3. 配置gitlab登陆
# 在jenkins机器上建立公私钥对
ssh-keygen -t rsa -b 4096 -C "249292897@qq.com"
passphrase 是用于加密部署密钥的
Build when a change is pushed to GitLab. GitLab webhook URL: http://jenkins.daijiyu.cn/project/jenkins-demo
自动化构建项目实例
git后执行脚本
#!/bin/bash
# 参数化构建
CONTAINER=${container_name}
PORT=${port}
# 使用Dockerfile进行自动构建镜像
docker build --no-cache -t ${image_name}:${tag} .
# 检查是否正在运行,如果没有该容器会报错,重定向到/dev/null 使输出为空
RUNNING=$(docker inspect --format="{{ .State.Running }}" 66redis 2>/dev/null)
if [ "$RUNNING" == "true" ]; then
echo "$CONTAINER is running."
# 获取instanceId
matchingStarted=$(docker ps --filter="name=$CONTAINER" -q | xargs)
if [ -n "$matchingStarted" ]; then
docker stop $matchingStarted
echo -e "\033[31m[info] Docker Container $CONTAINER Stopped!\033[0m"
fi
# 获取instanceId
matching=$(docker ps -a --filter="name=$CONTAINER" -q | xargs)
if [ -n "$matching" ]; then
docker rm $matching
echo -e "\033[31m[info] Docker Container $CONTAINER Removed!\033[0m"
fi
else
echo -e "\033[31m[info] Docker Container $CONTAINER is not running.\033[0m"
fi
# 启动容器
docker run -itd --name $CONTAINER -p $PORT:80 ${image_name}:${tag}
# 删除 Dockerfile 构建过程中产生的无用镜像
docker rmi $(docker images -f "dangling=true" -q)
echo -e "\033[32m[INFO] Docker Container $CONTAINER Start Complete!\033[0m"
附: 对应项目的Dockerfile
# build stage
FROM node:12-alpine as build-stage
LABEL maintainer=DaiJiyu
# 创建一个工作目录
WORKDIR /app
COPY . .
RUN npm config set registry https://registry.npm.taobao.org
RUN npm install --no-progress
RUN npm run build
# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html/commreport
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]