gitlab runner 实战

Posted w329636271

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gitlab runner 实战相关的知识,希望对你有一定的参考价值。

本篇文章需要实现:
(1)maven项目的打包
(2)docker镜像打包
(3)配置ssh免密登录,文件拷贝
demo项目地址
git地址 https://github.com/zwyqz/renren_fast.git
git remote remove origin
git remote add origin http://gitlab.example.com/gitlab-instance-a7f43c36/renren-fast_gitlab_runner.git
git push -uf origin master

(1)maven项目的打包
找到项目的CI/CD->编辑器->选择分支(master)->配置流水线->拷贝以及配置文件->提交更改->查看结果:
其中/root/.m2/repository 这个指定为固定目录,在创建docker的时候,目录地址进行了映射,以便jar包重复下载,加快编译速度。(指定是在config.toml中配置了,具体可以看,在注册的时候进行配置;(https://blog.csdn.net/w329636271/article/details/126368266)

stages:          # List of stages for jobs, and their order of execution
  - build
  - test
  - deploy

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository"
build-job:       # This job runs in the build stage, which runs first.
  stage: build
  image: maven:3.6.3-jdk-8-openj9
  script:
    - echo "Compiling the code..."
    - echo "Compile complete."
    - pwd
    - mvn  clean package -DskipTests=true $MAVEN_OPTS package 
  only:
    # 只对master分支运行job
    - master
  artifacts:
    expire_in: 1 week
    paths:
      # 可以指定到某个文件(这里指定到了jar包),或者整个target/目录 可以用于下载
      - target/renren-fast.jar  

执行结果如下:

(2)docker镜像打包

Dockerfile

FROM java:8
EXPOSE 8090

VOLUME /tmp
ADD target/renren-fast.jar  /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]

.gitlab-ci.yml文件

stages:          # List of stages for jobs, and their order of execution
  - build
  - test
  - deploy

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository"
  IMAGE_NAME: "appimages"
  CONTAINER_NAME: "app-container"
build-job:       # This job runs in the build stage, which runs first.
  stage: build
  image: maven:3.6.3-jdk-8-openj9
  script:
    - echo "Compiling the code..."
    - echo "Compile complete."
    - pwd
    - mvn  clean package -DskipTests=true $MAVEN_OPTS package 
  only:
    # 只对master分支运行job
    - master
  artifacts:
    expire_in: 1 week
    paths:
      # 可以指定到某个文件(这里指定到了jar包),或者整个target/目录 可以用于下载
      - target/renren-fast.jar  
job_deploy:
    image: docker
    stage: deploy
    script:
      - docker build -t $IMAGE_NAME .
      - if [ $(docker ps -aq --filter name=$CONTAINER_NAME) ]; then docker rm -f $CONTAINER_NAME;fi
      - docker run -d -p 8080:80 --name $CONTAINER_NAME $IMAGE_NAME  
      # 删除为none的images    
      - docker rmi $(docker images | awk '/^<none>/  print $3 ')

(3)配置ssh免登陆
步骤1.配置服务器之间的ssh免登陆,参考(ssh免密登录免提示登录
步骤2. base64加密id_rsa的内容

cat ~/.ssh/id_rsa |  base64 -w0


步骤3. 在gitlab中创建环境变量
设置->CI/CD->变量(展开)->添加变量保护变量不勾选。
步骤4.测试模块
修改job_copy中的对应的ip,
以下模块通过免登陆做了(1)输出aa到/tmp/tmp.txt (2)拷贝target的文件内容到/tmp/中

stages:          # List of stages for jobs, and their order of execution
  - build
  - test
  - deploy

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository"
  IMAGE_NAME: "appimages"
  CONTAINER_NAME: "app-container"
build-job:       # This job runs in the build stage, which runs first.
  stage: build
  image: maven:3.6.3-jdk-8-openj9
  script:
    - echo "Compiling the code..."
    - echo "Compile complete."
    - pwd
    - mvn  clean package -DskipTests=true $MAVEN_OPTS package 
  only:
    # 只对master分支运行job
    - master
  artifacts:
    expire_in: 1 week
    paths:
      # 可以指定到某个文件(这里指定到了jar包),或者整个target/目录 可以用于下载
      - target/renren-fast.jar  
job_deploy:
    image: docker
    stage: deploy
    script:
      - docker build -t $IMAGE_NAME .
      - if [ $(docker ps -aq --filter name=$CONTAINER_NAME) ]; then docker rm -f $CONTAINER_NAME;fi
      - docker run -d -p 8080:80 --name $CONTAINER_NAME $IMAGE_NAME  
      # 删除为none的images    
      - docker rmi $(docker images | awk '/^<none>/  print $3 ')
job_copy:
    image: docker
    stage: deploy
    before_script:
        - 'which ssh-agent || ( yum update -y && yum install openssh-client git -y ) '
        - eval $(ssh-agent -s)
        - echo $SSH_PRIVATE_KEY  |  base64 -d
        - echo $SSH_PRIVATE_KEY  |  base64 -d
        - echo $SSH_PRIVATE_KEY  |  base64 -d | ssh-add -
        # - cat id_rsa |  base64 -w0
        - mkdir -p ~/.ssh
        - chmod 700 ~/.ssh
        - ssh-keyscan  -p 28488  45.62.123.30 > ~/.ssh/known_hosts  //45.62.123.30替换为远程服务器的地址
        - chmod 644 ~/.ssh/known_hosts
    script:
       - ssh -p 28488 45.62.123.30  'echo aa >>  /tmp/tmp.txt'
       # - ssh -p 28488 45.62.123.30  mkdir /tmp/deploy1
       - scp -P 28488 -r target/* 45.62.123.30:/tmp/      

参考链接如下:
https://blog.csdn.net/weixin_47656385/article/details/123043020
https://gitlab.com/gitlab-examples
https://www.codenong.com/55223622/
kill -9 $(ps -ax | grep sftp | awk -F " " ‘print $1 ’)

以上是关于gitlab runner 实战的主要内容,如果未能解决你的问题,请参考以下文章

gitlab runner 实战

gitlab gitlab runner

gitlab-runner 随机运行为 root 而不是用户 gitlab-runner

gitlab-runner运行一直卡住

Gitlab CI/CD Runner

gitlab runner 权限问题