从alpine构建预装vcpkg的docker image用于gitea actions CI

动机

想要构建一个基于vcpkg的交叉编译容器平台用于cpp项目的CI(自动集成),此处仅提供最基础的image,amd64的机子上构建完成后大小为533兆(着实不小😓),各位看官可以在此基础上自行构建需要的版本。

hello world效果展示


corss_compiler.dockerfile

bash 复制代码
FROM alpine:latest
RUN apk update && apk upgrade
RUN apk add --no-cache build-base
RUN apk add --no-cache cmake
RUN apk add --no-cache wget
RUN apk add --no-cache zip
RUN apk add --no-cache unzip
RUN apk add --no-cache curl
RUN apk add --no-cache git
RUN apk add --no-cache nodejs
RUN apk add --no-cache re2c
RUN apk add --no-cache pkgconf
# 安装ninja-1.10.2 apk安装的固定为1.9版本 但vcpkg需要版本>=1.10.2,所以从源码来安装
# 种种原因如果wget下载失败就下载好了再拷贝进来
RUN cd /home && wget https://github.com/ninja-build/ninja/archive/refs/tags/v1.10.2.tar.gz -o ninja-1.10.2.tar.gz
# COPY ninja-1.10.2.tar.gz /home
RUN cd /home && tar -axvf ninja-1.10.2.tar.gz && rm ninja-1.10.2.tar.gz
RUN cd /home && cd ninja-1.10.2 && mkdir build && cd build && cmake .. && cmake --build . && make && make install
RUN cd /home && rm -r ninja-1.10.2
# 这一步执行时间较长失败请重试,请务必完全克隆vcpkg仓库,因为vcpkg的基线管理是基于git commit的sha码的详情请看vcpkg的相关文档,如果想要每次使用最新的版本不锁定库的版本,请每次执行工作流的时候使用git pull拉取最新的vcpkg
RUN cd /home && git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && sh bootstrap-vcpkg.sh
# 设置VCPKG_ROOT 环境变量,项目中的cmake脚本中使用该变量即可找到vcpkg的安装位置
ENV VCPKG_ROOT /home/vcpkg
# 此处之后可以预先下载编译一些库用于离线状态下的安装并加可以快工作流的速度
RUN cd /home/vcpkg && ./vcpkg install gtest:x64-linux

写好dockerfile后执行构建镜像,有代理的话使用代理可以更快完成

docker build . \
 -f corss_compiler.dockerfile \
 -t alpine-cross \
 --build-arg HTTP_PROXY=$HTTP_PROXY
 --build-arg HTTPs_PROXY=$HTTPS_PROXY

工作流

测试的工作流供参考,此处就不贴被测源码了

yaml 复制代码
name: Gitea Actions Demo2
run-name: ${{ github.actor }} is testing out Gitea Actions 🚀
on: [push]
jobs:
  Explore-Gitea-Actions2:
    runs-on: ubuntu-latest
    container:
      image: alpine-cross:latest
    steps:
      - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
      - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
      - name: Check out repository code
        env:
          GITHUB_TOKEN: ${{ github.token }}
        run: |
          git clone --depth=1 http://$GITHUB_TOKEN@192.168.1.100:3000/xxxxx/cpp_proj_template.git
          cd cpp_proj_template/unittest
          sh test4x64_g++_linux_release.sh
相关推荐
drebander4 小时前
Docker 安全基础:权限、用户、隔离机制
安全·docker·容器
柳鲲鹏8 小时前
docker push镜像到阿里云
阿里云·docker·容器
猪萌萌9 小时前
关于如何利用群晖Docker搭建Project Zomboid(僵尸毁灭工程)私人服务器-保姆级教程
服务器·docker·容器·僵尸世界大战·游戏服务器搭建
剩下了什么9 小时前
统信服务器操作系统V20 1070A 安装docker新版本26.1.4
运维·docker·容器
黑子哥呢?9 小时前
linux----docker配置nginx详细教程
linux·运维·nginx·docker
WCL-JAVA10 小时前
docker安装kafka,并通过springboot快速集成kafka
spring boot·docker·kafka
路由侠内网穿透10 小时前
无公网IP可实现外网访问群晖 WebDAV
网络·网络协议·tcp/ip·docker
安全检测中14 小时前
关于docker及容器的了解学习记录
学习·docker·容器
ChinaRainbowSea15 小时前
14. Docker 轻量级可视化工具 Portainer(的详细安装步骤+常规使用详细说明)
java·运维·docker·云原生·容器
Wwwilling15 小时前
docker run失败
运维·docker·容器