docker-compose.yaml 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. {% set tpl = ix_lib.base.render.Render(values) %}
  2. {% set perm_container = tpl.deps.perms(values.consts.perms_container_name) %}
  3. {% set server = tpl.add_container(values.consts.server_container_name, "image") %}
  4. {% set agent = tpl.add_container(values.consts.agent_container_name, "agent_image") %}
  5. {% set perms_config = {"uid": values.run_as.user, "gid": values.run_as.group, "mode": "check"} %}
  6. {% set pg_config = {
  7. "user": values.consts.db_user,
  8. "password": values.woodpecker.db_password,
  9. "database": values.consts.db_name,
  10. "volume": values.storage.postgres_data,
  11. } %}
  12. {% set postgres = tpl.deps.postgres(
  13. values.consts.postgres_container_name,
  14. values.woodpecker.postgres_image_selector,
  15. pg_config, perm_container
  16. ) %}
  17. {# Agent #}
  18. {% set agent_labels = namespace(x=[]) %}
  19. {% for label in values.woodpecker.agent.labels %}
  20. {% do agent_labels.x.append("%s=%s" | format(label.key, label.value)) %}
  21. {% endfor %}
  22. {% do agent.set_user(values.run_as.user, values.run_as.group) %}
  23. {% do agent.depends.add_dependency(values.consts.server_container_name, "service_healthy") %}
  24. {% do agent.healthcheck.set_custom_test(["CMD", "/bin/woodpecker-agent", "ping"]) %}
  25. {# Github Actions Docker Group #}
  26. {% if values.ci %}{% do agent.add_group(118) %}{% endif %}
  27. {% do agent.environment.add_env("WOODPECKER_SERVER", "%s:%d" | format(values.consts.server_container_name, values.network.grpc_port.port_number)) %}
  28. {% do agent.environment.add_env("WOODPECKER_BACKEND", "docker") %}
  29. {% do agent.environment.add_env("WOODPECKER_GRPC_SECURE", false) %}
  30. {% do agent.environment.add_env("WOODPECKER_HEALTHCHECK", true) %}
  31. {% do agent.environment.add_env("WOODPECKER_HEALTHCHECK_ADDR", ":%d" | format(values.consts.agent_health_check_port)) %}
  32. {% do agent.environment.add_env("WOODPECKER_AGENT_SECRET", values.woodpecker.agent_secret) %}
  33. {% do agent.environment.add_env("WOODPECKER_MAX_WORKFLOWS", values.woodpecker.agent.max_workflows) %}
  34. {% do agent.environment.add_env("WOODPECKER_AGENT_LABELS", agent_labels.x|join(",")) %}
  35. {% do agent.environment.add_user_envs(values.woodpecker.agent_additional_envs) %}
  36. {% do agent.add_storage("/etc/woodpecker", values.storage.agent_config) %}
  37. {% do perm_container.add_or_skip_action("agent_config", values.storage.agent_config, perms_config) %}
  38. {% do agent.add_docker_socket(read_only=false) %}
  39. {# Server #}
  40. {% do server.set_user(values.run_as.user, values.run_as.group) %}
  41. {% do server.depends.add_dependency(values.consts.postgres_container_name, "service_healthy") %}
  42. {% do server.healthcheck.set_custom_test(["CMD", "/bin/woodpecker-server", "ping"]) %}
  43. {% do server.environment.add_env("WOODPECKER_OPEN", values.woodpecker.allow_registration) %}
  44. {% if values.woodpecker.forge.type == "github" %}
  45. {% do server.environment.add_env("WOODPECKER_GITHUB", true) %}
  46. {% do server.environment.add_env("WOODPECKER_GITHUB_CLIENT", values.woodpecker.forge.github.client_id) %}
  47. {% do server.environment.add_env("WOODPECKER_GITHUB_SECRET", values.woodpecker.forge.github.client_secret) %}
  48. {% elif values.woodpecker.forge.type == "gitea" %}
  49. {% do server.environment.add_env("WOODPECKER_GITEA", true) %}
  50. {% do server.environment.add_env("WOODPECKER_GITEA_URL", values.woodpecker.forge.gitea.url) %}
  51. {% do server.environment.add_env("WOODPECKER_GITEA_CLIENT", values.woodpecker.forge.gitea.client_id) %}
  52. {% do server.environment.add_env("WOODPECKER_GITEA_SECRET", values.woodpecker.forge.gitea.client_secret) %}
  53. {% do server.environment.add_env("WOODPECKER_GITEA_SKIP_VERIFY", values.woodpecker.forge.gitea.skip_tls_verify) %}
  54. {% elif values.woodpecker.forge.type == "forgejo" %}
  55. {% do server.environment.add_env("WOODPECKER_FORGEJO", true) %}
  56. {% do server.environment.add_env("WOODPECKER_FORGEJO_URL", values.woodpecker.forge.forgejo.url or "https://next.forgejo.org") %}
  57. {% do server.environment.add_env("WOODPECKER_FORGEJO_CLIENT", values.woodpecker.forge.forgejo.client_id) %}
  58. {% do server.environment.add_env("WOODPECKER_FORGEJO_SECRET", values.woodpecker.forge.forgejo.client_secret) %}
  59. {% do server.environment.add_env("WOODPECKER_FORGEJO_SKIP_VERIFY", values.woodpecker.forge.forgejo.skip_tls_verify) %}
  60. {% elif values.woodpecker.forge.type == "bitbucket" %}
  61. {% do server.environment.add_env("WOODPECKER_BITBUCKET", true) %}
  62. {% do server.environment.add_env("WOODPECKER_BITBUCKET_CLIENT", values.woodpecker.forge.bitbucket.client_id) %}
  63. {% do server.environment.add_env("WOODPECKER_BITBUCKET_SECRET", values.woodpecker.forge.bitbucket.client_secret) %}
  64. {% elif values.woodpecker.forge.type == "gitlab" %}
  65. {% do server.environment.add_env("WOODPECKER_GITLAB", true) %}
  66. {% do server.environment.add_env("WOODPECKER_GITLAB_URL", values.woodpecker.forge.gitlab.url or "https://gitlab.com") %}
  67. {% do server.environment.add_env("WOODPECKER_GITLAB_CLIENT", values.woodpecker.forge.gitlab.client_id) %}
  68. {% do server.environment.add_env("WOODPECKER_GITLAB_SECRET", values.woodpecker.forge.gitlab.client_secret) %}
  69. {% do server.environment.add_env("WOODPECKER_GITLAB_SKIP_VERIFY", values.woodpecker.forge.gitlab.skip_tls_verify) %}
  70. {% endif %}
  71. {% do server.environment.add_env("WOODPECKER_HOST", values.woodpecker.external_url) %}
  72. {% do server.environment.add_env("WOODPECKER_SERVER_ADDR", ":%d" | format(values.network.http_port.port_number)) %}
  73. {% do server.environment.add_env("WOODPECKER_GRPC_ADDR", ":%d" | format(values.network.grpc_port.port_number)) %}
  74. {% do server.environment.add_env("WOODPECKER_AGENT_SECRET", values.woodpecker.agent_secret) %}
  75. {% do server.environment.add_env("WOODPECKER_DATABASE_DRIVER", "postgres") %}
  76. {% do server.environment.add_env("WOODPECKER_DATABASE_DATASOURCE", postgres.get_url("postgres")) %}
  77. {% do server.environment.add_user_envs(values.woodpecker.server_additional_envs) %}
  78. {% if values.network.certificate_id %}
  79. {% set cert = values.ix_certificates[values.network.certificate_id] %}
  80. {% do server.configs.add("private", cert.privatekey, values.consts.ssl_key_path) %}
  81. {% do server.configs.add("public", cert.certificate, values.consts.ssl_cert_path) %}
  82. {% do server.environment.add_env("WOODPECKER_SERVER_CERT", values.consts.ssl_cert_path) %}
  83. {% do server.environment.add_env("WOODPECKER_SERVER_KEY", values.consts.ssl_key_path) %}
  84. {% do server.environment.add_env("SERVER_ADDR_TLS", ":%d" | format(values.network.https_port.port_number)) %}
  85. {% do server.add_port(values.network.https_port) %}
  86. {% do tpl.portals.add(values.network.https_port, {"name": "HTTPS", "scheme": "https"}) %}
  87. {% endif %}
  88. {% do server.add_port(values.network.http_port) %}
  89. {% for store in values.storage.additional_storage %}
  90. {% do agent.add_storage(store.mount_path, store) %}
  91. {% do perm_container.add_or_skip_action(store.mount_path, store, perms_config) %}
  92. {% endfor %}
  93. {% if perm_container.has_actions() %}
  94. {% do perm_container.activate() %}
  95. {% do agent.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  96. {% do postgres.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  97. {% endif %}
  98. {% do tpl.portals.add(values.network.http_port, {"name": "HTTP"}) %}
  99. {{ tpl.render() | tojson }}