jenkins配置打包及自动构建

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;"]

发表回复

您的电子邮箱地址不会被公开。